'use strict';
var obsidian = require('obsidian');
var require$$0 = require('zlib');
var require$$1 = require('fs');
var require$$2 = require('http');
var require$$3 = require('https');
var require$$4 = require('url');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
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 (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
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 getDefaultExportFromCjs (x) {
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}
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');
}
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__(16);
var _api_compatibility = __w_pdfjs_require__(7);
var _worker_options = __w_pdfjs_require__(10);
var _text_layer = __w_pdfjs_require__(17);
var _svg = __w_pdfjs_require__(18);
{
const {
isNodeJS
} = __w_pdfjs_require__(4);
if (isNodeJS) {
const PDFNodeStream = __w_pdfjs_require__(19).PDFNodeStream;
(0, _api.setPDFNetworkStreamFactory)(params => {
return new PDFNodeStream(params);
});
} else {
const PDFNetworkStream = __w_pdfjs_require__(22).PDFNetworkStream;
let PDFFetchStream;
if ((0, _display_utils.isFetchSupported)()) {
PDFFetchStream = __w_pdfjs_require__(23).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.DOMCanvasFactory = 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 DOMCanvasFactory {
create(width, height) {
if (width <= 0 || height <= 0) {
throw new Error("Invalid canvas size");
}
const canvas = document.createElement("canvas");
const context = canvas.getContext("2d");
canvas.width = width;
canvas.height = height;
return {
canvas,
context
};
}
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.DOMCanvasFactory = DOMCanvasFactory;
class DOMCMapReaderFactory {
constructor({
baseUrl = null,
isCompressed = false
}) {
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;
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
};
}).catch(reason => {
throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
});
}
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);
}).catch(reason => {
throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
});
}
}
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.getVerbosityLevel = getVerbosityLevel;
exports.info = info;
exports.isArrayBuffer = isArrayBuffer;
exports.isArrayEqual = isArrayEqual;
exports.isBool = isBool;
exports.isEmptyObj = isEmptyObj;
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"
};
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 stringToUTF8String(str) {
return decodeURIComponent(escape(str));
}
function utf8StringToString(str) {
return unescape(encodeURIComponent(str));
}
function isEmptyObj(obj) {
for (const key in obj) {
return false;
}
return true;
}
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 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__) {
var _is_node = __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;
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 _api_compatibility = __w_pdfjs_require__(7);
var _canvas = __w_pdfjs_require__(8);
var _worker_options = __w_pdfjs_require__(10);
var _is_node = __w_pdfjs_require__(4);
var _message_handler = __w_pdfjs_require__(11);
var _metadata = __w_pdfjs_require__(12);
var _transport_stream = __w_pdfjs_require__(14);
var _webgl = __w_pdfjs_require__(15);
const DEFAULT_RANGE_CHUNK_SIZE = 65536;
const RENDERING_CANCELLED_TIMEOUT = 100;
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 || _display_utils.DOMCMapReaderFactory;
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.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.5.207',
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 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();
}
getOpenActionDestination() {
(0, _display_utils.deprecated)("getOpenActionDestination, use getOpenAction instead.");
return this.getOpenAction().then(function (openAction) {
return openAction && openAction.dest ? openAction.dest : null;
});
}
getAttachments() {
return this._transport.getAttachments();
}
getJavaScript() {
return this._transport.getJavaScript();
}
getOutline() {
return this._transport.getOutline();
}
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;
}
}
exports.PDFDocumentProxy = PDFDocumentProxy;
class PDFPageProxy {
constructor(pageIndex, pageInfo, transport, pdfBug = false) {
this._pageIndex = pageIndex;
this._pageInfo = pageInfo;
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 = Object.create(null);
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
}) {
if (this._stats) {
this._stats.time("Overall");
}
const renderingIntent = intent === "print" ? "print" : "display";
this.pendingCleanup = false;
if (!this.intentStates[renderingIntent]) {
this.intentStates[renderingIntent] = Object.create(null);
}
const intentState = this.intentStates[renderingIntent];
if (intentState.streamReaderCancelTimeout) {
clearTimeout(intentState.streamReaderCancelTimeout);
intentState.streamReaderCancelTimeout = null;
}
const canvasFactoryInstance = canvasFactory || new _display_utils.DOMCanvasFactory();
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
});
}
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;
intentState.displayReadyCapability.promise.then(transparency => {
if (this.pendingCleanup) {
complete();
return;
}
if (this._stats) {
this._stats.time("Rendering");
}
internalRenderTask.initializeGraphics(transparency);
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";
if (!this.intentStates[renderingIntent]) {
this.intentStates[renderingIntent] = Object.create(null);
}
const intentState = this.intentStates[renderingIntent];
let opListTask;
if (!intentState.opListReadCapability) {
opListTask = {};
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 = [];
Object.keys(this.intentStates).forEach(intent => {
const intentState = this.intentStates[intent];
this._abortOperatorList({
intentState,
reason: new Error("Page was destroyed."),
force: true
});
if (intent === "oplist") {
return;
}
intentState.renderTasks.forEach(function (renderTask) {
const renderCompleted = renderTask.capability.promise.catch(function () {});
waitOn.push(renderCompleted);
renderTask.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 || Object.keys(this.intentStates).some(intent => {
const intentState = this.intentStates[intent];
return intentState.renderTasks.length !== 0 || !intentState.operatorList.lastChunk;
})) {
return false;
}
Object.keys(this.intentStates).forEach(intent => {
delete this.intentStates[intent];
});
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[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[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;
}
Object.keys(this.intentStates).some(intent => {
if (this.intentStates[intent] === intentState) {
delete this.intentStates[intent];
return true;
}
return false;
});
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)
});
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);
};
});
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);
};
});
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;
}
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 "FontType3Res":
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.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
});
}
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);
}
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;
}
initializeGraphics(transparency = false) {
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);
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.5.207';
exports.version = version;
const build = '0974d605';
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
}) {
if (this.constructor === BaseFontLoader) {
(0, _util.unreachable)("Cannot initialize BaseFontLoader.");
}
this.docId = docId;
this._onUnsupportedFeature = onUnsupportedFeature;
this.nativeFontFaces = [];
this.styleElement = null;
}
addNativeFontFace(nativeFontFace) {
this.nativeFontFaces.push(nativeFontFace);
document.fonts.add(nativeFontFace);
}
insertRule(rule) {
let styleElement = this.styleElement;
if (!styleElement) {
styleElement = this.styleElement = document.createElement("style");
styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`;
document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement);
}
const styleSheet = styleElement.sheet;
styleSheet.insertRule(rule, styleSheet.cssRules.length);
}
clear() {
this.nativeFontFaces.forEach(function (nativeFontFace) {
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 document !== "undefined" && !!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(docId) {
super(docId);
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 = 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 = 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 = document.createElement("span");
span.textContent = "Hi";
span.style.fontFamily = names[i];
div.appendChild(span);
}
document.body.appendChild(div);
isFontReady(loadTestFontId, function () {
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.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;
/***/ }),
/* 8 */
/***/ (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__(9);
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;
}
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) {
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.cachedCanvases = new CachedCanvases(this.canvasFactory);
if (canvasCtx) {
addContextCurrentTransform(canvasCtx);
}
this._cachedGetSinglePixelWidth = null;
}
function putBinaryImageData(ctx, imgData) {
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;
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;
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;
var 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) {
j = 0;
elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
for (i = 0; i < fullChunks; i++) {
dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
srcPos += elemsInThisChunk;
ctx.putImageData(chunkImgData, 0, j);
j += FULL_CHUNK_HEIGHT;
}
if (i < totalChunks) {
elemsInThisChunk = width * partialChunkHeight * 4;
dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
ctx.putImageData(chunkImgData, 0, j);
}
} else if (imgData.kind === _util.ImageKind.RGB_24BPP) {
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;
}
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;
}
}
},
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) {
width = this.getSinglePixelWidth();
}
if (height === 0) {
height = this.getSinglePixelWidth();
}
var xw = x + width;
var yh = y + height;
this.ctx.moveTo(x, y);
this.ctx.lineTo(xw, y);
this.ctx.lineTo(xw, yh);
this.ctx.lineTo(x, yh);
this.ctx.lineTo(x, y);
this.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 (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.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 (glyph.isInFont || font.missingFile) {
if (simpleFillText && !accent) {
ctx.fillText(character, scaledX, scaledY);
} else {
this.paintChar(character, scaledX, scaledY, patternTransform);
if (accent) {
scaledAccentX = scaledX + accent.offset.x / fontSizeScale;
scaledAccentY = scaledY - 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;
}
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) {
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) {
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() {
this.restore();
this.baseTransform = this.baseTransformStack.pop();
},
beginGroup: function CanvasGraphics_beginGroup(group) {
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) {
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) {
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: function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX, scaleY, positions) {
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, 0, 0, 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) {
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) {
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) {
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) {
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);
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) {
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);
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() {
this.ctx.fillRect(0, 0, 1, 1);
},
paintXObject: function CanvasGraphics_paintXObject() {
(0, _util.warn)("Unsupported 'paintXObject' command.");
},
markPoint: function CanvasGraphics_markPoint(tag) {},
markPointProps: function CanvasGraphics_markPointProps(tag, properties) {},
beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {},
beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) {},
endMarkedContent: function CanvasGraphics_endMarkedContent() {},
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]];
}
};
for (var op in _util.OPS) {
CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];
}
return CanvasGraphics;
}();
exports.CanvasGraphics = CanvasGraphics;
/***/ }),
/* 9 */
/***/ (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;
/***/ }),
/* 10 */
/***/ (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;
/***/ }),
/* 11 */
/***/ (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;
/***/ }),
/* 12 */
/***/ (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__(13);
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 += "" + (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() {
const obj = Object.create(null);
for (const [key, value] of this._metadataMap) {
obj[key] = value;
}
return obj;
}
has(name) {
return this._metadataMap.has(name);
}
}
exports.Metadata = Metadata;
/***/ }),
/* 13 */
/***/ (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;
/***/ }),
/* 14 */
/***/ (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);
}
}
/***/ }),
/* 15 */
/***/ (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;
}
};
}();
/***/ }),
/* 16 */
/***/ (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);
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;
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"];
this.container.className = "textWidgetAnnotation";
let element = null;
if (this.renderInteractiveForms) {
if (this.data.multiLine) {
element = document.createElement("textarea");
element.textContent = this.data.fieldValue;
} else {
element = document.createElement("input");
element.type = "text";
element.setAttribute("value", this.data.fieldValue);
}
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() {
this.container.className = "buttonWidgetAnnotation checkBox";
const element = document.createElement("input");
element.disabled = this.data.readOnly;
element.type = "checkbox";
element.name = this.data.fieldName;
if (this.data.fieldValue && this.data.fieldValue !== "Off") {
element.setAttribute("checked", true);
}
this.container.appendChild(element);
return this.container;
}
}
class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
constructor(parameters) {
super(parameters, parameters.renderInteractiveForms);
}
render() {
this.container.className = "buttonWidgetAnnotation radioButton";
const element = document.createElement("input");
element.disabled = this.data.readOnly;
element.type = "radio";
element.name = this.data.fieldName;
if (this.data.fieldValue === this.data.buttonValue) {
element.setAttribute("checked", true);
}
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 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.displayValue)) {
optionElement.setAttribute("selected", true);
}
selectElement.appendChild(optionElement);
}
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: parameters.renderInteractiveForms || false,
svgFactory: new _display_utils.DOMSVGFactory()
});
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;
/***/ }),
/* 17 */
/***/ (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._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 = 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;
/***/ }),
/* 18 */
/***/ (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$$0__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 = 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;
}
};
}
/***/ }),
/* 19 */
/***/ (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__(20);
const fs = require$$1__default['default'];
const http = require$$2__default['default'];
const https = require$$3__default['default'];
const url = require$$4__default['default'];
const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//;
function parseUrl(sourceUrl) {
const parsedUrl = url.parse(sourceUrl);
if (parsedUrl.protocol === "file:" || parsedUrl.host) {
return parsedUrl;
}
if (/^[a-z]:[/\\]/i.test(sourceUrl)) {
return url.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
}));
}
}
/***/ }),
/* 20 */
/***/ (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__(21);
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;
}
/***/ }),
/* 21 */
/***/ (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 "";
}
/***/ }),
/* 22 */
/***/ (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__(20);
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);
}
}
hasPendingRequests() {
for (const xhrId in this.pendingRequests) {
return true;
}
return false;
}
getRequestXhr(xhrId) {
return this.pendingRequests[xhrId].xhr;
}
isPendingRequest(xhrId) {
return xhrId in this.pendingRequests;
}
abortAllRequests() {
for (const xhrId in this.pendingRequests) {
this.abortRequest(xhrId | 0);
}
}
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();
}
}
/***/ }),
/* 23 */
/***/ (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__(20);
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();
});
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 pdfjs = /*@__PURE__*/getDefaultExportFromCjs(pdf);
var stringFunctions = createCommonjsModule(function (module, exports) {
const MIN_DIGIT_CHAR_CODE = 48;
const MAX_DIGIT_CHAR_CODE = 57;
const WHITESPACE_CHAR_CODE = 32;
const TAB_CHAR_CODE = 9;
const DOT_CHAR_CODE = 46;
exports.removeLeadingWhitespaces = function removeLeadingWhitespaces (string) {
while (string.charCodeAt(0) === WHITESPACE_CHAR_CODE) {
string = string.substring(1, string.length);
}
return string
};
exports.removeTrailingWhitespaces = function removeTrailingWhitespaces (string) {
while (string.charCodeAt(string.length - 1) === WHITESPACE_CHAR_CODE) {
string = string.substring(0, string.length - 1);
}
return string
};
exports.isDigit = function isDigit (charCode) {
return charCode >= MIN_DIGIT_CHAR_CODE && charCode <= MAX_DIGIT_CHAR_CODE
};
exports.isNumber = function isNumber (string) {
for (var i = 0; i < string.length; i++) {
const charCode = string.charCodeAt(i);
if (!exports.isDigit(charCode)) {
return false
}
}
return true
};
exports.hasOnly = function hasOnly (string, char) {
const charCode = char.charCodeAt(0);
for (var i = 0; i < string.length; i++) {
const aCharCode = string.charCodeAt(i);
if (aCharCode !== charCode) {
return false
}
}
return true
};
exports.hasUpperCaseCharacterInMiddleOfWord = function hasUpperCaseCharacterInMiddleOfWord (text) {
var beginningOfWord = true;
for (var i = 0; i < text.length; i++) {
const character = text.charAt(i);
if (character === ' ') {
beginningOfWord = true;
} else {
if (!beginningOfWord && isNaN(character * 1) && character === character.toUpperCase() && character.toUpperCase() !== character.toLowerCase()) {
return true
}
beginningOfWord = false;
}
}
return false
};
// Remove whitespace/dots + to uppercase
exports.normalizedCharCodeArray = function normalizedCharCodeArray (string) {
string = string.toUpperCase();
return exports.charCodeArray(string).filter(charCode => charCode !== WHITESPACE_CHAR_CODE && charCode !== TAB_CHAR_CODE && charCode !== DOT_CHAR_CODE)
};
exports.charCodeArray = function charCodeArray (string) {
const charCodes = [];
for (var i = 0; i < string.length; i++) {
charCodes.push(string.charCodeAt(i));
}
return charCodes
};
exports.prefixAfterWhitespace = function prefixAfterWhitespace (prefix, string) {
if (string.charCodeAt(0) === WHITESPACE_CHAR_CODE) {
string = exports.removeLeadingWhitespaces(string);
return ' ' + prefix + string
} else {
return prefix + string
}
};
exports.suffixBeforeWhitespace = function suffixBeforeWhitespace (string, suffix) {
if (string.charCodeAt(string.length - 1) === WHITESPACE_CHAR_CODE) {
string = exports.removeTrailingWhitespaces(string);
return string + suffix + ' '
} else {
return string + suffix
}
};
exports.isListItemCharacter = function isListItemCharacter (string) {
if (string.length > 1) {
return false
}
const char = string.charAt(0);
return char === '-' || char === '•' || char === '–'
};
exports.isListItem = function isListItem (string) {
return /^[\s]*[-•–][\s].*$/g.test(string)
};
exports.isNumberedListItem = function isNumberedListItem (string) {
return /^[\s]*[\d]*[.][\s].*$/g.test(string)
};
exports.wordMatch = function wordMatch (string1, string2) {
const words1 = new Set(string1.toUpperCase().split(' '));
const words2 = new Set(string2.toUpperCase().split(' '));
const intersection = new Set(
[...words1].filter(x => words2.has(x)));
return intersection.size / Math.max(words1.size, words2.size)
};
});
const { removeLeadingWhitespaces, removeTrailingWhitespaces, isNumber } = stringFunctions;
/**
* Returns an index number for start/end of search
*
* @param {number} numerator - arbitrary number to search
* @param {number} denominator - arbitrary number to search
* @param {number} length - length of textContent.items array
*
* @returns {number} A range of where to loop and search
*/
const searchRange = (numerator, denominator, length) => {
return Math.floor(numerator / denominator * length)
};
/**
* Mutates and returns an object that contains key pair value of pageIndex : pageNum
*
* @param {array} range
* @param {object} pageIndexNumMap object
* @param {number} pageIndex - index of the page
*
* @returns {object} pageIndexNumMap object
*/
const searchArea = (range, pageIndexNumMap, pageIndex) => {
for (const { str } of range) {
const trimLeadingWhitespaces = removeLeadingWhitespaces(str);
const trimWhitespaces = removeTrailingWhitespaces(trimLeadingWhitespaces);
if (isNumber(trimWhitespaces)) {
if (!pageIndexNumMap[pageIndex]) {
pageIndexNumMap[pageIndex] = [];
}
pageIndexNumMap[pageIndex].push(Number(trimWhitespaces));
}
}
return pageIndexNumMap
};
/**
* Searches both top and bottom area and returns an object
*
* @param {object} pageIndexNumMap object
* @param {number} pageIndex - index of the page
* @param {array} items - textContent.items
*
* @returns {object} pageIndexNumMap object
*/
var findPageNumbers = (pageIndexNumMap, pageIndex, items) => {
const topArea = searchRange(1, 6, items.length);
const bottomArea = searchRange(5, 6, items.length);
const topAreaResult = searchArea(items.slice(0, topArea), pageIndexNumMap, pageIndex);
return searchArea(items.slice(bottomArea), topAreaResult, pageIndex)
};
/**
* Checks when the page number first begins and returns it
*
* @param {object} pageIndexNumMap object
*
* @returns {object} For example { pageIndex: 10, pageNum: 3 }
*/
var findFirstPage = (pageIndexNumMap) => {
let counter = 0;
const keys = Object.keys(pageIndexNumMap);
if (keys.length === 0 || keys.length === 1) {
return
}
for (let x = 0; x < keys.length; x++) {
const firstPage = pageIndexNumMap[keys[x]];
const secondPage = pageIndexNumMap[keys[x + 1]];
const prevCounter = counter;
for (let y = 0; y < firstPage.length && counter < 2; y++) {
for (let z = 0; z < secondPage.length && counter < 2; z++) {
const pageDifference = keys[x + 1] - keys[x];
if (firstPage[y] + 1 === secondPage[z]) {
counter++;
} else if (pageDifference > 1 && firstPage[y] + pageDifference === secondPage[z]) {
counter++;
}
}
}
let pageDetails = (x > 0) ? Object.entries(pageIndexNumMap)[x - 1] : Object.entries(pageIndexNumMap)[x];
if (prevCounter === counter) {
counter = 0;
pageDetails = Object.entries(pageIndexNumMap)[x];
} else if (counter >= 2) {
return { pageIndex: Number(pageDetails[0]), pageNum: pageDetails[1][0] }
}
}
};
/**
* Return textContent with items that have pageNum removed
*
* @param {object} textContent object
* @param {number} pageNum
*
* @returns {object} filteredContent - textContent without items that have pageNum
*/
var removePageNumber = (textContent, pageNum) => {
const filteredContent = { items: [...textContent.items] };
const topArea = searchRange(1, 6, filteredContent.items.length);
const bottomArea = searchRange(5, 6, filteredContent.items.length);
filteredContent.items = filteredContent.items.filter((item, index) => {
const isAtTop = index > 0 && index < topArea;
const isAtBottom = index > bottomArea && index < filteredContent.items.length;
return (isAtTop || isAtBottom) ? Number(item.str) !== Number(pageNum) : item
});
return filteredContent
};
var pageNumberFunctions = {
findPageNumbers: findPageNumbers,
findFirstPage: findFirstPage,
removePageNumber: removePageNumber
};
// A abstract PageItem class, can be TextItem, LineItem or LineItemBlock
var PageItem_1 = class PageItem {
constructor (options) {
if (this.constructor === PageItem) {
throw new TypeError('Can not construct abstract class.')
}
this.type = options.type;
this.annotation = options.annotation;
this.parsedElements = options.parsedElements;
}
};
// A text item, i.e. a line or a word within a page
var TextItem_1 = class TextItem extends PageItem_1 {
constructor (options) {
super(options);
this.x = options.x;
this.y = options.y;
this.width = options.width;
this.height = options.height;
this.text = options.text;
this.font = options.font;
this.lineFormat = options.lineFormat;
this.unopenedFormat = options.unopenedFormat;
this.unclosedFormat = options.unclosedFormat;
}
};
// A page which holds PageItems displayable via PdfPageView
var Page_1 = class Page {
constructor (options) {
this.index = options.index;
this.items = options.items || []; // PageItem
}
};
const { findPageNumbers: findPageNumbers$1, findFirstPage: findFirstPage$1, removePageNumber: removePageNumber$1 } = pageNumberFunctions;
const NO_OP = () => {};
var parse = async function parse (pdfDocument, callbacks) {
const { metadataParsed, pageParsed, fontParsed, documentParsed } = {
metadataParsed: NO_OP,
pageParsed: NO_OP,
fontParsed: NO_OP,
documentParsed: NO_OP,
...(callbacks || {}),
};
const metadata = await pdfDocument.getMetadata();
metadataParsed(metadata);
const pages = [...Array(pdfDocument.numPages).keys()].map(
index => new Page_1({ index })
);
documentParsed(pdfDocument, pages);
const fonts = {
ids: new Set(),
map: new Map(),
};
let pageIndexNumMap = {};
let firstPage;
for (let j = 1; j <= pdfDocument.numPages; j++) {
const page = await pdfDocument.getPage(j);
const textContent = await page.getTextContent();
if (Object.keys(pageIndexNumMap).length < 10) {
pageIndexNumMap = findPageNumbers$1(pageIndexNumMap, page.pageIndex, textContent.items);
} else {
firstPage = findFirstPage$1(pageIndexNumMap);
break
}
}
let pageNum = 0; // firstPage.pageNum
for (let j = 1; j <= pdfDocument.numPages; j++) {
const page = await pdfDocument.getPage(j);
// Trigger the font retrieval for the page
await page.getOperatorList();
const scale = 1.0;
const viewport = page.getViewport({ scale });
let textContent = await page.getTextContent();
if (firstPage && page.pageIndex >= firstPage.pageIndex) {
textContent = removePageNumber$1(textContent, pageNum);
pageNum++;
}
const textItems = textContent.items.map(item => {
const tx = pdf.Util.transform(
viewport.transform,
item.transform
);
const fontHeight = Math.sqrt((tx[2] * tx[2]) + (tx[3] * tx[3]));
const dividedHeight = item.height / fontHeight;
return new TextItem_1({
x: Math.round(item.transform[4]),
y: Math.round(item.transform[5]),
width: Math.round(item.width),
height: Math.round(dividedHeight <= 1 ? item.height : dividedHeight),
text: item.str,
font: item.fontName,
})
});
pages[j - 1].items = textItems;
pageParsed(pages);
const fontIds = new Set(textItems.map(t => t.font));
for (const fontId of fontIds) {
if (!fonts.ids.has(fontId) && fontId.startsWith('g_d')) {
// Depending on which build of pdfjs-dist is used, the
// WorkerTransport containing the font objects is either transport or _transport
const transport = pdfDocument.transport || pdfDocument._transport; // eslint-disable-line no-underscore-dangle
const font = await new Promise(
resolve => transport.commonObjs.get(fontId, resolve)
);
fonts.ids.add(fontId);
fonts.map.set(fontId, font);
fontParsed(fonts);
}
}
}
return {
fonts,
metadata,
pages,
pdfDocument,
}
};
// @flow
/*::
import ParseResult from '../../ParseResult'
*/
// A transformation from an PdfPage to an PdfPage
var Transformation_1 = class Transformation {
constructor (name, itemType) {
if (this.constructor === Transformation) {
throw new TypeError('Can not construct abstract class.')
}
if (this.transform === Transformation.prototype.transform) {
throw new TypeError("Please implement abstract method 'transform()'.")
}
this.name = name;
this.itemType = itemType;
}
// Transform an incoming ParseResult into an outgoing ParseResult
transform (parseResult /*: ParseResult */) /*: ParseResult */ { // eslint-disable-line no-unused-vars
throw new TypeError('Do not call abstract method foo from child.')
}
// Sometimes the transform() does only visualize a change. This methods then does the actual change.
completeTransform (parseResult /*: ParseResult */) /*: ParseResult */ { // eslint-disable-line no-unused-vars
parseResult.messages = [];
return parseResult
}
};
// Annotation for a text item
class Annotation {
constructor (options) {
this.category = options.category;
this.color = options.color;
}
}
var _default = Annotation;
var ADDED_ANNOTATION = new Annotation({
category: 'Added',
color: 'green',
});
var REMOVED_ANNOTATION = new Annotation({
category: 'Removed',
color: 'red',
});
var UNCHANGED_ANNOTATION = new Annotation({
category: 'Unchanged',
color: 'brown',
});
var DETECTED_ANNOTATION = new Annotation({
category: 'Detected',
color: 'green',
});
var MODIFIED_ANNOTATION = new Annotation({
category: 'Modified',
color: 'green',
});
var Annotation_1 = {
default: _default,
ADDED_ANNOTATION: ADDED_ANNOTATION,
REMOVED_ANNOTATION: REMOVED_ANNOTATION,
UNCHANGED_ANNOTATION: UNCHANGED_ANNOTATION,
DETECTED_ANNOTATION: DETECTED_ANNOTATION,
MODIFIED_ANNOTATION: MODIFIED_ANNOTATION
};
// @flow
/*::
import ParseResult from '../ParseResult'
*/
const { REMOVED_ANNOTATION: REMOVED_ANNOTATION$1 } = Annotation_1;
// Abstract class for transformations producing TextItem(s) to be shown in the TextItemPageView
var ToTextItemTransformation_1 = class ToTextItemTransformation extends Transformation_1 {
constructor (name) {
super(name, TextItem_1.name);
if (this.constructor === ToTextItemTransformation) {
throw new TypeError('Can not construct abstract class.')
}
}
completeTransform (parseResult /*: ParseResult */) /*: ParseResult */ {
// The usual cleanup
parseResult.messages = [];
parseResult.pages.forEach(page => {
page.items = page.items.filter(item => !item.annotation || item.annotation !== REMOVED_ANNOTATION$1);
page.items.forEach(item => (item.annotation = null));
});
return parseResult
}
};
// The result of a PDF parse respectively a Transformation
var ParseResult_1 = class ParseResult {
constructor (options) {
this.pages = options.pages; // like Page[]
this.globals = options.globals; // properties accasable for all the following transformations in debug mode
this.messages = options.messages; // something to show only for the transformation in debug mode
}
};
var enumify = createCommonjsModule(function (module, exports) {
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.copyProperties = copyProperties;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var INITIALIZED = Symbol();
/**
* This is an abstract class that is not intended to be
* used directly. Extend it to turn your class into an enum
* (initialization is performed via `MyClass.initEnum()`).
*/
var Enum = exports.Enum = function () {
/**
* `initEnum()` closes the class. Then calling this constructor
* throws an exception.
*
* If your subclass has a constructor then you can control
* what properties are added to `this` via the argument you
* pass to `super()`. No arguments are fine, too.
*/
function Enum() {
var instanceProperties = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];
_classCallCheck(this, Enum);
// new.target would be better than this.constructor,
// but isn’t supported by Babel
if ({}.hasOwnProperty.call(this.constructor, INITIALIZED)) {
throw new Error('Enum classes can’t be instantiated');
}
if ((typeof instanceProperties === 'undefined' ? 'undefined' : _typeof(instanceProperties)) === 'object' && instanceProperties !== null) {
copyProperties(this, instanceProperties);
}
}
/**
* Set up the enum, close the class.
*
* @param arg Either an object whose properties provide the names
* and values (which must be mutable objects) of the enum constants.
* Or an Array whose elements are used as the names of the enum constants
* The values are create by instantiating the current class.
*/
_createClass(Enum, [{
key: 'toString',
/**
* Default `toString()` method for enum constant.
*/
value: function toString() {
return this.constructor.name + '.' + this.name;
}
}], [{
key: 'initEnum',
value: function initEnum(arg) {
Object.defineProperty(this, 'enumValues', {
value: [],
configurable: false,
writable: false,
enumerable: true
});
if (Array.isArray(arg)) {
this._enumValuesFromArray(arg);
} else {
this._enumValuesFromObject(arg);
}
Object.freeze(this.enumValues);
this[INITIALIZED] = true;
return this;
}
}, {
key: '_enumValuesFromArray',
value: function _enumValuesFromArray(arr) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = arr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var key = _step.value;
this._pushEnumValue(new this(), key);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
}, {
key: '_enumValuesFromObject',
value: function _enumValuesFromObject(obj) {
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = Object.keys(obj)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var key = _step2.value;
var value = new this(obj[key]);
this._pushEnumValue(value, key);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
}, {
key: '_pushEnumValue',
value: function _pushEnumValue(enumValue, name) {
enumValue.name = name;
enumValue.ordinal = this.enumValues.length;
Object.defineProperty(this, name, {
value: enumValue,
configurable: false,
writable: false,
enumerable: true
});
this.enumValues.push(enumValue);
}
/**
* Given the name of an enum constant, return its value.
*/
}, {
key: 'enumValueOf',
value: function enumValueOf(name) {
return this.enumValues.find(function (x) {
return x.name === name;
});
}
/**
* Make enum classes iterable
*/
}, {
key: Symbol.iterator,
value: function value() {
return this.enumValues[Symbol.iterator]();
}
}]);
return Enum;
}();
function copyProperties(target, source) {
// Ideally, we’d use Reflect.ownKeys() here,
// but I don’t want to depend on a polyfill
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = Object.getOwnPropertyNames(source)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var key = _step3.value;
var desc = Object.getOwnPropertyDescriptor(source, key);
Object.defineProperty(target, key, desc);
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
return target;
}
});
const { Enum } = enumify;
// The format of a word element
class WordFormat extends Enum {
}
var WordFormat_1 = WordFormat;
WordFormat.initEnum({
BOLD: {
startSymbol: '**',
endSymbol: '**',
},
OBLIQUE: {
startSymbol: '_',
endSymbol: '_',
},
BOLD_OBLIQUE: {
startSymbol: '**_',
endSymbol: '_**',
},
});
// @flow
var CalculateGlobalStats_1 = class CalculateGlobalStats extends ToTextItemTransformation_1 {
constructor (fontMap) {
super('$1');
this.fontMap = fontMap;
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
// Parse heights
const heightToOccurrence = {};
const fontToOccurrence = {};
var maxHeight = 0;
var maxHeightFont;
parseResult.pages.forEach(page => {
page.items.forEach(item => {
heightToOccurrence[item.height] = heightToOccurrence[item.height] ? heightToOccurrence[item.height] + 1 : 1;
fontToOccurrence[item.font] = fontToOccurrence[item.font] ? fontToOccurrence[item.font] + 1 : 1;
if (item.height > maxHeight) {
maxHeight = item.height;
maxHeightFont = item.font;
}
});
});
const mostUsedHeight = parseInt(getMostUsedKey(heightToOccurrence));
const mostUsedFont = getMostUsedKey(fontToOccurrence);
// Parse line distances
const distanceToOccurrence = {};
parseResult.pages.forEach(page => {
var lastItemOfMostUsedHeight;
page.items.forEach(item => {
if (item.height === mostUsedHeight && item.text.trim().length > 0) {
if (lastItemOfMostUsedHeight && item.y !== lastItemOfMostUsedHeight.y) {
const distance = lastItemOfMostUsedHeight.y - item.y;
if (distance > 0) {
distanceToOccurrence[distance] = distanceToOccurrence[distance] ? distanceToOccurrence[distance] + 1 : 1;
}
}
lastItemOfMostUsedHeight = item;
} else {
lastItemOfMostUsedHeight = null;
}
});
});
const mostUsedDistance = parseInt(getMostUsedKey(distanceToOccurrence));
const fontIdToName = [];
const fontToFormats = new Map();
this.fontMap.forEach(function (value, key) {
fontIdToName.push(key + ' = ' + value.name);
const fontName = value.name.toLowerCase();
var format;
if (key === mostUsedFont) {
format = null;
} else if (fontName.includes('bold') && (fontName.includes('oblique') || fontName.includes('italic'))) {
format = WordFormat_1.BOLD_OBLIQUE;
} else if (fontName.includes('bold')) {
format = WordFormat_1.BOLD;
} else if (fontName.includes('oblique') || fontName.includes('italic')) {
format = WordFormat_1.OBLIQUE;
} else if (fontName === maxHeightFont) {
format = WordFormat_1.BOLD;
}
if (format) {
fontToFormats.set(key, format.name);
}
});
fontIdToName.sort();
// Make a copy of the originals so all following transformation don't modify them
const newPages = parseResult.pages.map(page => {
return {
...page,
items: page.items.map(textItem => ({ ...textItem })),
}
});
return new ParseResult_1({
...parseResult,
pages: newPages,
globals: {
mostUsedHeight,
mostUsedFont,
mostUsedDistance,
maxHeight,
maxHeightFont,
fontToFormats,
},
messages: [
'Items per height: ' + JSON.stringify(heightToOccurrence),
'Items per font: ' + JSON.stringify(fontToOccurrence),
'Items per distance: ' + JSON.stringify(distanceToOccurrence),
'Fonts:' + JSON.stringify(fontIdToName),
],
})
}
};
function getMostUsedKey (keyToOccurrence) {
var maxOccurence = 0;
var maxKey;
Object.keys(keyToOccurrence).map((element) => {
if (!maxKey || keyToOccurrence[element] > maxOccurence) {
maxOccurence = keyToOccurrence[element];
maxKey = element;
}
});
return maxKey
}
var Word_1 = class Word {
constructor (options) {
this.string = options.string;
this.type = options.type; // WordType
this.format = options.format; // WordFormat
}
};
// A line within a page
var LineItem_1 = class LineItem extends PageItem_1 {
constructor (options) {
super(options);
this.x = options.x;
this.y = options.y;
this.width = options.width;
this.height = options.height;
this.words = options.words || [];
if (options.text && !options.words) {
this.words = options.text.split(' ')
.filter(string => string.trim().length > 0)
.map(wordAsString => new Word_1({
string: wordAsString,
}));
}
}
text () {
return this.wordStrings().join(' ')
}
wordStrings () {
return this.words.map(word => word.string)
}
};
// @flow
/*::
import ParseResult from '../ParseResult'
*/
const { REMOVED_ANNOTATION: REMOVED_ANNOTATION$2 } = Annotation_1;
// Abstract class for transformations producing LineItem(s) to be shown in the LineItemPageView
var ToLineItemTransformation_1 = class ToLineItemTransformation extends Transformation_1 {
constructor (name) {
super(name, LineItem_1.name);
if (this.constructor === ToLineItemTransformation) {
throw new TypeError('Can not construct abstract class.')
}
}
completeTransform (parseResult /*: ParseResult */) /*: ParseResult */ {
// The usual cleanup
parseResult.messages = [];
parseResult.pages.forEach(page => {
page.items = page.items.filter(item => !item.annotation || item.annotation !== REMOVED_ANNOTATION$2);
page.items.forEach(item => (item.annotation = null));
});
return parseResult
}
};
// @flow
/*::
import PageItem from '../models/PageItem'
import LineItemBlock from '../models/LineItemBlock'
*/
var minXFromBlocks = function minXFromBlocks (blocks /*: LineItemBlock[] */) /*: number */ {
var minX = 999;
blocks.forEach(block => {
block.items.forEach(item => {
minX = Math.min(minX, item.x);
});
});
if (minX === 999) {
return null
}
return minX
};
var minXFromPageItems = function minXFromPageItems (items /*: PageItem */) /*: number */ {
var minX = 999;
items.forEach(item => {
minX = Math.min(minX, item.x);
});
if (minX === 999) {
return null
}
return minX
};
var sortByX = function sortByX (items /*: PageItem */) {
items.sort((a, b) => a.x - b.x);
};
var pageItemFunctions = {
minXFromBlocks: minXFromBlocks,
minXFromPageItems: minXFromPageItems,
sortByX: sortByX
};
// @flow
/*::
import TextItem from './TextItem'
*/
const { sortByX: sortByX$1 } = pageItemFunctions;
// Groups all text items which are on the same y line
var TextItemLineGrouper_1 = class TextItemLineGrouper {
constructor (options) {
this.mostUsedDistance = options.mostUsedDistance || 12;
}
// returns a CombineResult
group (textItems /*: TextItem[] */) /*: TextItem[][] */ {
const lines = [];
var currentLine = [];
textItems.forEach(item => {
if (currentLine.length > 0 && Math.abs(currentLine[0].y - item.y) >= this.mostUsedDistance / 2) {
lines.push(currentLine);
currentLine = [];
}
currentLine.push(item);
});
lines.push(currentLine);
lines.forEach(textItems => {
// we can't trust order of occurence, esp. footnoteLinks like to come last
sortByX$1(textItems);
});
return lines
}
};
const { Enum: Enum$1 } = enumify;
// An Markdown word element
class WordType extends Enum$1 {
}
var WordType_1 = WordType;
WordType.initEnum({
LINK: {
toText (string) {
return `[${string}](${string})`
},
},
FOOTNOTE_LINK: {
attachWithoutWhitespace: true,
plainTextFormat: true,
toText (string) {
return `^${string}`
// return `[${string}](#${string})`
},
},
FOOTNOTE: {
toText (string) {
return `(^${string})`
},
},
});
// Abstract stream which allows stash items temporarily
var StashingStream_1 = class StashingStream {
constructor () {
if (this.constructor === StashingStream) {
throw new TypeError('Can not construct abstract class.')
}
this.results = [];
this.stash = [];
}
consumeAll (items) {
items.forEach(item => this.consume(item));
}
consume (item) {
if (this.shouldStash(item)) {
if (!this.matchesStash(item)) {
this.flushStash();
}
this.pushOnStash(item);
} else {
if (this.stash.length > 0) {
this.flushStash();
}
this.results.push(item);
}
}
pushOnStash (item) {
this.onPushOnStash(item);
this.stash.push(item);
}
complete () {
if (this.stash.length > 0) {
this.flushStash();
}
return this.results
}
// return true if the item matches the items of the stack
matchesStash (item) {
if (this.stash.length === 0) {
return true
}
const lastItem = this.stash[this.stash.length - 1];
return this.doMatchesStash(lastItem, item)
}
flushStash () {
if (this.stash.length > 0) {
this.doFlushStash(this.stash, this.results);
this.stash = [];
}
}
onPushOnStash (item) { // eslint-disable-line no-unused-vars
// sub-classes may override
}
shouldStash (item) {
throw new TypeError(' Do not call abstract method foo from child.' + item)
}
doMatchesStash (lastItem, item) {
throw new TypeError(' Do not call abstract method foo from child.' + lastItem + item)
}
doFlushStash (stash, results) {
throw new TypeError(' Do not call abstract method foo from child.' + stash + results)
}
};
var ParsedElements_1 = class ParsedElements {
constructor (options) {
this.footnoteLinks = options.footnoteLinks || [];
this.footnotes = options.footnotes || [];
this.containLinks = options.containLinks;
this.formattedWords = options.formattedWords;
}
add (parsedElements) {
this.footnoteLinks = this.footnoteLinks.concat(parsedElements.footnoteLinks);
this.footnotes = this.footnotes.concat(parsedElements.footnotes);
this.containLinks = this.containLinks || parsedElements.containLinks;
this.formattedWords += parsedElements.formattedWords;
}
};
const { isNumber: isNumber$1, isListItemCharacter } = stringFunctions;
const { sortByX: sortByX$2 } = pageItemFunctions;
// Converts text items which have been grouped to a line (through TextItemLineGrouper) to a single LineItem doing inline transformations like
// 'whitespace removal', bold/emphasis annotation, link-detection, etc..
var LineConverter_1 = class LineConverter {
constructor (fontToFormats) {
this.fontToFormats = fontToFormats;
}
// returns a CombineResult
compact (textItems /*: TextItem[] */) /*: LineItem */ {
// we can't trust order of occurence, esp. footnoteLinks like to come last
sortByX$2(textItems);
const wordStream = new WordDetectionStream(this.fontToFormats);
wordStream.consumeAll(textItems.map(item => new TextItem_1({ ...item })));
const words = wordStream.complete();
var maxHeight = 0;
var widthSum = 0;
textItems.forEach(item => {
maxHeight = Math.max(maxHeight, item.height);
widthSum += item.width;
});
return new LineItem_1({
x: textItems[0].x,
y: textItems[0].y,
height: maxHeight,
width: widthSum,
words: words,
parsedElements: new ParsedElements_1({
footnoteLinks: wordStream.footnoteLinks,
footnotes: wordStream.footnotes,
containLinks: wordStream.containLinks,
formattedWords: wordStream.formattedWords,
}),
})
}
};
class WordDetectionStream extends StashingStream_1 {
constructor (fontToFormats) {
super();
this.fontToFormats = fontToFormats;
this.footnoteLinks = [];
this.footnotes = [];
this.formattedWords = 0;
this.containLinks = false;
this.stashedNumber = false;
}
shouldStash (item) { // eslint-disable-line no-unused-vars
if (!this.firstY) {
this.firstY = item.y;
}
this.currentItem = item;
return true
}
onPushOnStash (item) { // eslint-disable-line no-unused-vars
this.stashedNumber = isNumber$1(item.text.trim());
}
doMatchesStash (lastItem, item) {
const lastItemFormat = this.fontToFormats.get(lastItem.font);
const itemFormat = this.fontToFormats.get(item.font);
if (lastItemFormat !== itemFormat) {
return false
}
const itemIsANumber = isNumber$1(item.text.trim());
return this.stashedNumber === itemIsANumber
}
doFlushStash (stash, results) {
if (this.stashedNumber) {
const joinedNumber = stash.map(item => item.text)
.join('')
.trim();
if (stash[0].y > this.firstY) { // footnote link
results.push(new Word_1({
string: `${joinedNumber}`,
type: WordType_1.FOOTNOTE_LINK,
}));
this.footnoteLinks.push(parseInt(joinedNumber));
} else if (this.currentItem && this.currentItem.y < stash[0].y) { // footnote
results.push(new Word_1({
string: `${joinedNumber}`,
type: WordType_1.FOOTNOTE,
}));
this.footnotes.push(joinedNumber);
} else {
this.copyStashItemsAsText(stash, results);
}
} else {
this.copyStashItemsAsText(stash, results);
}
}
copyStashItemsAsText (stash, results) {
const format = this.fontToFormats.get(stash[0].font);
results.push(...this.itemsToWords(stash, format));
}
itemsToWords (items, formatName) {
const combinedText = combineText(items);
const words = combinedText.split(' ');
const format = formatName ? WordFormat_1.enumValueOf(formatName) : null;
return words.filter(w => w.trim().length > 0).map(word => {
var type = null;
if (word.startsWith('http:')) {
this.containLinks = true;
type = WordType_1.LINK;
} else if (word.startsWith('www.')) {
this.containLinks = true;
word = `http://${word}`;
type = WordType_1.LINK;
}
if (format) {
this.formattedWords++;
}
return new Word_1({ string: word, type, format })
})
}
}
function combineText (textItems) {
var text = '';
var lastItem;
textItems.forEach(textItem => {
var textToAdd = textItem.text;
if (!text.endsWith(' ') && !textToAdd.startsWith(' ')) {
if (lastItem) {
const xDistance = textItem.x - lastItem.x - lastItem.width;
if (xDistance > 5) {
text += ' ';
}
} else {
if (isListItemCharacter(textItem.text)) {
textToAdd += ' ';
}
}
}
text += textToAdd;
lastItem = textItem;
});
return text
}
// @flow
/*::
import LineItemBlock from '../LineItemBlock'
*/
const { Enum: Enum$2 } = enumify;
function firstFormat (lineItem) {
if (lineItem.words.length === 0) {
return null
}
return lineItem.words[0].format
}
function isPunctationCharacter (string) {
if (string.length !== 1) {
return false
}
return string[0] === '.' || string[0] === '!' || string[0] === '?'
}
function linesToText (lineItems, disableInlineFormats) {
var text = '';
var openFormat;
const closeFormat = () => {
text += openFormat.endSymbol;
openFormat = null;
};
lineItems.forEach((line, lineIndex) => {
line.words.forEach((word, i) => {
const wordType = word.type;
const wordFormat = word.format;
if (openFormat && (!wordFormat || wordFormat !== openFormat)) {
closeFormat();
}
if (i > 0 && !(wordType && wordType.attachWithoutWhitespace) && !isPunctationCharacter(word.string)) {
text += ' ';
}
if (wordFormat && !openFormat && (!disableInlineFormats)) {
openFormat = wordFormat;
text += openFormat.startSymbol;
}
if (wordType && (!disableInlineFormats || wordType.plainTextFormat)) {
text += wordType.toText(word.string);
} else {
text += word.string;
}
});
if (openFormat && (lineIndex === lineItems.length - 1 || firstFormat(lineItems[lineIndex + 1]) !== openFormat)) {
closeFormat();
}
text += '\n';
});
return text
}
// An Markdown block
class BlockType extends Enum$2 {
}
var BlockType_1 = BlockType;
BlockType.initEnum({
H1: {
headline: true,
headlineLevel: 1,
toText (block /*: LineItemBlock */) /*: string */ {
return '# ' + linesToText(block.items, true)
},
},
H2: {
headline: true,
headlineLevel: 2,
toText (block /*: LineItemBlock */) /*: string */ {
return '## ' + linesToText(block.items, true)
},
},
H3: {
headline: true,
headlineLevel: 3,
toText (block /*: LineItemBlock */) /*: string */ {
return '### ' + linesToText(block.items, true)
},
},
H4: {
headline: true,
headlineLevel: 4,
toText (block /*: LineItemBlock */) /*: string */ {
return '#### ' + linesToText(block.items, true)
},
},
H5: {
headline: true,
headlineLevel: 5,
toText (block /*: LineItemBlock */) /*: string */ {
return '##### ' + linesToText(block.items, true)
},
},
H6: {
headline: true,
headlineLevel: 6,
toText (block /*: LineItemBlock */) /*: string */ {
return '###### ' + linesToText(block.items, true)
},
},
TOC: {
mergeToBlock: true,
toText (block /*: LineItemBlock */) /*: string */ {
return linesToText(block.items, true)
},
},
FOOTNOTES: {
mergeToBlock: true,
mergeFollowingNonTypedItems: true,
toText (block /*: LineItemBlock */) /*: string */ {
return linesToText(block.items, false)
},
},
CODE: {
mergeToBlock: true,
toText (block /*: LineItemBlock */) /*: string */ {
return '```\n' + linesToText(block.items, true) + '```'
},
},
LIST: {
mergeToBlock: false,
mergeFollowingNonTypedItemsWithSmallDistance: true,
toText (block /*: LineItemBlock */) /*: string */ {
return linesToText(block.items, false)
},
},
PARAGRAPH: {
toText (block /*: LineItemBlock */) /*: string */ {
return linesToText(block.items, false)
},
},
});
var isHeadline = function isHeadline (type /*: BlockType */) /*: boolean */ {
return type && type.name.length === 2 && type.name[0] === 'H'
};
var blockToText = function blockToText (block /*: LineItemBlock */) /*: string */ {
if (!block.type) {
return linesToText(block.items, false)
}
return block.type.toText(block)
};
var headlineByLevel = function headlineByLevel (level) {
if (level === 1) {
return BlockType.H1
} else if (level === 2) {
return BlockType.H2
} else if (level === 3) {
return BlockType.H3
} else if (level === 4) {
return BlockType.H4
} else if (level === 5) {
return BlockType.H5
} else if (level === 6) {
return BlockType.H6
} else {
// if level is >= 6, just use BlockType H6
// eslint-disable-next-line no-console
console.warn('Unsupported headline level: ' + level + ' (supported are 1-6), defaulting to level 6');
return BlockType.H6
}
};
BlockType_1.isHeadline = isHeadline;
BlockType_1.blockToText = blockToText;
BlockType_1.headlineByLevel = headlineByLevel;
// @flow
const { REMOVED_ANNOTATION: REMOVED_ANNOTATION$3, ADDED_ANNOTATION: ADDED_ANNOTATION$1 } = Annotation_1;
// gathers text items on the same y line to one line item
var CompactLines_1 = class CompactLines extends ToLineItemTransformation_1 {
constructor () {
super('Compact To Lines');
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
const { mostUsedDistance, fontToFormats } = parseResult.globals;
const foundFootnotes = [];
const foundFootnoteLinks = [];
var linkCount = 0;
var formattedWords = 0;
const lineGrouper = new TextItemLineGrouper_1({
mostUsedDistance: mostUsedDistance,
});
const lineCompactor = new LineConverter_1(fontToFormats);
parseResult.pages.forEach(page => {
if (page.items.length > 0) {
const lineItems = [];
const textItemsGroupedByLine = lineGrouper.group(page.items);
textItemsGroupedByLine.forEach(lineTextItems => {
const lineItem = lineCompactor.compact(lineTextItems);
if (lineTextItems.length > 1) {
lineItem.annotation = ADDED_ANNOTATION$1;
lineTextItems.forEach(item => {
item.annotation = REMOVED_ANNOTATION$3;
lineItems.push(new LineItem_1({
...item,
}));
});
}
if (lineItem.words.length === 0) {
lineItem.annotation = REMOVED_ANNOTATION$3;
}
lineItems.push(lineItem);
if (lineItem.parsedElements.formattedWords) {
formattedWords += lineItem.parsedElements.formattedWords;
}
if (lineItem.parsedElements.containLinks > 0) {
linkCount++;
}
if (lineItem.parsedElements.footnoteLinks.length > 0) {
const footnoteLinks = lineItem.parsedElements.footnoteLinks.map(footnoteLink => ({ footnoteLink, page: page.index + 1 }));
foundFootnoteLinks.push.apply(foundFootnoteLinks, footnoteLinks);
}
if (lineItem.parsedElements.footnotes.length > 0) {
lineItem.type = BlockType_1.FOOTNOTES;
const footnotes = lineItem.parsedElements.footnotes.map(footnote => ({ footnote, page: page.index + 1 }));
foundFootnotes.push.apply(foundFootnotes, footnotes);
}
});
page.items = lineItems;
}
});
return new ParseResult_1({
...parseResult,
messages: [
'Detected ' + formattedWords + ' formatted words',
'Found ' + linkCount + ' links',
'Detected ' + foundFootnoteLinks.length + ' footnotes links',
'Detected ' + foundFootnotes.length + ' footnotes',
],
})
}
};
// @flow
const { REMOVED_ANNOTATION: REMOVED_ANNOTATION$4 } = Annotation_1;
const { isDigit } = stringFunctions;
function hashCodeIgnoringSpacesAndNumbers (string) {
var hash = 0;
if (string.trim().length === 0) return hash
for (var i = 0; i < string.length; i++) {
const charCode = string.charCodeAt(i);
if (!isDigit(charCode) && charCode !== 32 && charCode !== 160) {
hash = ((hash << 5) - hash) + charCode;
hash |= 0; // Convert to 32bit integer
}
}
return hash
}
// Remove elements with similar content on same page positions, like page numbers, licenes information, etc...
var RemoveRepetitiveElements_1 = class RemoveRepetitiveElements extends ToLineItemTransformation_1 {
constructor () {
super('Remove Repetitive Elements');
}
// The idea is the following:
// - For each page, collect all items of the first, and all items of the last line
// - Calculate how often these items occur accros all pages (hash ignoring numbers, whitespace, upper/lowercase)
// - Delete items occuring on more then 2/3 of all pages
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
// find first and last lines per page
const pageStore = [];
const minLineHashRepetitions = {};
const maxLineHashRepetitions = {};
parseResult.pages.forEach(page => {
const minMaxItems = page.items.reduce((itemStore, item) => {
if (item.y < itemStore.minY) {
itemStore.minElements = [item];
itemStore.minY = item.y;
} else if (item.y === itemStore.minY) {
itemStore.minElements.push(item);
}
if (item.y > itemStore.maxY) {
itemStore.maxElements = [item];
itemStore.maxY = item.y;
} else if (item.y === itemStore.maxY) {
itemStore.maxElements.push(item);
}
return itemStore
}, {
minY: 999,
maxY: 0,
minElements: [],
maxElements: [],
});
const minLineHash = hashCodeIgnoringSpacesAndNumbers(minMaxItems.minElements.reduce((combinedString, item) => combinedString + item.text().toUpperCase(), ''));
const maxLineHash = hashCodeIgnoringSpacesAndNumbers(minMaxItems.maxElements.reduce((combinedString, item) => combinedString + item.text().toUpperCase(), ''));
pageStore.push({
minElements: minMaxItems.minElements,
maxElements: minMaxItems.maxElements,
minLineHash: minLineHash,
maxLineHash: maxLineHash,
});
minLineHashRepetitions[minLineHash] = minLineHashRepetitions[minLineHash] ? minLineHashRepetitions[minLineHash] + 1 : 1;
maxLineHashRepetitions[maxLineHash] = maxLineHashRepetitions[maxLineHash] ? maxLineHashRepetitions[maxLineHash] + 1 : 1;
});
// now annoate all removed items
var removedHeader = 0;
var removedFooter = 0;
parseResult.pages.forEach((page, i) => {
if (minLineHashRepetitions[pageStore[i].minLineHash] >= Math.max(3, parseResult.pages.length * 2 / 3)) {
pageStore[i].minElements.forEach(item => {
item.annotation = REMOVED_ANNOTATION$4;
});
removedFooter++;
}
if (maxLineHashRepetitions[pageStore[i].maxLineHash] >= Math.max(3, parseResult.pages.length * 2 / 3)) {
pageStore[i].maxElements.forEach(item => {
item.annotation = REMOVED_ANNOTATION$4;
});
removedHeader++;
}
});
return new ParseResult_1({
...parseResult,
messages: [
'Removed Header: ' + removedHeader,
'Removed Footers: ' + removedFooter,
],
})
}
};
// @flow
const { REMOVED_ANNOTATION: REMOVED_ANNOTATION$5, ADDED_ANNOTATION: ADDED_ANNOTATION$2 } = Annotation_1;
// Converts vertical text to horizontal
var VerticalToHorizontal_1 = class VerticalToHorizontal extends ToLineItemTransformation_1 {
constructor () {
super('Vertical to Horizontal Text');
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
var foundVerticals = 0;
parseResult.pages.forEach(page => {
const stream = new VerticalsStream();
stream.consumeAll(page.items);
page.items = stream.complete();
foundVerticals += stream.foundVerticals;
});
return new ParseResult_1({
...parseResult,
messages: ['Converted ' + foundVerticals + ' verticals'],
})
}
};
class VerticalsStream extends StashingStream_1 {
constructor () {
super();
this.foundVerticals = 0;
}
shouldStash (item) {
return item.words.length === 1 && item.words[0].string.length === 1
}
doMatchesStash (lastItem, item) {
return lastItem.y - item.y > 5 && lastItem.words[0].type === item.words[0].type
}
doFlushStash (stash, results) {
if (stash.length > 5) { // unite
var combinedWords = [];
var minX = 999;
var maxY = 0;
var sumWidth = 0;
var maxHeight = 0;
stash.forEach(oneCharacterLine => {
oneCharacterLine.annotation = REMOVED_ANNOTATION$5;
results.push(oneCharacterLine);
combinedWords.push(oneCharacterLine.words[0]);
minX = Math.min(minX, oneCharacterLine.x);
maxY = Math.max(maxY, oneCharacterLine.y);
sumWidth += oneCharacterLine.width;
maxHeight = Math.max(maxHeight, oneCharacterLine.height);
});
results.push(new LineItem_1({
...stash[0],
x: minX,
y: maxY,
width: sumWidth,
height: maxHeight,
words: combinedWords,
annotation: ADDED_ANNOTATION$2,
}));
this.foundVerticals++;
} else { // add as singles
results.push(...stash);
}
}
}
const { normalizedCharCodeArray } = stringFunctions;
var HeadlineFinder_1 = class HeadlineFinder {
constructor (options) {
this.headlineCharCodes = normalizedCharCodeArray(options.headline);
this.stackedLineItems = [];
this.stackedChars = 0;
}
consume (lineItem) {
// TODO avoid join
const normalizedCharCodes = normalizedCharCodeArray(lineItem.text());
const matchAll = this.matchAll(normalizedCharCodes);
if (matchAll) {
this.stackedLineItems.push(lineItem);
this.stackedChars += normalizedCharCodes.length;
if (this.stackedChars === this.headlineCharCodes.length) {
return this.stackedLineItems
}
} else {
if (this.stackedChars > 0) {
this.stackedChars = 0;
this.stackedLineItems = [];
this.consume(lineItem); // test again without stack
}
}
return null
}
matchAll (normalizedCharCodes) {
for (var i = 0; i < normalizedCharCodes.length; i++) {
const headlineChar = this.headlineCharCodes[this.stackedChars + i];
const textItemChar = normalizedCharCodes[i];
if (textItemChar !== headlineChar) {
return false
}
}
return true
}
};
// @flow
const { REMOVED_ANNOTATION: REMOVED_ANNOTATION$6, ADDED_ANNOTATION: ADDED_ANNOTATION$3 } = Annotation_1;
const { headlineByLevel: headlineByLevel$1 } = BlockType_1;
const { isDigit: isDigit$1, isNumber: isNumber$2, wordMatch, hasOnly } = stringFunctions;
// Detect table of contents pages plus linked headlines
var DetectTOC_1 = class DetectTOC extends ToLineItemTransformation_1 {
constructor () {
super('Detect TOC');
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
const tocPages = [];
const maxPagesToEvaluate = Math.min(20, parseResult.pages.length);
const linkLeveler = new LinkLeveler();
var tocLinks = [];
var lastTocPage;
var headlineItem;
parseResult.pages.slice(0, maxPagesToEvaluate).forEach(page => {
var lineItemsWithDigits = 0;
const unknownLines = new Set();
const pageTocLinks = [];
var lastWordsWithoutNumber;
var lastLine;
// find lines with words containing only "." ...
const tocLines = page.items.filter(line => line.words.includes(word => hasOnly(word.string, '.')));
// ... and ending with a number per page
tocLines.forEach(line => {
var words = line.words.filter(word => !hasOnly(word.string, '.'));
const digits = [];
while (words.length > 0 && isNumber$2(words[words.length - 1].string)) {
const lastWord = words.pop();
digits.unshift(lastWord.string);
}
if (digits.length === 0 && words.length > 0) {
const lastWord = words[words.length - 1];
while (isDigit$1(lastWord.string.charCodeAt(lastWord.string.length - 1))) {
digits.unshift(lastWord.string.charAt(lastWord.string.length - 1));
lastWord.string = lastWord.string.substring(0, lastWord.string.length - 1);
}
}
var endsWithDigit = digits.length > 0;
if (endsWithDigit) {
endsWithDigit = true;
if (lastWordsWithoutNumber) { // 2-line item ?
words.push(...lastWordsWithoutNumber);
lastWordsWithoutNumber = null;
}
pageTocLinks.push(new TocLink({
pageNumber: parseInt(digits.join('')),
lineItem: new LineItem_1({ ...line, words }),
}));
lineItemsWithDigits++;
} else {
if (!headlineItem) {
headlineItem = line;
} else {
if (lastWordsWithoutNumber) {
unknownLines.add(lastLine);
}
lastWordsWithoutNumber = words;
lastLine = line;
}
}
});
// page has been processed
if (lineItemsWithDigits * 100 / page.items.length > 75) {
tocPages.push(page.index + 1);
lastTocPage = page;
linkLeveler.levelPageItems(pageTocLinks);
tocLinks.push(...pageTocLinks);
const newBlocks = [];
page.items.forEach((line) => {
if (!unknownLines.has(line)) {
line.annotation = REMOVED_ANNOTATION$6;
}
newBlocks.push(line);
if (line === headlineItem) {
newBlocks.push(new LineItem_1({
...line,
type: BlockType_1.H2,
annotation: ADDED_ANNOTATION$3,
}));
}
});
page.items = newBlocks;
} else {
headlineItem = null;
}
});
// all pages have been processed
var foundHeadlines = tocLinks.length;
const notFoundHeadlines = [];
const foundBySize = [];
const headlineTypeToHeightRange = {}; // H1={min:23, max:25}
if (tocPages.length > 0) {
// Add TOC items
tocLinks.forEach(tocLink => {
lastTocPage.items.push(new LineItem_1({
words: [new Word_1({
string: ' '.repeat(tocLink.level * 3) + '-',
})].concat(tocLink.lineItem.words),
type: BlockType_1.TOC,
annotation: ADDED_ANNOTATION$3,
}));
});
// Add linked headers
const pageMapping = detectPageMappingNumber(parseResult.pages.filter(page => page.index > lastTocPage.index), tocLinks);
tocLinks.forEach(tocLink => {
var linkedPage = parseResult.pages[tocLink.pageNumber + pageMapping];
var foundHealineItems;
if (linkedPage) {
foundHealineItems = findHeadlineItems(linkedPage, tocLink.lineItem.text());
if (!foundHealineItems) { // pages are off by 1 ?
linkedPage = parseResult.pages[tocLink.pageNumber + pageMapping + 1];
if (linkedPage) {
foundHealineItems = findHeadlineItems(linkedPage, tocLink.lineItem.text());
}
}
}
if (foundHealineItems) {
addHeadlineItems(linkedPage, tocLink, foundHealineItems, headlineTypeToHeightRange);
} else {
notFoundHeadlines.push(tocLink);
}
});
// Try to find linked headers by height
var fromPage = lastTocPage.index + 2;
var lastNotFound = [];
const rollupLastNotFound = (currentPageNumber) => {
if (lastNotFound.length > 0) {
lastNotFound.forEach(notFoundTocLink => {
const headlineType = headlineByLevel$1(notFoundTocLink.level + 2);
const heightRange = headlineTypeToHeightRange[headlineType.name];
if (heightRange) {
const [pageIndex, lineIndex] = findPageAndLineFromHeadline(parseResult.pages, notFoundTocLink, heightRange, fromPage, currentPageNumber);
if (lineIndex > -1) {
const page = parseResult.pages[pageIndex];
page.items[lineIndex].annotation = REMOVED_ANNOTATION$6;
page.items.splice(lineIndex + 1, 0, new LineItem_1({
...notFoundTocLink.lineItem,
type: headlineType,
annotation: ADDED_ANNOTATION$3,
}));
foundBySize.push(notFoundTocLink);
}
}
});
lastNotFound = [];
}
};
if (notFoundHeadlines.length > 0) {
tocLinks.forEach(tocLink => {
if (notFoundHeadlines.includes(tocLink)) {
lastNotFound.push(tocLink);
} else {
rollupLastNotFound(tocLink.pageNumber);
fromPage = tocLink.pageNumber;
}
});
if (lastNotFound.length > 0) {
rollupLastNotFound(parseResult.pages.length);
}
}
}
const messages = [];
messages.push('Detected ' + tocPages.length + ' table of content pages');
if (tocPages.length > 0) {
messages.push('TOC headline heights: ' + JSON.stringify(headlineTypeToHeightRange));
messages.push('Found TOC headlines: ' + (foundHeadlines - notFoundHeadlines.length + foundBySize.length) + '/' + foundHeadlines);
}
if (notFoundHeadlines.length > 0) {
messages.push('Found TOC headlines (by size): ' + foundBySize.map(tocLink => tocLink.lineItem.text()));
messages.push('Missing TOC headlines: ' + notFoundHeadlines.filter(fTocLink => !foundBySize.includes(fTocLink)).map(tocLink => tocLink.lineItem.text() + '=>' + tocLink.pageNumber));
}
return new ParseResult_1({
...parseResult,
globals: {
...parseResult.globals,
tocPages,
headlineTypeToHeightRange,
},
messages,
})
}
};
// Find out how the TOC page link actualy translates to the page.index
function detectPageMappingNumber (pages, tocLinks) {
for (var tocLink of tocLinks) {
const page = findPageWithHeadline(pages, tocLink.lineItem.text());
if (page) {
return page.index - tocLink.pageNumber
}
}
return null
}
function findPageWithHeadline (pages, headline) {
for (var page of pages) {
if (findHeadlineItems(page, headline)) {
return page
}
}
return null
}
function findHeadlineItems (page, headline) {
const headlineFinder = new HeadlineFinder_1({ headline });
var lineIndex = 0;
for (var line of page.items) {
const headlineItems = headlineFinder.consume(line);
if (headlineItems) {
return { lineIndex, headlineItems }
}
lineIndex++;
}
return null
}
function addHeadlineItems (page, tocLink, foundItems, headlineTypeToHeightRange) {
foundItems.headlineItems.forEach(item => (item.annotation = REMOVED_ANNOTATION$6));
const headlineType = headlineByLevel$1(tocLink.level + 2);
const headlineHeight = foundItems.headlineItems.reduce((max, item) => Math.max(max, item.height), 0);
page.items.splice(foundItems.lineIndex + 1, 0, new LineItem_1({
...foundItems.headlineItems[0],
words: tocLink.lineItem.words,
height: headlineHeight,
type: headlineType,
annotation: ADDED_ANNOTATION$3,
}));
var range = headlineTypeToHeightRange[headlineType.name];
if (range) {
range.min = Math.min(range.min, headlineHeight);
range.max = Math.max(range.max, headlineHeight);
} else {
range = {
min: headlineHeight,
max: headlineHeight,
};
headlineTypeToHeightRange[headlineType.name] = range;
}
}
function findPageAndLineFromHeadline (pages, tocLink, heightRange, fromPage, toPage) {
const linkText = tocLink.lineItem.text().toUpperCase();
for (var i = fromPage; i <= toPage; i++) {
const page = pages[i - 1];
if (page) {
const lineIndex = page.items.findIndex(line => {
if (!line.type && !line.annotation && line.height >= heightRange.min && line.height <= heightRange.max) {
const match = wordMatch(linkText, line.text());
return match >= 0.5
}
return false
});
if (lineIndex > -1) return [i - 1, lineIndex]
}
}
return [-1, -1]
}
class LinkLeveler {
constructor () {
this.levelByMethod = null;
this.uniqueFonts = [];
}
levelPageItems (tocLinks /*: TocLink[] */) {
if (!this.levelByMethod) {
const uniqueX = this.calculateUniqueX(tocLinks);
if (uniqueX.length > 1) {
this.levelByMethod = this.levelByXDiff;
} else {
const uniqueFonts = this.calculateUniqueFonts(tocLinks);
if (uniqueFonts.length > 1) {
this.uniqueFonts = uniqueFonts;
this.levelByMethod = this.levelByFont;
} else {
this.levelByMethod = this.levelToZero;
}
}
}
this.levelByMethod(tocLinks);
}
levelByXDiff (tocLinks) {
const uniqueX = this.calculateUniqueX(tocLinks);
tocLinks.forEach(link => {
link.level = uniqueX.indexOf(link.lineItem.x);
});
}
levelByFont (tocLinks) {
tocLinks.forEach(link => {
link.level = this.uniqueFonts.indexOf(link.lineItem.font);
});
}
levelToZero (tocLinks) {
tocLinks.forEach(link => {
link.level = 0;
});
}
calculateUniqueX (tocLinks) {
var uniqueX = tocLinks.reduce(function (uniquesArray, link) {
if (uniquesArray.indexOf(link.lineItem.x) < 0) uniquesArray.push(link.lineItem.x);
return uniquesArray
}, []);
uniqueX.sort((a, b) => {
return a - b
});
return uniqueX
}
calculateUniqueFonts (tocLinks) {
var uniqueFont = tocLinks.reduce(function (uniquesArray, link) {
if (uniquesArray.indexOf(link.lineItem.font) < 0) uniquesArray.push(link.lineItem.font);
return uniquesArray
}, []);
return uniqueFont
}
}
class TocLink {
constructor (options) {
this.lineItem = options.lineItem;
this.pageNumber = options.pageNumber;
this.level = 0;
}
}
// @flow
const { REMOVED_ANNOTATION: REMOVED_ANNOTATION$7, ADDED_ANNOTATION: ADDED_ANNOTATION$4, DETECTED_ANNOTATION: DETECTED_ANNOTATION$1 } = Annotation_1;
const { isListItemCharacter: isListItemCharacter$1, isNumberedListItem } = stringFunctions;
// Detect items starting with -, •, etc...
var DetectListItems_1 = class DetectListItems extends ToLineItemTransformation_1 {
constructor () {
super('Detect List Items');
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
var foundListItems = 0;
var foundNumberedItems = 0;
parseResult.pages.forEach(page => {
const newItems = [];
page.items.forEach(item => {
newItems.push(item);
if (!item.type) {
var text = item.text();
if (isListItemCharacter$1(item.words[0].string)) {
foundListItems++;
if (item.words[0].string === '-') {
item.annotation = DETECTED_ANNOTATION$1;
item.type = BlockType_1.LIST;
} else {
item.annotation = REMOVED_ANNOTATION$7;
const newWords = item.words.map(word => new Word_1({
...word,
}));
newWords[0].string = '-';
newItems.push(new LineItem_1({
...item,
words: newWords,
annotation: ADDED_ANNOTATION$4,
type: BlockType_1.LIST,
}));
}
} else if (isNumberedListItem(text)) { // TODO check that starts with 1 (kala chakra)
foundNumberedItems++;
item.annotation = DETECTED_ANNOTATION$1;
item.type = BlockType_1.LIST;
}
}
});
page.items = newItems;
});
return new ParseResult_1({
...parseResult,
messages: [
'Detected ' + foundListItems + ' plain list items.',
'Detected ' + foundNumberedItems + ' numbered list items.',
],
})
}
};
// @flow
const { DETECTED_ANNOTATION: DETECTED_ANNOTATION$2 } = Annotation_1;
const { headlineByLevel: headlineByLevel$2 } = BlockType_1;
const { isListItem } = stringFunctions;
// Detect headlines based on heights
var DetectHeaders_1 = class DetectHeaders extends ToLineItemTransformation_1 {
constructor () {
super('Detect Headers');
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
const { tocPages, headlineTypeToHeightRange, mostUsedHeight, mostUsedDistance, mostUsedFont, maxHeight } = parseResult.globals;
const hasToc = tocPages.length > 0;
var detectedHeaders = 0;
// Handle title pages
const pagesWithMaxHeight = findPagesWithMaxHeight(parseResult.pages, maxHeight);
const min2ndLevelHeaderHeigthOnMaxPage = mostUsedHeight + ((maxHeight - mostUsedHeight) / 4);
pagesWithMaxHeight.forEach(titlePage => {
titlePage.items.forEach(item => {
const height = item.height;
if (!item.type && height > min2ndLevelHeaderHeigthOnMaxPage) {
if (height === maxHeight) {
item.type = BlockType_1.H1;
} else {
item.type = BlockType_1.H2;
}
item.annotation = DETECTED_ANNOTATION$2;
detectedHeaders++;
}
});
});
if (hasToc) { // Use existing headline heights to find additional headlines
const headlineTypes = Object.keys(headlineTypeToHeightRange);
headlineTypes.forEach(headlineType => {
var range = headlineTypeToHeightRange[headlineType];
if (range.max > mostUsedHeight) { // use only very clear headlines, only use max
parseResult.pages.forEach(page => {
page.items.forEach(item => {
if (!item.type && item.height === range.max) {
item.annotation = DETECTED_ANNOTATION$2;
item.type = BlockType_1.enumValueOf(headlineType);
detectedHeaders++;
}
});
});
}
});
} else { // Categorize headlines by the text heights
const heights = [];
var lastHeight;
parseResult.pages.forEach(page => {
page.items.forEach(item => {
if (!item.type && item.height > mostUsedHeight && !isListItem(item.text())) {
if (!heights.includes(item.height) && (!lastHeight || lastHeight > item.height)) {
heights.push(item.height);
}
}
});
});
heights.sort((a, b) => b - a);
heights.forEach((height, i) => {
const headlineLevel = i + 2;
if (headlineLevel <= 6) {
const headlineType = headlineByLevel$2(2 + i);
parseResult.pages.forEach(page => {
page.items.forEach(item => {
if (!item.type && item.height === height && !isListItem(item.text())) {
detectedHeaders++;
item.annotation = DETECTED_ANNOTATION$2;
item.type = headlineType;
}
});
});
}
});
}
// find headlines which have paragraph height
var smallesHeadlineLevel = 1;
parseResult.pages.forEach(page => {
page.items.forEach(item => {
if (item.type && item.type.headline) {
smallesHeadlineLevel = Math.max(smallesHeadlineLevel, item.type.headlineLevel);
}
});
});
if (smallesHeadlineLevel < 6) {
const nextHeadlineType = headlineByLevel$2(smallesHeadlineLevel + 1);
parseResult.pages.forEach(page => {
var lastItem;
page.items.forEach(item => {
if (!item.type &&
item.height === mostUsedHeight &&
item.font !== mostUsedFont &&
(!lastItem || lastItem.y < item.y || (lastItem.type && lastItem.type.headline) || (lastItem.y - item.y > mostUsedDistance * 2)) &&
item.text() === item.text().toUpperCase()
) {
detectedHeaders++;
item.annotation = DETECTED_ANNOTATION$2;
item.type = nextHeadlineType;
}
lastItem = item;
});
});
}
return new ParseResult_1({
...parseResult,
messages: [
'Detected ' + detectedHeaders + ' headlines.',
],
})
}
};
function findPagesWithMaxHeight (pages, maxHeight) {
const maxHeaderPagesSet = new Set();
pages.forEach(page => {
page.items.forEach(item => {
if (!item.type && item.height === maxHeight) {
maxHeaderPagesSet.add(page);
}
});
});
return maxHeaderPagesSet
}
// A block of LineItem[] within a Page
var LineItemBlock_1 = class LineItemBlock extends PageItem_1 {
constructor (options) {
super(options);
this.items = [];
if (options.items) {
options.items.forEach(item => this.addItem(item));
}
}
addItem (item /*: LineItem */) {
if (this.type && item.type && this.type !== item.type) {
throw new Error(`Adding item of type ${item.type} to block of type ${this.type}`)
}
if (!this.type) {
this.type = item.type;
}
if (item.parsedElements) {
if (this.parsedElements) {
this.parsedElements.add(item.parsedElements);
} else {
this.parsedElements = item.parsedElements;
}
}
const copiedItem = new LineItem_1({ ...item });
copiedItem.type = null;
this.items.push(copiedItem);
}
};
// @flow
/*::
import ParseResult from '../../ParseResult'
*/
const { REMOVED_ANNOTATION: REMOVED_ANNOTATION$8 } = Annotation_1;
// Abstract class for transformations producing LineItemBlock(s) to be shown in the LineItemBlockPageView
var ToLineItemBlockTransformation_1 = class ToLineItemBlockTransformation extends Transformation_1 {
constructor (name) {
super(name, LineItemBlock_1.name);
if (this.constructor === ToLineItemBlockTransformation) {
throw new TypeError('Can not construct abstract class.')
}
}
completeTransform (parseResult /*: ParseResult */) /*: ParseResult */{
// The usual cleanup
parseResult.messages = [];
parseResult.pages.forEach(page => {
page.items = page.items.filter(item => !item.annotation || item.annotation !== REMOVED_ANNOTATION$8);
page.items.forEach(item => (item.annotation = null));
});
return parseResult
}
};
// @flow
const { DETECTED_ANNOTATION: DETECTED_ANNOTATION$3 } = Annotation_1;
const { minXFromPageItems: minXFromPageItems$1 } = pageItemFunctions;
// Gathers lines to blocks
var GatherBlocks_1 = class GatherBlocks extends ToLineItemBlockTransformation_1 {
constructor () {
super('Gather Blocks');
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
const { mostUsedDistance } = parseResult.globals;
var createdBlocks = 0;
var lineItemCount = 0;
parseResult.pages.map(page => {
lineItemCount += page.items.length;
const blocks = [];
var stashedBlock = new LineItemBlock_1({});
const flushStashedItems = () => {
if (stashedBlock.items.length > 1) {
stashedBlock.annotation = DETECTED_ANNOTATION$3;
}
blocks.push(stashedBlock);
stashedBlock = new LineItemBlock_1({});
createdBlocks++;
};
var minX = minXFromPageItems$1(page.items);
page.items.forEach(item => {
if (stashedBlock.items.length > 0 && shouldFlushBlock(stashedBlock, item, minX, mostUsedDistance)) {
flushStashedItems();
}
stashedBlock.addItem(item);
});
if (stashedBlock.items.length > 0) {
flushStashedItems();
}
page.items = blocks;
});
return new ParseResult_1({
...parseResult,
messages: ['Gathered ' + createdBlocks + ' blocks out of ' + lineItemCount + ' line items'],
})
}
};
function shouldFlushBlock (stashedBlock, item, minX, mostUsedDistance) {
if (stashedBlock.type && stashedBlock.type.mergeFollowingNonTypedItems && !item.type) {
return false
}
const lastItem = stashedBlock.items[stashedBlock.items.length - 1];
const hasBigDistance = bigDistance(lastItem, item, minX, mostUsedDistance);
if (stashedBlock.type && stashedBlock.type.mergeFollowingNonTypedItemsWithSmallDistance && !item.type && !hasBigDistance) {
return false
}
if (item.type !== stashedBlock.type) {
return true
}
if (item.type) {
return !item.type.mergeToBlock
} else {
return hasBigDistance
}
}
function bigDistance (lastItem, item, minX, mostUsedDistance) {
const distance = lastItem.y - item.y;
if (distance < 0 - mostUsedDistance / 2) {
// distance is negative - and not only a bit
return true
}
var allowedDisctance = mostUsedDistance + 1;
if (lastItem.x > minX && item.x > minX) {
// intended elements like lists often have greater spacing
allowedDisctance = mostUsedDistance + mostUsedDistance / 2;
}
if (distance > allowedDisctance) {
return true
}
return false
}
// @flow
const { DETECTED_ANNOTATION: DETECTED_ANNOTATION$4 } = Annotation_1;
const { minXFromBlocks: minXFromBlocks$1 } = pageItemFunctions;
// Detect items which are code/quote blocks
var DetectCodeQuoteBlocks_1 = class DetectCodeQuoteBlocks extends ToLineItemBlockTransformation_1 {
constructor () {
super('$1');
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
const { mostUsedHeight } = parseResult.globals;
var foundCodeItems = 0;
parseResult.pages.forEach(page => {
var minX = minXFromBlocks$1(page.items);
page.items.forEach(block => {
if (!block.type && looksLikeCodeBlock(minX, block.items, mostUsedHeight)) {
block.annotation = DETECTED_ANNOTATION$4;
block.type = BlockType_1.CODE;
foundCodeItems++;
}
});
});
return new ParseResult_1({
...parseResult,
messages: [
'Detected ' + foundCodeItems + ' code/quote items.',
],
})
}
};
function looksLikeCodeBlock (minX, items, mostUsedHeight) {
if (items.length === 0) {
return false
}
if (items.length === 1) {
return items[0].x > minX && items[0].height <= mostUsedHeight + 1
}
for (var item of items) {
if (item.x === minX) {
return false
}
}
return true
}
// @flow
const { MODIFIED_ANNOTATION: MODIFIED_ANNOTATION$1, UNCHANGED_ANNOTATION: UNCHANGED_ANNOTATION$1 } = Annotation_1;
// Cares for proper sub-item spacing/leveling
var DetectListLevels_1 = class DetectListLevels extends ToLineItemBlockTransformation_1 {
constructor () {
super('Level Lists');
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
var listBlocks = 0;
var modifiedBlocks = 0;
parseResult.pages.forEach(page => {
page.items.filter(block => block.type === BlockType_1.LIST).forEach(listBlock => {
var lastItemX;
var currentLevel = 0;
const xByLevel = {};
var modifiedBlock = false;
listBlock.items.forEach(item => {
const isListItem = true;
if (lastItemX && isListItem) {
if (item.x > lastItemX) {
currentLevel++;
xByLevel[item.x] = currentLevel;
} else if (item.x < lastItemX) {
currentLevel = xByLevel[item.x];
}
} else {
xByLevel[item.x] = 0;
}
if (currentLevel > 0) {
item.words = [
new Word_1({ string: ' '.repeat(currentLevel * 3) }),
].concat(item.words);
modifiedBlock = true;
}
lastItemX = item.x;
});
listBlocks++;
if (modifiedBlock) {
modifiedBlocks++;
listBlock.annotation = MODIFIED_ANNOTATION$1;
} else {
listBlock.annotation = UNCHANGED_ANNOTATION$1;
}
});
});
return new ParseResult_1({
...parseResult,
messages: ['Modified ' + modifiedBlocks + ' / ' + listBlocks + ' list blocks.'],
})
}
};
const { blockToText: blockToText$1 } = BlockType_1;
var ToTextBlocks_1 = class ToTextBlocks extends Transformation_1 {
constructor () {
super('To Text Blocks', 'TextBlock');
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
parseResult.pages.forEach(page => {
const textItems = [];
page.items.forEach(block => {
// TODO category to type (before have no unknowns, have paragraph)
const category = block.type ? block.type.name : 'Unknown';
textItems.push({
category: category,
text: blockToText$1(block),
});
});
page.items = textItems;
});
return new ParseResult_1({
...parseResult,
})
}
};
// @flow
var ToMarkdown_1 = class ToMarkdown extends Transformation_1 {
constructor () {
super('To Markdown', 'String');
}
transform (parseResult /*: ParseResult */) /*: ParseResult */ {
parseResult.pages.forEach(page => {
var text = '';
page.items.forEach(block => {
// Concatenate all words in the same block, unless it's a Table of Contents block
let concatText;
if (block.category === 'TOC') {
concatText = block.text;
} else {
concatText = block.text.replace(/(\r\n|\n|\r)/gm, ' ');
}
// Concatenate words that were previously broken up by newline
if (block.category !== 'LIST') {
concatText = concatText.split('- ').join('');
}
// Assume there are no code blocks in our documents
if (block.category === 'CODE') {
concatText = concatText.split('`').join('');
}
text += concatText + '\n\n';
});
page.items = [text];
});
return new ParseResult_1({
...parseResult,
})
}
};
var makeTransformations = fontMap => [
new CalculateGlobalStats_1(fontMap),
new CompactLines_1(),
new RemoveRepetitiveElements_1(),
new VerticalToHorizontal_1(),
new DetectTOC_1(),
new DetectHeaders_1(),
new DetectListItems_1(),
new GatherBlocks_1(),
new DetectCodeQuoteBlocks_1(),
new DetectListLevels_1(),
new ToTextBlocks_1(),
new ToMarkdown_1(),
];
var transform = (pages, transformations) => {
var parseResult = new ParseResult_1({ pages });
let lastTransformation;
transformations.forEach(transformation => {
if (lastTransformation) {
parseResult = lastTransformation.completeTransform(parseResult);
}
parseResult = transformation.transform(parseResult);
lastTransformation = transformation;
});
return parseResult
};
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 _is_node = __w_pdfjs_require__(4);
var _message_handler = __w_pdfjs_require__(45);
var _worker_stream = __w_pdfjs_require__(46);
var _core_utils = __w_pdfjs_require__(8);
var WorkerTask = function WorkerTaskClosure() {
function WorkerTask(name) {
this.name = name;
this.terminated = false;
this._capability = (0, _util.createPromiseCapability)();
}
WorkerTask.prototype = {
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");
}
}
};
return WorkerTask;
}();
exports.WorkerTask = WorkerTask;
var WorkerMessageHandler = {
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);
});
},
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.5.207';
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 loadFailure(ex) {
ensureNotTerminated();
if (!(ex instanceof _core_utils.XRefParseException)) {
onFailure(ex);
return;
}
pdfManager.requestLoadedStream();
pdfManager.onLoadedStream().then(function () {
ensureNotTerminated();
loadDocument(true).then(onSuccess, onFailure);
});
}, 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(data) {
var ref = _primitives.Ref.get(data.ref.num, data.ref.gen);
var catalog = pdfManager.pdfDocument.catalog;
return catalog.getPageIndex(ref);
});
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("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.pdfDocument.xref.stats;
});
handler.on("GetAnnotations", function ({
pageIndex,
intent
}) {
return pdfManager.getPage(pageIndex).then(function (page) {
return page.getAnnotationsData(intent);
});
});
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
}).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;
},
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.getVerbosityLevel = getVerbosityLevel;
exports.info = info;
exports.isArrayBuffer = isArrayBuffer;
exports.isArrayEqual = isArrayEqual;
exports.isBool = isBool;
exports.isEmptyObj = isEmptyObj;
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"
};
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 stringToUTF8String(str) {
return decodeURIComponent(escape(str));
}
function utf8StringToString(str) {
return unescape(encodeURIComponent(str));
}
function isEmptyObj(obj) {
for (const key in obj) {
return false;
}
return true;
}
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 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__) {
var _is_node = __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;
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;
var _util = __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(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);
},
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) {
const mergedDict = new Dict(xref);
for (let i = 0, ii = dictArray.length; i < ii; i++) {
const dict = dictArray[i];
if (!isDict(dict)) {
continue;
}
for (const keyName in dict._map) {
if (mergedDict._map[keyName] !== undefined) {
continue;
}
mergedDict._map[keyName] = dict._map[keyName];
}
}
return mergedDict;
};
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;
var RefSet = function RefSetClosure() {
function RefSet() {
this.dict = Object.create(null);
}
RefSet.prototype = {
has: function RefSet_has(ref) {
return ref.toString() in this.dict;
},
put: function RefSet_put(ref) {
this.dict[ref.toString()] = true;
},
remove: function RefSet_remove(ref) {
delete this.dict[ref.toString()];
}
};
return RefSet;
}();
exports.RefSet = RefSet;
var RefSetCache = function RefSetCacheClosure() {
function RefSetCache() {
this.dict = Object.create(null);
}
RefSetCache.prototype = {
get size() {
return Object.keys(this.dict).length;
},
get: function RefSetCache_get(ref) {
return this.dict[ref.toString()];
},
has: function RefSetCache_has(ref) {
return ref.toString() in this.dict;
},
put: function RefSetCache_put(ref, obj) {
this.dict[ref.toString()] = obj;
},
putAlias: function RefSetCache_putAlias(ref, aliasRef) {
this.dict[ref.toString()] = this.get(aliasRef);
},
forEach: function RefSetCache_forEach(callback) {
for (const i in this.dict) {
callback(this.dict[i]);
}
},
clear: function RefSetCache_clear() {
this.dict = Object.create(null);
}
};
return RefSetCache;
}();
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 = [];
this.numChunksLoaded = 0;
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[chunk]) {
chunks.push(chunk);
}
}
return chunks;
}
getBaseStreams() {
return [this];
}
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) {
if (!this.loadedChunks[curChunk]) {
this.loadedChunks[curChunk] = true;
++this.numChunksLoaded;
}
}
}
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) {
if (!this.loadedChunks[curChunk]) {
this.loadedChunks[curChunk] = true;
++this.numChunksLoaded;
}
}
}
ensureByte(pos) {
if (pos < this.progressiveDataLength) {
return;
}
const chunk = Math.floor(pos / this.chunkSize);
if (chunk === this.lastSuccessfulEnsureByteChunk) {
return;
}
if (!this.loadedChunks[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[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[chunk]) {
return chunk;
}
}
return null;
}
hasChunk(chunk) {
return !!this.loadedChunks[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[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 = Object.create(null);
this.requestsByChunk = Object.create(null);
this.promisesByRequest = Object.create(null);
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 = Object.create(null);
this.chunksNeededByRequest[requestId] = chunksNeeded;
for (const chunk of chunks) {
if (!this.stream.hasChunk(chunk)) {
chunksNeeded[chunk] = true;
}
}
if ((0, _util.isEmptyObj)(chunksNeeded)) {
return Promise.resolve();
}
const capability = (0, _util.createPromiseCapability)();
this.promisesByRequest[requestId] = capability;
const chunksToRequest = [];
for (let chunk in chunksNeeded) {
chunk = chunk | 0;
if (!(chunk in this.requestsByChunk)) {
this.requestsByChunk[chunk] = [];
chunksToRequest.push(chunk);
}
this.requestsByChunk[chunk].push(requestId);
}
if (!chunksToRequest.length) {
return capability.promise;
}
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;
}
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[curChunk] || [];
delete this.requestsByChunk[curChunk];
for (const requestId of requestIds) {
const chunksNeeded = this.chunksNeededByRequest[requestId];
if (curChunk in chunksNeeded) {
delete chunksNeeded[curChunk];
}
if (!(0, _util.isEmptyObj)(chunksNeeded)) {
continue;
}
loadedRequests.push(requestId);
}
}
if (!this.disableAutoFetch && (0, _util.isEmptyObj)(this.requestsByChunk)) {
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[requestId];
delete this.promisesByRequest[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 requestId in this.promisesByRequest) {
this.promisesByRequest[requestId].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__(27);
var _function = __w_pdfjs_require__(41);
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,
fontCache,
builtInCMapCache,
globalImageCache,
pdfFunctionFactory
}) {
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.pdfFunctionFactory = pdfFunctionFactory;
this.evaluatorOptions = pdfManager.evaluatorOptions;
this.resourcesPromise = null;
const idCounters = {
obj: 0
};
this.idFactory = {
createObjId() {
return `p${pageIndex}_${++idCounters.obj}`;
},
getDocId() {
return `g_${pdfManager.docId}`;
}
};
}
_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(this.xref, 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;
}
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
}) {
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.idFactory,
fontCache: this.fontCache,
builtInCMapCache: this.builtInCMapCache,
globalImageCache: this.globalImageCache,
options: this.evaluatorOptions,
pdfFunctionFactory: this.pdfFunctionFactory
});
const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
const pageListPromise = dataPromises.then(([contentStream]) => {
const opList = new _operator_list.OperatorList(intent, sink, this.pageIndex);
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).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.idFactory,
fontCache: this.fontCache,
builtInCMapCache: this.builtInCMapCache,
globalImageCache: this.globalImageCache,
options: this.evaluatorOptions,
pdfFunctionFactory: this.pdfFunctionFactory
});
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.idFactory).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.pdfFunctionFactory = new _function.PDFFunctionFactory({
xref: this.xref,
isEvalSupported: pdfManager.evaluatorOptions.isEvalSupported
});
this._pagePromises = [];
}
parse(recoveryMode) {
this.setup(recoveryMode);
const version = this.catalog.catDict.get("Version");
if ((0, _primitives.isName)(version)) {
this.pdfFormatVersion = version.name;
}
try {
this.acroForm = this.catalog.catDict.get("AcroForm");
if (this.acroForm) {
this.xfa = this.acroForm.get("XFA");
const fields = this.acroForm.get("Fields");
if ((!Array.isArray(fields) || fields.length === 0) && !this.xfa) {
this.acroForm = null;
}
}
} catch (ex) {
if (ex instanceof _core_utils.MissingDataException) {
throw ex;
}
(0, _util.info)("Cannot fetch AcroForm entry; assuming no AcroForms are present");
this.acroForm = null;
}
try {
const collection = this.catalog.catDict.get("Collection");
if ((0, _primitives.isDict)(collection) && collection.getKeys().length > 0) {
this.collection = collection;
}
} catch (ex) {
if (ex instanceof _core_utils.MissingDataException) {
throw ex;
}
(0, _util.info)("Cannot fetch Collection dictionary.");
}
}
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.pdfFormatVersion) {
this.pdfFormatVersion = version.substring(5);
}
}
parseStartXRef() {
this.xref.setStartXRef(this.startXRef);
}
setup(recoveryMode) {
this.xref.parse(recoveryMode);
this.catalog = new _obj.Catalog(this.pdfManager, this.xref);
}
get numPages() {
const linearization = this.linearization;
const num = linearization ? linearization.numPages : this.catalog.numPages;
return (0, _util.shadow)(this, "numPages", num);
}
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.pdfFormatVersion;
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.acroForm,
IsXFAPresent: !!this.xfa,
IsCollectionPresent: !!this.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,
fontCache: catalog.fontCache,
builtInCMapCache: catalog.builtInCMapCache,
globalImageCache: catalog.globalImageCache,
pdfFunctionFactory: this.pdfFunctionFactory
});
});
}
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 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 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)
};
}
XRef.prototype = {
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 || (0, _primitives.isStream)(node)) {
const dict = node instanceof _primitives.Dict ? node : node.dict;
const dictKeys = dict.getKeys();
for (let i = 0, ii = dictKeys.length; i < ii; i++) {
const rawValue = dict.getRaw(dictKeys[i]);
if (mayHaveChildren(rawValue)) {
nodesToVisit.push(rawValue);
}
}
} else if (Array.isArray(node)) {
for (let i = 0, ii = node.length; i < ii; i++) {
const value = node[i];
if (mayHaveChildren(value)) {
nodesToVisit.push(value);
}
}
}
}
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;
const n = 10,
NUL = 0x0;
const startPos = stream.pos;
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) {
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);
}
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 * 8;
if (maybeScanLines > 0 && maybeScanLines < frame.scanLines / 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++) {
var componentIndex = frame.componentIds[data[offset++]];
component = frame.components[componentIndex];
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({
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;
}
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;
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;
}
};
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);
}
};
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"));
var perms = (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);
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 parse(cs, xref, res, pdfFunctionFactory) {
const IR = this.parseToIR(cs, xref, res, pdfFunctionFactory);
return this.fromIR(IR);
}
static fromIR(IR) {
const name = Array.isArray(IR) ? IR[0] : IR;
let whitePoint, blackPoint, gamma;
switch (name) {
case "DeviceGrayCS":
return this.singletons.gray;
case "DeviceRgbCS":
return this.singletons.rgb;
case "DeviceCmykCS":
return this.singletons.cmyk;
case "CalGrayCS":
whitePoint = IR[1];
blackPoint = IR[2];
gamma = IR[3];
return new CalGrayCS(whitePoint, blackPoint, gamma);
case "CalRGBCS":
whitePoint = IR[1];
blackPoint = IR[2];
gamma = IR[3];
const matrix = IR[4];
return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);
case "PatternCS":
let basePatternCS = IR[1];
if (basePatternCS) {
basePatternCS = this.fromIR(basePatternCS);
}
return new PatternCS(basePatternCS);
case "IndexedCS":
const baseIndexedCS = IR[1];
const hiVal = IR[2];
const lookup = IR[3];
return new IndexedCS(this.fromIR(baseIndexedCS), hiVal, lookup);
case "AlternateCS":
const numComps = IR[1];
const alt = IR[2];
const tintFn = IR[3];
return new AlternateCS(numComps, this.fromIR(alt), tintFn);
case "LabCS":
whitePoint = IR[1];
blackPoint = IR[2];
const range = IR[3];
return new LabCS(whitePoint, blackPoint, range);
default:
throw new _util.FormatError(`Unknown colorspace name: ${name}`);
}
}
static parseToIR(cs, xref, res = null, pdfFunctionFactory) {
cs = xref.fetchIfRef(cs);
if ((0, _primitives.isName)(cs)) {
switch (cs.name) {
case "DeviceGray":
case "G":
return "DeviceGrayCS";
case "DeviceRGB":
case "RGB":
return "DeviceRgbCS";
case "DeviceCMYK":
case "CMYK":
return "DeviceCmykCS";
case "Pattern":
return ["PatternCS", null];
default:
if ((0, _primitives.isDict)(res)) {
const colorSpaces = res.get("ColorSpace");
if ((0, _primitives.isDict)(colorSpaces)) {
const resCS = colorSpaces.get(cs.name);
if (resCS) {
if ((0, _primitives.isName)(resCS)) {
return this.parseToIR(resCS, xref, res, pdfFunctionFactory);
}
cs = resCS;
break;
}
}
}
throw new _util.FormatError(`unrecognized colorspace ${cs.name}`);
}
}
if (Array.isArray(cs)) {
const mode = xref.fetchIfRef(cs[0]).name;
let numComps, params, alt, whitePoint, blackPoint, gamma;
switch (mode) {
case "DeviceGray":
case "G":
return "DeviceGrayCS";
case "DeviceRGB":
case "RGB":
return "DeviceRgbCS";
case "DeviceCMYK":
case "CMYK":
return "DeviceCmykCS";
case "CalGray":
params = xref.fetchIfRef(cs[1]);
whitePoint = params.getArray("WhitePoint");
blackPoint = params.getArray("BlackPoint");
gamma = params.get("Gamma");
return ["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 ["CalRGBCS", whitePoint, blackPoint, gamma, matrix];
case "ICCBased":
const stream = xref.fetchIfRef(cs[1]);
const dict = stream.dict;
numComps = dict.get("N");
alt = dict.get("Alternate");
if (alt) {
const altIR = this.parseToIR(alt, xref, res, pdfFunctionFactory);
const altCS = this.fromIR(altIR, pdfFunctionFactory);
if (altCS.numComps === numComps) {
return altIR;
}
(0, _util.warn)("ICCBased color space: Ignoring incorrect /Alternate entry.");
}
if (numComps === 1) {
return "DeviceGrayCS";
} else if (numComps === 3) {
return "DeviceRgbCS";
} else if (numComps === 4) {
return "DeviceCmykCS";
}
break;
case "Pattern":
let basePatternCS = cs[1] || null;
if (basePatternCS) {
basePatternCS = this.parseToIR(basePatternCS, xref, res, pdfFunctionFactory);
}
return ["PatternCS", basePatternCS];
case "Indexed":
case "I":
const baseIndexedCS = this.parseToIR(cs[1], xref, res, pdfFunctionFactory);
const hiVal = xref.fetchIfRef(cs[2]) + 1;
let lookup = xref.fetchIfRef(cs[3]);
if ((0, _primitives.isStream)(lookup)) {
lookup = lookup.getBytes();
}
return ["IndexedCS", baseIndexedCS, hiVal, lookup];
case "Separation":
case "DeviceN":
const name = xref.fetchIfRef(cs[1]);
numComps = Array.isArray(name) ? name.length : 1;
alt = this.parseToIR(cs[2], xref, res, pdfFunctionFactory);
const tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3]));
return ["AlternateCS", numComps, alt, tintFn];
case "Lab":
params = xref.fetchIfRef(cs[1]);
whitePoint = params.getArray("WhitePoint");
blackPoint = params.getArray("BlackPoint");
const range = params.getArray("Range");
return ["LabCS", whitePoint, blackPoint, range];
default:
throw new _util.FormatError(`unimplemented color space object "${mode}"`);
}
}
throw new _util.FormatError(`unrecognized color space 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 baseNumComps = base.numComps;
const length = baseNumComps * highVal;
if ((0, _primitives.isStream)(lookup)) {
this.lookup = new Uint8Array(length);
const bytes = lookup.getBytes(length);
this.lookup.set(bytes);
} else if ((0, _util.isString)(lookup)) {
this.lookup = new Uint8Array(length);
for (let i = 0; i < length; ++i) {
this.lookup[i] = lookup.charCodeAt(i);
}
} else if (lookup instanceof Uint8Array) {
this.lookup = lookup;
} else {
throw new _util.FormatError(`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);
}
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 ** cs.GR;
const BGG = B ** cs.GG;
const CGB = 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.LocalImageCache = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
class LocalImageCache {
constructor() {
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 = 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 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) {
if (!this._refCache.has(ref)) {
return null;
}
const pageIndexSet = this._refCache.get(ref);
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);
class AnnotationFactory {
static create(xref, ref, pdfManager, idFactory) {
return pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory]);
}
static _create(xref, ref, pdfManager, idFactory) {
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,
dict,
subtype,
id,
pdfManager
};
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) {
if (!this.appearance) {
return Promise.resolve(new _operator_list.OperatorList());
}
const data = this.data;
const appearanceDict = this.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: this.appearance,
task,
resources,
operatorList: opList
}).then(() => {
opList.addOp(_util.OPS.endAnnotation, []);
this.appearance.reset();
return opList;
});
});
}
}
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;
data.annotationType = _util.AnnotationType.WIDGET;
data.fieldName = this._constructFieldName(dict);
data.fieldValue = (0, _core_utils.getInheritableProperty)({
dict,
key: "V",
getArray: true
});
data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || "");
data.defaultAppearance = (0, _core_utils.getInheritableProperty)({
dict,
key: "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"
}) || _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(".");
}
hasFieldFlag(flag) {
return !!(this.data.fieldFlags & flag);
}
getOperatorList(evaluator, task, renderForms) {
if (renderForms) {
return Promise.resolve(new _operator_list.OperatorList());
}
return super.getOperatorList(evaluator, task, renderForms);
}
}
class TextWidgetAnnotation extends WidgetAnnotation {
constructor(params) {
super(params);
const dict = params.dict;
this.data.fieldValue = (0, _util.stringToPDFString)(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;
}
getOperatorList(evaluator, task, renderForms) {
if (renderForms || this.appearance) {
return super.getOperatorList(evaluator, task, renderForms);
}
const operatorList = new _operator_list.OperatorList();
if (!this.data.defaultAppearance) {
return Promise.resolve(operatorList);
}
const stream = new _stream.Stream((0, _util.stringToBytes)(this.data.defaultAppearance));
return evaluator.getOperatorList({
stream,
task,
resources: this.fieldResources,
operatorList
}).then(function () {
return operatorList;
});
}
}
class ButtonWidgetAnnotation extends WidgetAnnotation {
constructor(params) {
super(params);
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");
}
}
_processCheckBox(params) {
if ((0, _primitives.isName)(this.data.fieldValue)) {
this.data.fieldValue = this.data.fieldValue.name;
}
const customAppearance = params.dict.get("AP");
if (!(0, _primitives.isDict)(customAppearance)) {
return;
}
const exportValueOptionsDict = customAppearance.get("D");
if (!(0, _primitives.isDict)(exportValueOptionsDict)) {
return;
}
const exportValues = exportValueOptionsDict.getKeys();
const hasCorrectOptionCount = exportValues.length === 2;
if (!hasCorrectOptionCount) {
return;
}
this.data.exportValue = exportValues[0] === "Off" ? exportValues[1] : exportValues[0];
}
_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.data.fieldValue = fieldParentValue.name;
}
}
const appearanceStates = params.dict.get("AP");
if (!(0, _primitives.isDict)(appearanceStates)) {
return;
}
const normalAppearanceState = appearanceStates.get("N");
if (!(0, _primitives.isDict)(normalAppearanceState)) {
return;
}
for (const key of normalAppearanceState.getKeys()) {
if (key !== "Off") {
this.data.buttonValue = key;
break;
}
}
}
_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: isOptionArray ? xref.fetchIfRef(option[0]) : option,
displayValue: (0, _util.stringToPDFString)(isOptionArray ? xref.fetchIfRef(option[1]) : option)
};
}
}
if (!Array.isArray(this.data.fieldValue)) {
this.data.fieldValue = [this.data.fieldValue];
}
this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);
this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);
}
}
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];
if (argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0) {
isSameImage = true;
var firstTransformArg0 = argsArray[iFirstTransform][0];
var firstTransformArg3 = argsArray[iFirstTransform][3];
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] !== 0 || transformArgs[2] !== 0 || 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, 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, pageIndex) {
this._streamSink = streamSink;
this.fnArray = [];
this.argsArray = [];
if (streamSink && intent !== "oplist") {
this.optimizer = new QueueOptimizer(this);
} else {
this.optimizer = new NullOptimizer(this);
}
this.dependencies = Object.create(null);
this._totalLength = 0;
this.pageIndex = pageIndex;
this.intent = intent;
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 (dependency in this.dependencies) {
return;
}
this.dependencies[dependency] = true;
this.addOp(_util.OPS.dependency, [dependency]);
},
addDependencies(dependencies) {
for (var key in dependencies) {
this.addDependency(key);
}
},
addOpList(opList) {
if (!(opList instanceof OperatorList)) {
(0, _util.warn)('addOpList - ignoring invalid "opList" parameter.');
return;
}
Object.assign(this.dependencies, opList.dependencies);
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 = Object.create(null);
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.PartialEvaluator = void 0;
var _util = __w_pdfjs_require__(2);
var _cmap = __w_pdfjs_require__(28);
var _primitives = __w_pdfjs_require__(5);
var _fonts = __w_pdfjs_require__(29);
var _encodings = __w_pdfjs_require__(32);
var _core_utils = __w_pdfjs_require__(8);
var _unicode = __w_pdfjs_require__(35);
var _standard_fonts = __w_pdfjs_require__(34);
var _pattern = __w_pdfjs_require__(38);
var _parser = __w_pdfjs_require__(11);
var _bidi = __w_pdfjs_require__(39);
var _colorspace = __w_pdfjs_require__(23);
var _stream = __w_pdfjs_require__(12);
var _glyphlist = __w_pdfjs_require__(33);
var _metrics = __w_pdfjs_require__(40);
var _function = __w_pdfjs_require__(41);
var _image_utils = __w_pdfjs_require__(24);
var _murmurhash = __w_pdfjs_require__(43);
var _operator_list = __w_pdfjs_require__(26);
var _image = __w_pdfjs_require__(44);
var PartialEvaluator = function PartialEvaluatorClosure() {
const DefaultPartialEvaluatorOptions = {
maxImageSize: -1,
disableFontFace: false,
ignoreErrors: false,
isEvalSupported: true,
fontExtraProperties: false
};
function PartialEvaluator({
xref,
handler,
pageIndex,
idFactory,
fontCache,
builtInCMapCache,
globalImageCache,
options = null,
pdfFunctionFactory
}) {
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.pdfFunctionFactory = pdfFunctionFactory;
this.parsingType3Font = false;
this.fetchBuiltInCMap = async name => {
if (this.builtInCMapCache.has(name)) {
return this.builtInCMapCache.get(name);
}
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;
};
}
var TIME_SLOT_DURATION_MS = 20;
var CHECK_TIME_EVERY = 100;
function TimeSlotManager() {
this.reset();
}
TimeSlotManager.prototype = {
check: function TimeSlotManager_check() {
if (++this.checked < CHECK_TIME_EVERY) {
return false;
}
this.checked = 0;
return this.endTime <= Date.now();
},
reset: function TimeSlotManager_reset() {
this.endTime = Date.now() + TIME_SLOT_DURATION_MS;
this.checked = 0;
}
};
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";
}
var deferred = Promise.resolve();
var TILING_PATTERN = 1,
SHADING_PATTERN = 2;
PartialEvaluator.prototype = {
clone(newOptions = DefaultPartialEvaluatorOptions) {
var newEvaluator = Object.create(this);
newEvaluator.options = newOptions;
return newEvaluator;
},
hasBlendModes: function PartialEvaluator_hasBlendModes(resources) {
if (!(resources instanceof _primitives.Dict)) {
return false;
}
var processed = Object.create(null);
if (resources.objId) {
processed[resources.objId] = true;
}
var nodes = [resources],
xref = this.xref;
while (nodes.length) {
var node = nodes.shift();
var graphicStates = node.get("ExtGState");
if (graphicStates instanceof _primitives.Dict) {
var graphicStatesKeys = graphicStates.getKeys();
for (let i = 0, ii = graphicStatesKeys.length; i < ii; i++) {
const key = graphicStatesKeys[i];
let graphicState = graphicStates.getRaw(key);
if (graphicState instanceof _primitives.Ref) {
if (processed[graphicState.toString()]) {
continue;
}
try {
graphicState = xref.fetch(graphicState);
} catch (ex) {
if (ex instanceof _core_utils.MissingDataException) {
throw ex;
}
if (this.options.ignoreErrors) {
if (graphicState instanceof _primitives.Ref) {
processed[graphicState.toString()] = true;
}
this.handler.send("UnsupportedFeature", {
featureId: _util.UNSUPPORTED_FEATURES.errorExtGState
});
(0, _util.warn)(`hasBlendModes - ignoring ExtGState: "${ex}".`);
continue;
}
throw ex;
}
}
if (!(graphicState instanceof _primitives.Dict)) {
continue;
}
if (graphicState.objId) {
processed[graphicState.objId] = true;
}
const bm = graphicState.get("BM");
if (bm instanceof _primitives.Name) {
if (bm.name !== "Normal") {
return true;
}
continue;
}
if (bm !== undefined && Array.isArray(bm)) {
for (let j = 0, jj = bm.length; j < jj; j++) {
if (bm[j] instanceof _primitives.Name && bm[j].name !== "Normal") {
return true;
}
}
}
}
}
var xObjects = node.get("XObject");
if (!(xObjects instanceof _primitives.Dict)) {
continue;
}
var xObjectsKeys = xObjects.getKeys();
for (let i = 0, ii = xObjectsKeys.length; i < ii; i++) {
const key = xObjectsKeys[i];
var xObject = xObjects.getRaw(key);
if (xObject instanceof _primitives.Ref) {
if (processed[xObject.toString()]) {
continue;
}
try {
xObject = xref.fetch(xObject);
} catch (ex) {
if (ex instanceof _core_utils.MissingDataException) {
throw ex;
}
if (this.options.ignoreErrors) {
if (xObject instanceof _primitives.Ref) {
processed[xObject.toString()] = true;
}
this.handler.send("UnsupportedFeature", {
featureId: _util.UNSUPPORTED_FEATURES.errorXObject
});
(0, _util.warn)(`hasBlendModes - ignoring XObject: "${ex}".`);
continue;
}
throw ex;
}
}
if (!(0, _primitives.isStream)(xObject)) {
continue;
}
if (xObject.dict.objId) {
if (processed[xObject.dict.objId]) {
continue;
}
processed[xObject.dict.objId] = true;
}
var xResources = xObject.dict.get("Resources");
if (xResources instanceof _primitives.Dict && (!xResources.objId || !processed[xResources.objId])) {
nodes.push(xResources);
if (xResources.objId) {
processed[xResources.objId] = true;
}
}
}
}
return false;
},
async buildFormXObject(resources, xobj, smask, operatorList, task, initialState) {
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;
}
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")) {
colorSpace = await this.parseColorSpace({
cs: group.get("CS"),
resources
});
}
}
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]);
}
});
},
async buildPaintImageXObject({
resources,
image,
isInline = false,
operatorList,
cacheKey,
localImageCache
}) {
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
});
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()}_type3res_${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];
const imgPromise = _image.PDFImage.buildImage({
xref: this.xref,
res: resources,
image,
isInline,
pdfFunctionFactory: this.pdfFunctionFactory
}).then(imageObj => {
imgData = imageObj.createImageData(false);
if (this.parsingType3Font) {
return this.handler.sendWithPromise("commonobj", [objId, "FontType3Res", imgData], [imgData.data.buffer]);
} else if (cacheGlobally) {
this.handler.send("commonobj", [objId, "Image", imgData], [imgData.data.buffer]);
return undefined;
}
this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], [imgData.data.buffer]);
return undefined;
}).catch(reason => {
(0, _util.warn)("Unable to decode image: " + reason);
if (this.parsingType3Font) {
return this.handler.sendWithPromise("commonobj", [objId, "FontType3Res", null]);
} else if (cacheGlobally) {
this.handler.send("commonobj", [objId, "Image", null]);
return undefined;
}
this.handler.send("obj", [objId, this.pageIndex, "Image", null]);
return undefined;
});
if (this.parsingType3Font) {
await imgPromise;
}
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: function PartialEvaluator_handleSmask(smask, resources, operatorList, task, stateManager) {
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());
},
handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) {
const tilingOpList = new _operator_list.OperatorList();
const resourcesArray = [patternDict.get("Resources"), resources];
const patternResources = _primitives.Dict.merge(this.xref, resourcesArray);
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: function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) {
var fontName;
if (fontArgs) {
fontArgs = fontArgs.slice();
fontName = fontArgs[0].name;
}
return this.loadFont(fontName, fontRef, resources).then(translated => {
if (!translated.font.isType3Font) {
return translated;
}
return translated.loadType3Data(this, resources, operatorList, task).then(function () {
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;
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;
},
setGState: function PartialEvaluator_setGState(resources, gState, operatorList, task, stateManager) {
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":
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)) {
promise = promise.then(() => {
return this.handleSMask(value, resources, operatorList, task, stateManager);
});
gStateObj.push([key, true]);
} else {
(0, _util.warn)("Unsupported SMask type");
}
break;
case "OP":
case "op":
case "OPM":
case "BG":
case "BG2":
case "UCR":
case "UCR2":
case "TR":
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]);
}
});
},
loadFont: function PartialEvaluator_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.getFallbackFontDict();
}
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 = 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: _fonts.Font.getFontID()
};
}
if (fontRefIsRef) {
fontAliases[hash].aliasRef = fontRef;
}
fontID = fontAliases[hash].fontID;
}
if (fontRefIsRef) {
this.fontCache.put(fontRef, fontCapability.promise);
} else {
if (!fontID) {
fontID = this.idFactory.createObjId();
}
this.fontCache.put(`id_${fontID}`, fontCapability.promise);
}
(0, _util.assert)(fontID, 'The "fontID" must be defined.');
font.loadedName = `${this.idFactory.getDocId()}_f${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
}) {
return new Promise(resolve => {
resolve(_colorspace.ColorSpace.parse(cs, this.xref, resources, this.pdfFunctionFactory));
}).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) {
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 === TILING_PATTERN) {
var color = cs.base ? cs.base.getRgb(args, 0) : null;
return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task);
} else if (typeNum === SHADING_PATTERN) {
var shading = dict.get("Shading");
var matrix = dict.getArray("Matrix");
pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this.pdfFunctionFactory);
operatorList.addOp(fn, pattern.getIR());
return undefined;
}
throw new _util.FormatError(`Unknown PatternType: ${typeNum}`);
}
throw new _util.FormatError(`Unknown PatternName: ${patternName}`);
},
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();
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;
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:
var 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 (!xobj) {
operatorList.addOp(fn, args);
resolveXObject();
return;
}
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()).then(function () {
stateManager.restore();
resolveXObject();
}, rejectXObject);
return;
} else if (type.name === "Image") {
self.buildPaintImageXObject({
resources,
image: xobj,
operatorList,
cacheKey: name,
localImageCache
}).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
}));
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:
next(self.parseColorSpace({
cs: args[0],
resources
}).then(function (colorSpace) {
if (colorSpace) {
stateManager.state.fillColorSpace = colorSpace;
}
}));
return;
case _util.OPS.setStrokeColorSpace:
next(self.parseColorSpace({
cs: args[0],
resources
}).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));
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));
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);
var patternIR = shadingFill.getIR();
args = [patternIR];
fn = _util.OPS.shadingFill;
break;
case _util.OPS.setGState:
var dictName = args[0];
var extGState = resources.get("ExtGState");
if (!(0, _primitives.isDict)(extGState) || !extGState.has(dictName.name)) {
break;
}
var gState = extGState.get(dictName.name);
next(self.setGState(resources, gState, operatorList, task, stateManager));
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.beginMarkedContent:
case _util.OPS.beginMarkedContentProps:
case _util.OPS.endMarkedContent:
case _util.OPS.beginCompat:
case _util.OPS.endCompat:
continue;
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();
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 (!xobj) {
resolveXObject();
return;
}
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:
flushTextContentItem();
var dictName = args[0];
var extGState = resources.get("ExtGState");
if (!(0, _primitives.isDict)(extGState) || !(0, _primitives.isName)(dictName)) {
break;
}
var gState = extGState.get(dictName.name);
if (!(0, _primitives.isDict)(gState)) {
break;
}
var gStateFont = gState.get("Font");
if (gStateFont) {
textState.fontName = null;
textState.fontSize = gStateFont[1];
next(handleSetFont(null, gStateFont[0]));
return;
}
break;
}
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: function PartialEvaluator_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.fetchBuiltInCMap,
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: function PartialEvaluator_readToUnicode(toUnicode) {
var cmapObj = toUnicode;
if ((0, _primitives.isName)(cmapObj)) {
return _cmap.CMapFactory.create({
encoding: cmapObj,
fetchBuiltInCMap: this.fetchBuiltInCMap,
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.fetchBuiltInCMap,
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: function PartialEvaluator_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: function PartialEvaluator_isSerifFont(baseFontName) {
var fontNameWoStyle = baseFontName.split("-")[0];
return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1;
},
getBaseFontMetrics: function PartialEvaluator_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: function PartialEvaluator_bulildCharCodeToWidth(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: function PartialEvaluator_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)) {
var keys = encoding.getKeys();
for (var i = 0, ii = keys.length; i < ii; i++) {
var entry = encoding.getRaw(keys[i]);
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: function PartialEvaluator_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.fetchBuiltInCMap,
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);
});
}
};
PartialEvaluator.buildFontPaths = function (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);
}
}
};
PartialEvaluator.getFallbackFontDict = function () {
if (this._fallbackFontDict) {
return this._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 this._fallbackFontDict = dict;
};
return PartialEvaluator;
}();
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.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, parentOperatorList, task) {
if (!this.font.isType3Font) {
throw new Error("Must be a Type3 font.");
}
if (this.type3Loaded) {
return this.type3Loaded;
}
var type3Options = Object.create(evaluator.options);
type3Options.ignoreErrors = false;
var type3Evaluator = evaluator.clone(type3Options);
type3Evaluator.parsingType3Font = true;
var translatedFont = this.font;
var loadCharProcsPromise = Promise.resolve();
var charProcs = this.dict.get("CharProcs");
var fontResources = this.dict.get("Resources") || resources;
var charProcKeys = charProcs.getKeys();
var charProcOperatorList = Object.create(null);
for (var i = 0, n = charProcKeys.length; i < n; ++i) {
const key = charProcKeys[i];
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();
parentOperatorList.addDependencies(operatorList.dependencies);
}).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;
}
}
var StateManager = function StateManagerClosure() {
function StateManager(initialState) {
this.state = initialState;
this.stateStack = [];
}
StateManager.prototype = {
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);
}
};
return StateManager;
}();
var TextState = function TextStateClosure() {
function TextState() {
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;
}
TextState.prototype = {
setTextMatrix: function TextState_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: function TextState_setTextMatrix(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: function TextState_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: function TextState_translateTextMatrix(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: function TextState_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: function TextState_calcRendeMatrix(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: function TextState_carriageReturn() {
this.translateTextLineMatrix(0, -this.leading);
this.textMatrix = this.textLineMatrix.slice();
},
clone: function TextState_clone() {
var clone = Object.create(this);
clone.textMatrix = this.textMatrix.slice();
clone.textLineMatrix = this.textLineMatrix.slice();
clone.fontMatrix = this.fontMatrix.slice();
return clone;
}
};
return TextState;
}();
var EvalState = function EvalStateClosure() {
function EvalState() {
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;
}
EvalState.prototype = {
clone: function CanvasExtraState_clone() {
return Object.create(this);
}
};
return EvalState;
}();
var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {
var 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;
});
const MAX_INVALID_PATH_OPS = 20;
function EvaluatorPreprocessor(stream, xref, stateManager) {
this.opMap = getOPMap();
this.parser = new _parser.Parser({
lexer: new _parser.Lexer(stream, this.opMap),
xref
});
this.stateManager = stateManager;
this.nonProcessedArgs = [];
this._numInvalidPathOPS = 0;
}
EvaluatorPreprocessor.prototype = {
get savedStatesDepth() {
return this.stateManager.stateStack.length;
},
read: function EvaluatorPreprocessor_read(operation) {
var args = operation.args;
while (true) {
var obj = this.parser.getObj();
if (obj instanceof _primitives.Cmd) {
var cmd = obj.cmd;
var opSpec = this.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 > 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: function EvaluatorPreprocessor_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;
}
}
};
return EvaluatorPreprocessor;
}();
/***/ }),
/* 28 */
/***/ (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;
/***/ }),
/* 29 */
/***/ (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__(30);
var _glyphlist = __w_pdfjs_require__(33);
var _encodings = __w_pdfjs_require__(32);
var _standard_fonts = __w_pdfjs_require__(34);
var _unicode = __w_pdfjs_require__(35);
var _core_utils = __w_pdfjs_require__(8);
var _font_renderer = __w_pdfjs_require__(36);
var _cmap = __w_pdfjs_require__(28);
var _stream = __w_pdfjs_require__(12);
var _type1_parser = __w_pdfjs_require__(37);
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;
}
Font.getFontID = function () {
var ID = 1;
return function Font_getFontID() {
return String(ID++);
};
}();
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) {
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 startOffset = itemDecode(locaData, 0);
var writeOffset = 0;
var missingGlyphs = Object.create(null);
itemEncode(locaData, 0, writeOffset);
var i, j;
for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
var endOffset = itemDecode(locaData, j);
if (endOffset === 0) {
endOffset = startOffset;
}
if (endOffset > oldGlyfDataLength && (oldGlyfDataLength + 3 & ~3) === endOffset) {
endOffset = oldGlyfDataLength;
}
if (endOffset > oldGlyfDataLength) {
startOffset = endOffset;
}
var glyphProfile = sanitizeGlyph(oldGlyfData, startOffset, 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);
startOffset = endOffset;
}
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;
if (properties.hasEncoding && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0) || cmapPlatformId === -1 && cmapEncodingId === -1 && !!(0, _encodings.getEncoding)(properties.baseEncodingName)) {
var baseEncoding = [];
if (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding") {
baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
}
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);
}
var found = false;
for (let i = 0; i < cmapMappingsLength; ++i) {
if (cmapMappings[i].charCode !== unicodeOrCharCode) {
continue;
}
charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
found = true;
break;
}
if (!found && properties.glyphNames) {
var glyphId = properties.glyphNames.indexOf(glyphName);
if (glyphId === -1 && standardGlyphName !== glyphName) {
glyphId = properties.glyphNames.indexOf(standardGlyphName);
}
if (glyphId > 0 && hasGlyph(glyphId)) {
charCodeToGlyphId[charCode] = glyphId;
}
}
}
} else if (cmapPlatformId === 0 && cmapEncodingId === 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 (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;
var eexecBlockLength = 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);
eexecBlockLength = 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;
}();
/***/ }),
/* 30 */
/***/ (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__(31);
var _encodings = __w_pdfjs_require__(32);
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
}];
function CFFParser(file, properties, seacAnalysisEnabled) {
this.bytes = file.getBytes();
this.properties = properties;
this.seacAnalysisEnabled = !!seacAnalysisEnabled;
}
CFFParser.prototype = {
parse: function CFFParser_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: function CFFParser_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: function CFFParser_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: function CFFParser_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: function CFFParser_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: function CFFParser_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: function CFFParser_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: function CFFParser_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: function CFFParser_emptyPrivateDictionary(parentDict) {
var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);
parentDict.setByKey(18, [0, 0]);
parentDict.privateDict = privateDict;
},
parsePrivateDict: function CFFParser_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: function CFFParser_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: function CFFParser_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: function CFFParser_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;
var CFF = function CFFClosure() {
function CFF() {
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;
}
CFF.prototype = {
duplicateFirstGlyph: function CFF_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: function CFF_hasGlyphID(id) {
if (id < 0 || id >= this.charStrings.count) {
return false;
}
var glyph = this.charStrings.get(id);
return glyph.length > 0;
}
};
return CFF;
}();
exports.CFF = CFF;
var CFFHeader = function CFFHeaderClosure() {
function CFFHeader(major, minor, hdrSize, offSize) {
this.major = major;
this.minor = minor;
this.hdrSize = hdrSize;
this.offSize = offSize;
}
return CFFHeader;
}();
exports.CFFHeader = CFFHeader;
var CFFStrings = function CFFStringsClosure() {
function CFFStrings() {
this.strings = [];
}
CFFStrings.prototype = {
get: function CFFStrings_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: function CFFStrings_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: function CFFStrings_add(value) {
this.strings.push(value);
},
get count() {
return this.strings.length;
}
};
return CFFStrings;
}();
exports.CFFStrings = CFFStrings;
var CFFIndex = function CFFIndexClosure() {
function CFFIndex() {
this.objects = [];
this.length = 0;
}
CFFIndex.prototype = {
add: function CFFIndex_add(data) {
this.length += data.length;
this.objects.push(data);
},
set: function CFFIndex_set(index, data) {
this.length += data.length - this.objects[index].length;
this.objects[index] = data;
},
get: function CFFIndex_get(index) {
return this.objects[index];
},
get count() {
return this.objects.length;
}
};
return CFFIndex;
}();
exports.CFFIndex = CFFIndex;
var CFFDict = function CFFDictClosure() {
function CFFDict(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);
}
CFFDict.prototype = {
setByKey: function CFFDict_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: function CFFDict_setByName(name, value) {
if (!(name in this.nameToKeyMap)) {
throw new _util.FormatError(`Invalid dictionary name "${name}"`);
}
this.values[this.nameToKeyMap[name]] = value;
},
hasName: function CFFDict_hasName(name) {
return this.nameToKeyMap[name] in this.values;
},
getByName: function CFFDict_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: function CFFDict_removeByName(name) {
delete this.values[this.nameToKeyMap[name]];
}
};
CFFDict.createTables = function CFFDict_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;
};
return CFFDict;
}();
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;
function CFFTopDict(strings) {
if (tables === null) {
tables = CFFDict.createTables(layout);
}
CFFDict.call(this, tables, strings);
this.privateDict = null;
}
CFFTopDict.prototype = Object.create(CFFDict.prototype);
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;
function CFFPrivateDict(strings) {
if (tables === null) {
tables = CFFDict.createTables(layout);
}
CFFDict.call(this, tables, strings);
this.subrsIndex = null;
}
CFFPrivateDict.prototype = Object.create(CFFDict.prototype);
return CFFPrivateDict;
}();
exports.CFFPrivateDict = CFFPrivateDict;
var CFFCharsetPredefinedTypes = {
ISO_ADOBE: 0,
EXPERT: 1,
EXPERT_SUBSET: 2
};
var CFFCharset = function CFFCharsetClosure() {
function CFFCharset(predefined, format, charset, raw) {
this.predefined = predefined;
this.format = format;
this.charset = charset;
this.raw = raw;
}
return CFFCharset;
}();
exports.CFFCharset = CFFCharset;
var CFFEncoding = function CFFEncodingClosure() {
function CFFEncoding(predefined, format, encoding, raw) {
this.predefined = predefined;
this.format = format;
this.encoding = encoding;
this.raw = raw;
}
return CFFEncoding;
}();
var CFFFDSelect = function CFFFDSelectClosure() {
function CFFFDSelect(format, fdSelect) {
this.format = format;
this.fdSelect = fdSelect;
}
CFFFDSelect.prototype = {
getFDIndex: function CFFFDSelect_get(glyphIndex) {
if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
return -1;
}
return this.fdSelect[glyphIndex];
}
};
return CFFFDSelect;
}();
exports.CFFFDSelect = CFFFDSelect;
var CFFOffsetTracker = function CFFOffsetTrackerClosure() {
function CFFOffsetTracker() {
this.offsets = Object.create(null);
}
CFFOffsetTracker.prototype = {
isTracking: function CFFOffsetTracker_isTracking(key) {
return key in this.offsets;
},
track: function CFFOffsetTracker_track(key, location) {
if (key in this.offsets) {
throw new _util.FormatError(`Already tracking location of ${key}`);
}
this.offsets[key] = location;
},
offset: function CFFOffsetTracker_offset(value) {
for (var key in this.offsets) {
this.offsets[key] += value;
}
},
setEntryLocation: function CFFOffsetTracker_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;
}
}
};
return CFFOffsetTracker;
}();
var CFFCompiler = function CFFCompilerClosure() {
function CFFCompiler(cff) {
this.cff = cff;
}
CFFCompiler.prototype = {
compile: function CFFCompiler_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: function CFFCompiler_encodeNumber(value) {
if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) {
return this.encodeInteger(value);
}
return this.encodeFloat(value);
},
encodeFloat: function CFFCompiler_encodeFloat(num) {
var value = num.toString();
var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.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: function CFFCompiler_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: function CFFCompiler_compileHeader(header) {
return [header.major, header.minor, header.hdrSize, header.offSize];
},
compileNameIndex: function CFFCompiler_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: function CFFCompiler_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: function CFFCompiler_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: function CFFCompiler_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: function CFFCompiler_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: function CFFCompiler_compileGlobalSubrIndex() {
var globalSubrIndex = this.cff.globalSubrIndex;
this.out.writeByteArray(this.compileIndex(globalSubrIndex));
},
compileCharStrings: function CFFCompiler_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: function CFFCompiler_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: function CFFCompiler_compileEncoding(encoding) {
return this.compileTypedArray(encoding.raw);
},
compileFDSelect: function CFFCompiler_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: function CFFCompiler_compileTypedArray(data) {
var out = [];
for (var i = 0, ii = data.length; i < ii; ++i) {
out[i] = data[i];
}
return out;
},
compileIndex: function CFFCompiler_compileIndex(index, trackers) {
trackers = 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;
}
};
return CFFCompiler;
}();
exports.CFFCompiler = CFFCompiler;
/***/ }),
/* 31 */
/***/ (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;
/***/ }),
/* 32 */
/***/ (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;
}
}
/***/ }),
/* 33 */
/***/ (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;
/***/ }),
/* 34 */
/***/ (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;
/***/ }),
/* 35 */
/***/ (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;
/***/ }),
/* 36 */
/***/ (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__(30);
var _glyphlist = __w_pdfjs_require__(33);
var _encodings = __w_pdfjs_require__(32);
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;
/***/ }),
/* 37 */
/***/ (function(module, exports, __w_pdfjs_require__) {
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Type1Parser = void 0;
var _encodings = __w_pdfjs_require__(32);
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) {
this.seac = this.stack.splice(-4, 4);
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;
/***/ }),
/* 38 */
/***/ (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) {
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);
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);
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, res, pdfFunctionFactory) {
this.matrix = matrix;
this.coordsArr = dict.getArray("Coords");
this.shadingType = dict.get("ShadingType");
this.type = "Pattern";
var cs = dict.get("ColorSpace", "CS");
cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
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.get("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, res, pdfFunctionFactory) {
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;
}
var cs = dict.get("ColorSpace", "CS");
cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
this.cs = cs;
this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null;
var fnObj = dict.get("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];
}
/***/ }),
/* 39 */
/***/ (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);
}
/***/ }),
/* 40 */
/***/ (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;
/***/ }),
/* 41 */
/***/ (function(module, exports, __w_pdfjs_require__) {
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isPDFFunction = isPDFFunction;
exports.PostScriptCompiler = exports.PostScriptEvaluator = exports.PDFFunctionFactory = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
var _ps_parser = __w_pdfjs_require__(42);
class PDFFunctionFactory {
constructor({
xref,
isEvalSupported = true
}) {
this.xref = xref;
this.isEvalSupported = isEvalSupported !== false;
}
create(fn) {
return PDFFunction.parse({
xref: this.xref,
isEvalSupported: this.isEvalSupported,
fn
});
}
createFromArray(fnObj) {
return PDFFunction.parseArray({
xref: this.xref,
isEvalSupported: this.isEvalSupported,
fnObj
});
}
}
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;
/***/ }),
/* 42 */
/***/ (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;
/***/ }),
/* 43 */
/***/ (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;
/***/ }),
/* 44 */
/***/ (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);
var PDFImage = function PDFImageClosure() {
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;
}
function PDFImage({
xref,
res,
image,
isInline = false,
smask = null,
mask = null,
isMask = false,
pdfFunctionFactory
}) {
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) {
var colorSpace = dict.get("ColorSpace", "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.");
}
}
const resources = isInline ? res : null;
this.colorSpace = _colorspace.ColorSpace.parse(colorSpace, xref, resources, pdfFunctionFactory);
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
});
} 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
});
}
} else {
this.mask = mask;
}
}
}
PDFImage.buildImage = function ({
xref,
res,
image,
isInline = false,
pdfFunctionFactory
}) {
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 Promise.resolve(new PDFImage({
xref,
res,
image: imageData,
isInline,
smask: smaskData,
mask: maskData,
pdfFunctionFactory
}));
};
PDFImage.createMask = function ({
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
};
};
PDFImage.prototype = {
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);
}
};
return PDFImage;
}();
exports.PDFImage = PDFImage;
/***/ }),
/* 45 */
/***/ (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;
/***/ }),
/* 46 */
/***/ (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 ExtractPDFSettings = /** @class */ (function () {
function ExtractPDFSettings() {
this.createNewFile = true;
this.copyToClipboard = true;
}
return ExtractPDFSettings;
}());
var ExtractPDFSettingsTab = /** @class */ (function (_super) {
__extends(ExtractPDFSettingsTab, _super);
function ExtractPDFSettingsTab(app, plugin) {
var _this = _super.call(this, app, plugin) || this;
_this.plugin = plugin;
return _this;
}
ExtractPDFSettingsTab.prototype.display = function () {
var _this = this;
var containerEl = this.containerEl;
containerEl.empty();
containerEl.createEl("h2", { text: "Extract Highlights Plugin" });
containerEl.createEl("p", { text: "When invoked, will parse the currently focused PDF and copy its content to the cilpboard." });
new obsidian.Setting(containerEl)
.setName('Create new file')
.setDesc('If enabled, will automatically create a new .md file from the PDF')
.addToggle(function (toggle) {
return toggle.setValue(_this.plugin.settings.createNewFile).onChange(function (value) {
_this.plugin.settings.createNewFile = value;
_this.plugin.saveData(_this.plugin.settings);
});
});
new obsidian.Setting(containerEl)
.setName('Copy content to clipboard')
.setDesc('If enabled, will copy the extracted Markdown to your clipboard')
.addToggle(function (toggle) {
return toggle.setValue(_this.plugin.settings.copyToClipboard).onChange(function (value) {
_this.plugin.settings.copyToClipboard = value;
_this.plugin.saveData(_this.plugin.settings);
});
});
};
return ExtractPDFSettingsTab;
}(obsidian.PluginSettingTab));
obsidian.addIcon('extract', '');
var ExtractPDFPlugin = /** @class */ (function (_super) {
__extends(ExtractPDFPlugin, _super);
function ExtractPDFPlugin() {
return _super !== null && _super.apply(this, arguments) || this;
}
ExtractPDFPlugin.prototype.onload = function () {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
this.loadSettings();
this.addSettingTab(new ExtractPDFSettingsTab(this.app, this));
this.modal = new ProgressModal(this.app);
this.addRibbonIcon('extract', 'PDF to Markdown', function () {
_this.extract();
});
return [2 /*return*/];
});
});
};
ExtractPDFPlugin.prototype.loadSettings = function () {
var _this = this;
this.settings = new ExtractPDFSettings();
(function () { return __awaiter(_this, void 0, void 0, function () {
var loadedSettings;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.loadData()];
case 1:
loadedSettings = _a.sent();
if (loadedSettings) {
console.log("Found existing settings file");
this.settings.createNewFile = loadedSettings.createNewFile;
this.settings.copyToClipboard = loadedSettings.copyToClipboard;
}
else {
console.log("No settings file found, saving...");
this.saveData(this.settings);
}
return [2 /*return*/];
}
});
}); })();
};
ExtractPDFPlugin.prototype.extract = function () {
return __awaiter(this, void 0, void 0, function () {
var file, arrayBuffer, doc, result, fonts, pages, transformations, parseResult, resultMD, filePath;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
file = this.app.workspace.getActiveFile();
if (file === null)
return [2 /*return*/];
if (file.extension !== 'pdf')
return [2 /*return*/];
this.modal.fileName = file.name;
this.modal.open();
return [4 /*yield*/, this.app.vault.readBinary(file)];
case 1:
arrayBuffer = _a.sent();
pdfjs.GlobalWorkerOptions.workerSrc = pdf_worker_entry;
return [4 /*yield*/, pdfjs.getDocument(arrayBuffer).promise];
case 2:
doc = _a.sent();
return [4 /*yield*/, parse(doc)];
case 3:
result = _a.sent();
fonts = result.fonts, pages = result.pages;
transformations = makeTransformations(fonts.map);
parseResult = transform(pages, transformations);
resultMD = parseResult.pages
// @ts-ignore
.map(function (page) { return page.items.join('\n'); })
.join('---\n\n');
filePath = file.name.replace(".pdf", ".md");
if (this.settings.copyToClipboard) {
this.saveToClipboard(resultMD);
}
if (!this.settings.createNewFile) return [3 /*break*/, 6];
return [4 /*yield*/, this.saveToFile(filePath, resultMD)];
case 4:
_a.sent();
return [4 /*yield*/, this.app.workspace.openLinkText(filePath, '', true)];
case 5:
_a.sent();
_a.label = 6;
case 6:
this.modal.close();
return [2 /*return*/];
}
});
});
};
ExtractPDFPlugin.prototype.saveToClipboard = function (data) {
if (data.length > 0) {
navigator.clipboard.writeText(data);
}
else {
new obsidian.Notice("No text found");
}
};
ExtractPDFPlugin.prototype.saveToFile = function (filePath, mdString) {
return __awaiter(this, void 0, void 0, function () {
var fileExists;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.app.vault.adapter.exists(filePath)];
case 1:
fileExists = _a.sent();
if (!fileExists) return [3 /*break*/, 3];
return [4 /*yield*/, this.appendFile(filePath, mdString)];
case 2:
_a.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, this.app.vault.create(filePath, mdString)];
case 4:
_a.sent();
_a.label = 5;
case 5: return [2 /*return*/];
}
});
});
};
ExtractPDFPlugin.prototype.appendFile = function (filePath, note) {
return __awaiter(this, void 0, void 0, function () {
var existingContent;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.app.vault.adapter.read(filePath)];
case 1:
existingContent = _a.sent();
if (existingContent.length > 0) {
existingContent = existingContent + '\r\r';
}
return [4 /*yield*/, this.app.vault.adapter.write(filePath, existingContent + note)];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
return ExtractPDFPlugin;
}(obsidian.Plugin));
var ProgressModal = /** @class */ (function (_super) {
__extends(ProgressModal, _super);
function ProgressModal(app) {
return _super.call(this, app) || this;
}
ProgressModal.prototype.onOpen = function () {
var contentEl = this.contentEl;
contentEl.createEl("h2", { text: "Extract PDF Plugin" });
contentEl.createEl("p", { text: "Extracting " + this.fileName });
};
ProgressModal.prototype.onClose = function () {
var contentEl = this.contentEl;
contentEl.empty();
};
return ProgressModal;
}(obsidian.Modal));
module.exports = ExtractPDFPlugin;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbm9kZV9tb2R1bGVzL3BkZmpzLWRpc3QvYnVpbGQvcGRmLmpzIiwibm9kZV9tb2R1bGVzL3BkZjJtZC9saWIvdXRpbC9zdHJpbmctZnVuY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL3BkZjJtZC9saWIvdXRpbC9wYWdlLW51bWJlci1mdW5jdGlvbnMuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvUGFnZUl0ZW0uanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvVGV4dEl0ZW0uanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvUGFnZS5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL3V0aWwvcGRmLmpzIiwibm9kZV9tb2R1bGVzL3BkZjJtZC9saWIvbW9kZWxzL3RyYW5zZm9ybWF0aW9ucy9UcmFuc2Zvcm1hdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL21vZGVscy9Bbm5vdGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3BkZjJtZC9saWIvbW9kZWxzL3RyYW5zZm9ybWF0aW9ucy9Ub1RleHRJdGVtVHJhbnNmb3JtYXRpb24uanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvUGFyc2VSZXN1bHQuanMiLCJub2RlX21vZHVsZXMvZW51bWlmeS9saWIvZW51bWlmeS5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL21vZGVscy9tYXJrZG93bi9Xb3JkRm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL3BkZjJtZC9saWIvbW9kZWxzL3RyYW5zZm9ybWF0aW9ucy90ZXh0LWl0ZW0vQ2FsY3VsYXRlR2xvYmFsU3RhdHMuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvV29yZC5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL21vZGVscy9MaW5lSXRlbS5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvVG9MaW5lSXRlbVRyYW5zZm9ybWF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3BkZjJtZC9saWIvdXRpbC9wYWdlLWl0ZW0tZnVuY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL3BkZjJtZC9saWIvbW9kZWxzL1RleHRJdGVtTGluZUdyb3VwZXIuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvbWFya2Rvd24vV29yZFR5cGUuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvU3Rhc2hpbmdTdHJlYW0uanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvUGFyc2VkRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvTGluZUNvbnZlcnRlci5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL21vZGVscy9tYXJrZG93bi9CbG9ja1R5cGUuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL2xpbmUtaXRlbS9Db21wYWN0TGluZXMuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL2xpbmUtaXRlbS9SZW1vdmVSZXBldGl0aXZlRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL2xpbmUtaXRlbS9WZXJ0aWNhbFRvSG9yaXpvbnRhbC5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL21vZGVscy9IZWFkbGluZUZpbmRlci5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvbGluZS1pdGVtL0RldGVjdFRPQy5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvbGluZS1pdGVtL0RldGVjdExpc3RJdGVtcy5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvbGluZS1pdGVtL0RldGVjdEhlYWRlcnMuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvTGluZUl0ZW1CbG9jay5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbGliL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvVG9MaW5lSXRlbUJsb2NrVHJhbnNmb3JtYXRpb24uanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL2xpbmUtaXRlbS1ibG9jay9HYXRoZXJCbG9ja3MuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL2xpbmUtaXRlbS1ibG9jay9EZXRlY3RDb2RlUXVvdGVCbG9ja3MuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL2xpbmUtaXRlbS1ibG9jay9EZXRlY3RMaXN0TGV2ZWxzLmpzIiwibm9kZV9tb2R1bGVzL3BkZjJtZC9saWIvbW9kZWxzL3RyYW5zZm9ybWF0aW9ucy9Ub1RleHRCbG9ja3MuanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL1RvTWFya2Rvd24uanMiLCJub2RlX21vZHVsZXMvcGRmMm1kL2xpYi91dGlsL3RyYW5zZm9ybWF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbm9kZV9tb2R1bGVzL3BkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlci5qcyIsIm5vZGVfbW9kdWxlcy9wZGYybWQvbm9kZV9tb2R1bGVzL3BkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlci5lbnRyeS5qcyIsInNyYy9FeHRyYWN0UERGU2V0dGluZ3MudHMiLCJzcmMvRXh0cmFjdFBERlNldHRpbmdzVGFiLnRzIiwic3JjL21haW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY3JlYXRlQmluZGluZyhvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuIiwiLyoqXG4gKiBAbGljc3RhcnQgVGhlIGZvbGxvd2luZyBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAyMCBNb3ppbGxhIEZvdW5kYXRpb25cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogQGxpY2VuZCBUaGUgYWJvdmUgaXMgdGhlIGVudGlyZSBsaWNlbnNlIG5vdGljZSBmb3IgdGhlXG4gKiBKYXZhc2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlXG4gKi9cblxuKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiXSA9IHJvb3QucGRmanNMaWIgPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd19wZGZqc19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd19wZGZqc19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd19wZGZqc19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dfcGRmanNfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd19wZGZqc19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd19wZGZqc19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd19wZGZqc19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd19wZGZqc19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd19wZGZqc19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd19wZGZqc19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dfcGRmanNfcmVxdWlyZV9fKF9fd19wZGZqc19yZXF1aXJlX18ucyA9IDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWRkTGlua0F0dHJpYnV0ZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuYWRkTGlua0F0dHJpYnV0ZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0RmlsZW5hbWVGcm9tVXJsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLmdldEZpbGVuYW1lRnJvbVVybDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMaW5rVGFyZ2V0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLkxpbmtUYXJnZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9hZFNjcmlwdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGlzcGxheV91dGlscy5sb2FkU2NyaXB0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBERkRhdGVTdHJpbmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuUERGRGF0ZVN0cmluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJ1aWxkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcGkuYnVpbGQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0RG9jdW1lbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2FwaS5nZXREb2N1bWVudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb29wYmFja1BvcnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2FwaS5Mb29wYmFja1BvcnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUERGRGF0YVJhbmdlVHJhbnNwb3J0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcGkuUERGRGF0YVJhbmdlVHJhbnNwb3J0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBERldvcmtlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYXBpLlBERldvcmtlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2ZXJzaW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcGkudmVyc2lvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDTWFwQ29tcHJlc3Npb25UeXBlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT2JqZWN0VVJMXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLmNyZWF0ZU9iamVjdFVSTDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYWxpZEFic29sdXRlVXJsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW52YWxpZFBERkV4Y2VwdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1pc3NpbmdQREZFeGNlcHRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPUFNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuT1BTO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhc3N3b3JkUmVzcG9uc2VzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlBhc3N3b3JkUmVzcG9uc2VzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBlcm1pc3Npb25GbGFnXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlBlcm1pc3Npb25GbGFnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlbW92ZU51bGxDaGFyYWN0ZXJzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLnJlbW92ZU51bGxDaGFyYWN0ZXJzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNoYWRvd1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5zaGFkb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVTlNVUFBPUlRFRF9GRUFUVVJFU1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVdGlsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlV0aWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmVyYm9zaXR5TGV2ZWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuVmVyYm9zaXR5TGV2ZWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQW5ub3RhdGlvbkxheWVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hbm5vdGF0aW9uX2xheWVyLkFubm90YXRpb25MYXllcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcGlDb21wYXRpYmlsaXR5UGFyYW1zXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcGlfY29tcGF0aWJpbGl0eS5hcGlDb21wYXRpYmlsaXR5UGFyYW1zO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdsb2JhbFdvcmtlck9wdGlvbnNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVuZGVyVGV4dExheWVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90ZXh0X2xheWVyLnJlbmRlclRleHRMYXllcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTVkdHcmFwaGljc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfc3ZnLlNWR0dyYXBoaWNzO1xuICB9XG59KTtcblxudmFyIF9kaXNwbGF5X3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxKTtcblxudmFyIF9hcGkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2Fubm90YXRpb25fbGF5ZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE2KTtcblxudmFyIF9hcGlfY29tcGF0aWJpbGl0eSA9IF9fd19wZGZqc19yZXF1aXJlX18oNyk7XG5cbnZhciBfd29ya2VyX29wdGlvbnMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxudmFyIF90ZXh0X2xheWVyID0gX193X3BkZmpzX3JlcXVpcmVfXygxNyk7XG5cbnZhciBfc3ZnID0gX193X3BkZmpzX3JlcXVpcmVfXygxOCk7XG5cbmNvbnN0IHBkZmpzVmVyc2lvbiA9ICcyLjUuMjA3JztcbmNvbnN0IHBkZmpzQnVpbGQgPSAnMDk3NGQ2MDUnO1xue1xuICBjb25zdCB7XG4gICAgaXNOb2RlSlNcbiAgfSA9IF9fd19wZGZqc19yZXF1aXJlX18oNCk7XG5cbiAgaWYgKGlzTm9kZUpTKSB7XG4gICAgY29uc3QgUERGTm9kZVN0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTkpLlBERk5vZGVTdHJlYW07XG5cbiAgICAoMCwgX2FwaS5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSkocGFyYW1zID0+IHtcbiAgICAgIHJldHVybiBuZXcgUERGTm9kZVN0cmVhbShwYXJhbXMpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IFBERk5ldHdvcmtTdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIyKS5QREZOZXR3b3JrU3RyZWFtO1xuXG4gICAgbGV0IFBERkZldGNoU3RyZWFtO1xuXG4gICAgaWYgKCgwLCBfZGlzcGxheV91dGlscy5pc0ZldGNoU3VwcG9ydGVkKSgpKSB7XG4gICAgICBQREZGZXRjaFN0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjMpLlBERkZldGNoU3RyZWFtO1xuICAgIH1cblxuICAgICgwLCBfYXBpLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KShwYXJhbXMgPT4ge1xuICAgICAgaWYgKFBERkZldGNoU3RyZWFtICYmICgwLCBfZGlzcGxheV91dGlscy5pc1ZhbGlkRmV0Y2hVcmwpKHBhcmFtcy51cmwpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUERGRmV0Y2hTdHJlYW0ocGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQREZOZXR3b3JrU3RyZWFtKHBhcmFtcyk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFkZExpbmtBdHRyaWJ1dGVzID0gYWRkTGlua0F0dHJpYnV0ZXM7XG5leHBvcnRzLmdldEZpbGVuYW1lRnJvbVVybCA9IGdldEZpbGVuYW1lRnJvbVVybDtcbmV4cG9ydHMuaXNGZXRjaFN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQ7XG5leHBvcnRzLmlzVmFsaWRGZXRjaFVybCA9IGlzVmFsaWRGZXRjaFVybDtcbmV4cG9ydHMubG9hZFNjcmlwdCA9IGxvYWRTY3JpcHQ7XG5leHBvcnRzLmRlcHJlY2F0ZWQgPSBkZXByZWNhdGVkO1xuZXhwb3J0cy5QREZEYXRlU3RyaW5nID0gZXhwb3J0cy5TdGF0VGltZXIgPSBleHBvcnRzLkRPTVNWR0ZhY3RvcnkgPSBleHBvcnRzLkRPTUNNYXBSZWFkZXJGYWN0b3J5ID0gZXhwb3J0cy5ET01DYW52YXNGYWN0b3J5ID0gZXhwb3J0cy5ERUZBVUxUX0xJTktfUkVMID0gZXhwb3J0cy5MaW5rVGFyZ2V0ID0gZXhwb3J0cy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24gPSBleHBvcnRzLlBhZ2VWaWV3cG9ydCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgREVGQVVMVF9MSU5LX1JFTCA9IFwibm9vcGVuZXIgbm9yZWZlcnJlciBub2ZvbGxvd1wiO1xuZXhwb3J0cy5ERUZBVUxUX0xJTktfUkVMID0gREVGQVVMVF9MSU5LX1JFTDtcbmNvbnN0IFNWR19OUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcblxuY2xhc3MgRE9NQ2FudmFzRmFjdG9yeSB7XG4gIGNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2FudmFzIHNpemVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHJldHVybiB7XG4gICAgICBjYW52YXMsXG4gICAgICBjb250ZXh0XG4gICAgfTtcbiAgfVxuXG4gIHJlc2V0KGNhbnZhc0FuZENvbnRleHQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBpZiAoIWNhbnZhc0FuZENvbnRleHQuY2FudmFzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW52YXMgaXMgbm90IHNwZWNpZmllZFwiKTtcbiAgICB9XG5cbiAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjYW52YXMgc2l6ZVwiKTtcbiAgICB9XG5cbiAgICBjYW52YXNBbmRDb250ZXh0LmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGRlc3Ryb3koY2FudmFzQW5kQ29udGV4dCkge1xuICAgIGlmICghY2FudmFzQW5kQ29udGV4dC5jYW52YXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbnZhcyBpcyBub3Qgc3BlY2lmaWVkXCIpO1xuICAgIH1cblxuICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzLndpZHRoID0gMDtcbiAgICBjYW52YXNBbmRDb250ZXh0LmNhbnZhcy5oZWlnaHQgPSAwO1xuICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzID0gbnVsbDtcbiAgICBjYW52YXNBbmRDb250ZXh0LmNvbnRleHQgPSBudWxsO1xuICB9XG5cbn1cblxuZXhwb3J0cy5ET01DYW52YXNGYWN0b3J5ID0gRE9NQ2FudmFzRmFjdG9yeTtcblxuY2xhc3MgRE9NQ01hcFJlYWRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgYmFzZVVybCA9IG51bGwsXG4gICAgaXNDb21wcmVzc2VkID0gZmFsc2VcbiAgfSkge1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5pc0NvbXByZXNzZWQgPSBpc0NvbXByZXNzZWQ7XG4gIH1cblxuICBhc3luYyBmZXRjaCh7XG4gICAgbmFtZVxuICB9KSB7XG4gICAgaWYgKCF0aGlzLmJhc2VVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIENNYXAgXCJiYXNlVXJsXCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCAnICsgJ3RoZSBcImNNYXBVcmxcIiBhbmQgXCJjTWFwUGFja2VkXCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpO1xuICAgIH1cblxuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ01hcCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJhc2VVcmwgKyBuYW1lICsgKHRoaXMuaXNDb21wcmVzc2VkID8gXCIuYmNtYXBcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGNvbXByZXNzaW9uVHlwZSA9IHRoaXMuaXNDb21wcmVzc2VkID8gX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkgOiBfdXRpbC5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkU7XG5cbiAgICBpZiAoaXNGZXRjaFN1cHBvcnRlZCgpICYmIGlzVmFsaWRGZXRjaFVybCh1cmwsIGRvY3VtZW50LmJhc2VVUkkpKSB7XG4gICAgICByZXR1cm4gZmV0Y2godXJsKS50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjTWFwRGF0YTtcblxuICAgICAgICBpZiAodGhpcy5pc0NvbXByZXNzZWQpIHtcbiAgICAgICAgICBjTWFwRGF0YSA9IG5ldyBVaW50OEFycmF5KGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNNYXBEYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGF3YWl0IHJlc3BvbnNlLnRleHQoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNNYXBEYXRhLFxuICAgICAgICAgIGNvbXByZXNzaW9uVHlwZVxuICAgICAgICB9O1xuICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCAke3RoaXMuaXNDb21wcmVzc2VkID8gXCJiaW5hcnkgXCIgOiBcIlwifWAgKyBgQ01hcCBhdDogJHt1cmx9YCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgcmVxdWVzdC5vcGVuKFwiR0VUXCIsIHVybCwgdHJ1ZSk7XG5cbiAgICAgIGlmICh0aGlzLmlzQ29tcHJlc3NlZCkge1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcbiAgICAgIH1cblxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgIT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCB8fCByZXF1ZXN0LnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgIGxldCBjTWFwRGF0YTtcblxuICAgICAgICAgIGlmICh0aGlzLmlzQ29tcHJlc3NlZCAmJiByZXF1ZXN0LnJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjTWFwRGF0YSA9IG5ldyBVaW50OEFycmF5KHJlcXVlc3QucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNDb21wcmVzc2VkICYmIHJlcXVlc3QucmVzcG9uc2VUZXh0KSB7XG4gICAgICAgICAgICBjTWFwRGF0YSA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShyZXF1ZXN0LnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNNYXBEYXRhKSB7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgY01hcERhdGEsXG4gICAgICAgICAgICAgIGNvbXByZXNzaW9uVHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihyZXF1ZXN0LnN0YXR1c1RleHQpKTtcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3Quc2VuZChudWxsKTtcbiAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCAke3RoaXMuaXNDb21wcmVzc2VkID8gXCJiaW5hcnkgXCIgOiBcIlwifWAgKyBgQ01hcCBhdDogJHt1cmx9YCk7XG4gICAgfSk7XG4gIH1cblxufVxuXG5leHBvcnRzLkRPTUNNYXBSZWFkZXJGYWN0b3J5ID0gRE9NQ01hcFJlYWRlckZhY3Rvcnk7XG5cbmNsYXNzIERPTVNWR0ZhY3Rvcnkge1xuICBjcmVhdGUod2lkdGgsIGhlaWdodCkge1xuICAgICgwLCBfdXRpbC5hc3NlcnQpKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwLCBcIkludmFsaWQgU1ZHIGRpbWVuc2lvbnNcIik7XG4gICAgY29uc3Qgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJzdmc6c3ZnXCIpO1xuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2ZXJzaW9uXCIsIFwiMS4xXCIpO1xuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB3aWR0aCArIFwicHhcIik7XG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBoZWlnaHQgKyBcInB4XCIpO1xuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwibm9uZVwiKTtcbiAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBcIjAgMCBcIiArIHdpZHRoICsgXCIgXCIgKyBoZWlnaHQpO1xuICAgIHJldHVybiBzdmc7XG4gIH1cblxuICBjcmVhdGVFbGVtZW50KHR5cGUpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiwgXCJJbnZhbGlkIFNWRyBlbGVtZW50IHR5cGVcIik7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIHR5cGUpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5ET01TVkdGYWN0b3J5ID0gRE9NU1ZHRmFjdG9yeTtcblxuY2xhc3MgUGFnZVZpZXdwb3J0IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHZpZXdCb3gsXG4gICAgc2NhbGUsXG4gICAgcm90YXRpb24sXG4gICAgb2Zmc2V0WCA9IDAsXG4gICAgb2Zmc2V0WSA9IDAsXG4gICAgZG9udEZsaXAgPSBmYWxzZVxuICB9KSB7XG4gICAgdGhpcy52aWV3Qm94ID0gdmlld0JveDtcbiAgICB0aGlzLnNjYWxlID0gc2NhbGU7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uO1xuICAgIHRoaXMub2Zmc2V0WCA9IG9mZnNldFg7XG4gICAgdGhpcy5vZmZzZXRZID0gb2Zmc2V0WTtcbiAgICBjb25zdCBjZW50ZXJYID0gKHZpZXdCb3hbMl0gKyB2aWV3Qm94WzBdKSAvIDI7XG4gICAgY29uc3QgY2VudGVyWSA9ICh2aWV3Qm94WzNdICsgdmlld0JveFsxXSkgLyAyO1xuICAgIGxldCByb3RhdGVBLCByb3RhdGVCLCByb3RhdGVDLCByb3RhdGVEO1xuICAgIHJvdGF0aW9uID0gcm90YXRpb24gJSAzNjA7XG4gICAgcm90YXRpb24gPSByb3RhdGlvbiA8IDAgPyByb3RhdGlvbiArIDM2MCA6IHJvdGF0aW9uO1xuXG4gICAgc3dpdGNoIChyb3RhdGlvbikge1xuICAgICAgY2FzZSAxODA6XG4gICAgICAgIHJvdGF0ZUEgPSAtMTtcbiAgICAgICAgcm90YXRlQiA9IDA7XG4gICAgICAgIHJvdGF0ZUMgPSAwO1xuICAgICAgICByb3RhdGVEID0gMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTA6XG4gICAgICAgIHJvdGF0ZUEgPSAwO1xuICAgICAgICByb3RhdGVCID0gMTtcbiAgICAgICAgcm90YXRlQyA9IDE7XG4gICAgICAgIHJvdGF0ZUQgPSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyNzA6XG4gICAgICAgIHJvdGF0ZUEgPSAwO1xuICAgICAgICByb3RhdGVCID0gLTE7XG4gICAgICAgIHJvdGF0ZUMgPSAtMTtcbiAgICAgICAgcm90YXRlRCA9IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJvdGF0ZUEgPSAxO1xuICAgICAgICByb3RhdGVCID0gMDtcbiAgICAgICAgcm90YXRlQyA9IDA7XG4gICAgICAgIHJvdGF0ZUQgPSAtMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhZ2VWaWV3cG9ydDogSW52YWxpZCByb3RhdGlvbiwgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDkwIGRlZ3JlZXMuXCIpO1xuICAgIH1cblxuICAgIGlmIChkb250RmxpcCkge1xuICAgICAgcm90YXRlQyA9IC1yb3RhdGVDO1xuICAgICAgcm90YXRlRCA9IC1yb3RhdGVEO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXRDYW52YXNYLCBvZmZzZXRDYW52YXNZO1xuICAgIGxldCB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHJvdGF0ZUEgPT09IDApIHtcbiAgICAgIG9mZnNldENhbnZhc1ggPSBNYXRoLmFicyhjZW50ZXJZIC0gdmlld0JveFsxXSkgKiBzY2FsZSArIG9mZnNldFg7XG4gICAgICBvZmZzZXRDYW52YXNZID0gTWF0aC5hYnMoY2VudGVyWCAtIHZpZXdCb3hbMF0pICogc2NhbGUgKyBvZmZzZXRZO1xuICAgICAgd2lkdGggPSBNYXRoLmFicyh2aWV3Qm94WzNdIC0gdmlld0JveFsxXSkgKiBzY2FsZTtcbiAgICAgIGhlaWdodCA9IE1hdGguYWJzKHZpZXdCb3hbMl0gLSB2aWV3Qm94WzBdKSAqIHNjYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXRDYW52YXNYID0gTWF0aC5hYnMoY2VudGVyWCAtIHZpZXdCb3hbMF0pICogc2NhbGUgKyBvZmZzZXRYO1xuICAgICAgb2Zmc2V0Q2FudmFzWSA9IE1hdGguYWJzKGNlbnRlclkgLSB2aWV3Qm94WzFdKSAqIHNjYWxlICsgb2Zmc2V0WTtcbiAgICAgIHdpZHRoID0gTWF0aC5hYnModmlld0JveFsyXSAtIHZpZXdCb3hbMF0pICogc2NhbGU7XG4gICAgICBoZWlnaHQgPSBNYXRoLmFicyh2aWV3Qm94WzNdIC0gdmlld0JveFsxXSkgKiBzY2FsZTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IFtyb3RhdGVBICogc2NhbGUsIHJvdGF0ZUIgKiBzY2FsZSwgcm90YXRlQyAqIHNjYWxlLCByb3RhdGVEICogc2NhbGUsIG9mZnNldENhbnZhc1ggLSByb3RhdGVBICogc2NhbGUgKiBjZW50ZXJYIC0gcm90YXRlQyAqIHNjYWxlICogY2VudGVyWSwgb2Zmc2V0Q2FudmFzWSAtIHJvdGF0ZUIgKiBzY2FsZSAqIGNlbnRlclggLSByb3RhdGVEICogc2NhbGUgKiBjZW50ZXJZXTtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBjbG9uZSh7XG4gICAgc2NhbGUgPSB0aGlzLnNjYWxlLFxuICAgIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbixcbiAgICBvZmZzZXRYID0gdGhpcy5vZmZzZXRYLFxuICAgIG9mZnNldFkgPSB0aGlzLm9mZnNldFksXG4gICAgZG9udEZsaXAgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBhZ2VWaWV3cG9ydCh7XG4gICAgICB2aWV3Qm94OiB0aGlzLnZpZXdCb3guc2xpY2UoKSxcbiAgICAgIHNjYWxlLFxuICAgICAgcm90YXRpb24sXG4gICAgICBvZmZzZXRYLFxuICAgICAgb2Zmc2V0WSxcbiAgICAgIGRvbnRGbGlwXG4gICAgfSk7XG4gIH1cblxuICBjb252ZXJ0VG9WaWV3cG9ydFBvaW50KHgsIHkpIHtcbiAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbeCwgeV0sIHRoaXMudHJhbnNmb3JtKTtcbiAgfVxuXG4gIGNvbnZlcnRUb1ZpZXdwb3J0UmVjdGFuZ2xlKHJlY3QpIHtcbiAgICBjb25zdCB0b3BMZWZ0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbcmVjdFswXSwgcmVjdFsxXV0sIHRoaXMudHJhbnNmb3JtKTtcblxuICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbcmVjdFsyXSwgcmVjdFszXV0sIHRoaXMudHJhbnNmb3JtKTtcblxuICAgIHJldHVybiBbdG9wTGVmdFswXSwgdG9wTGVmdFsxXSwgYm90dG9tUmlnaHRbMF0sIGJvdHRvbVJpZ2h0WzFdXTtcbiAgfVxuXG4gIGNvbnZlcnRUb1BkZlBvaW50KHgsIHkpIHtcbiAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseUludmVyc2VUcmFuc2Zvcm0oW3gsIHldLCB0aGlzLnRyYW5zZm9ybSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlBhZ2VWaWV3cG9ydCA9IFBhZ2VWaWV3cG9ydDtcblxuY2xhc3MgUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgdHlwZSkge1xuICAgIHN1cGVyKG1zZyk7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uID0gUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO1xuY29uc3QgTGlua1RhcmdldCA9IHtcbiAgTk9ORTogMCxcbiAgU0VMRjogMSxcbiAgQkxBTks6IDIsXG4gIFBBUkVOVDogMyxcbiAgVE9QOiA0XG59O1xuZXhwb3J0cy5MaW5rVGFyZ2V0ID0gTGlua1RhcmdldDtcblxuZnVuY3Rpb24gYWRkTGlua0F0dHJpYnV0ZXMobGluaywge1xuICB1cmwsXG4gIHRhcmdldCxcbiAgcmVsLFxuICBlbmFibGVkID0gdHJ1ZVxufSA9IHt9KSB7XG4gICgwLCBfdXRpbC5hc3NlcnQpKHVybCAmJiB0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiLCAnYWRkTGlua0F0dHJpYnV0ZXM6IEEgdmFsaWQgXCJ1cmxcIiBwYXJhbWV0ZXIgbXVzdCBwcm92aWRlZC4nKTtcbiAgY29uc3QgdXJsTnVsbFJlbW92ZWQgPSAoMCwgX3V0aWwucmVtb3ZlTnVsbENoYXJhY3RlcnMpKHVybCk7XG5cbiAgaWYgKGVuYWJsZWQpIHtcbiAgICBsaW5rLmhyZWYgPSBsaW5rLnRpdGxlID0gdXJsTnVsbFJlbW92ZWQ7XG4gIH0gZWxzZSB7XG4gICAgbGluay5ocmVmID0gXCJcIjtcbiAgICBsaW5rLnRpdGxlID0gYERpc2FibGVkOiAke3VybE51bGxSZW1vdmVkfWA7XG5cbiAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIGxldCB0YXJnZXRTdHIgPSBcIlwiO1xuXG4gIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgY2FzZSBMaW5rVGFyZ2V0Lk5PTkU6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTGlua1RhcmdldC5TRUxGOlxuICAgICAgdGFyZ2V0U3RyID0gXCJfc2VsZlwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExpbmtUYXJnZXQuQkxBTks6XG4gICAgICB0YXJnZXRTdHIgPSBcIl9ibGFua1wiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExpbmtUYXJnZXQuUEFSRU5UOlxuICAgICAgdGFyZ2V0U3RyID0gXCJfcGFyZW50XCI7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTGlua1RhcmdldC5UT1A6XG4gICAgICB0YXJnZXRTdHIgPSBcIl90b3BcIjtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgbGluay50YXJnZXQgPSB0YXJnZXRTdHI7XG4gIGxpbmsucmVsID0gdHlwZW9mIHJlbCA9PT0gXCJzdHJpbmdcIiA/IHJlbCA6IERFRkFVTFRfTElOS19SRUw7XG59XG5cbmZ1bmN0aW9uIGdldEZpbGVuYW1lRnJvbVVybCh1cmwpIHtcbiAgY29uc3QgYW5jaG9yID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuICBjb25zdCBxdWVyeSA9IHVybC5pbmRleE9mKFwiP1wiKTtcbiAgY29uc3QgZW5kID0gTWF0aC5taW4oYW5jaG9yID4gMCA/IGFuY2hvciA6IHVybC5sZW5ndGgsIHF1ZXJ5ID4gMCA/IHF1ZXJ5IDogdXJsLmxlbmd0aCk7XG4gIHJldHVybiB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZihcIi9cIiwgZW5kKSArIDEsIGVuZCk7XG59XG5cbmNsYXNzIFN0YXRUaW1lciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3RhcnRlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy50aW1lcyA9IFtdO1xuICB9XG5cbiAgdGltZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5zdGFydGVkKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFRpbWVyIGlzIGFscmVhZHkgcnVubmluZyBmb3IgJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZFtuYW1lXSA9IERhdGUubm93KCk7XG4gIH1cblxuICB0aW1lRW5kKG5hbWUpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMuc3RhcnRlZCkpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgVGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgZm9yICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVzLnB1c2goe1xuICAgICAgbmFtZSxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0ZWRbbmFtZV0sXG4gICAgICBlbmQ6IERhdGUubm93KClcbiAgICB9KTtcbiAgICBkZWxldGUgdGhpcy5zdGFydGVkW25hbWVdO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgY29uc3Qgb3V0QnVmID0gW107XG4gICAgbGV0IGxvbmdlc3QgPSAwO1xuXG4gICAgZm9yIChjb25zdCB0aW1lIG9mIHRoaXMudGltZXMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aW1lLm5hbWU7XG5cbiAgICAgIGlmIChuYW1lLmxlbmd0aCA+IGxvbmdlc3QpIHtcbiAgICAgICAgbG9uZ2VzdCA9IG5hbWUubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGltZSBvZiB0aGlzLnRpbWVzKSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IHRpbWUuZW5kIC0gdGltZS5zdGFydDtcbiAgICAgIG91dEJ1Zi5wdXNoKGAke3RpbWUubmFtZS5wYWRFbmQobG9uZ2VzdCl9ICR7ZHVyYXRpb259bXNcXG5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0QnVmLmpvaW4oXCJcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLlN0YXRUaW1lciA9IFN0YXRUaW1lcjtcblxuZnVuY3Rpb24gaXNGZXRjaFN1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIHR5cGVvZiBmZXRjaCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgUmVzcG9uc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgXCJib2R5XCIgaW4gUmVzcG9uc2UucHJvdG90eXBlICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gXCJ1bmRlZmluZWRcIjtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEZldGNoVXJsKHVybCwgYmFzZVVybCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3RvY29sXG4gICAgfSA9IGJhc2VVcmwgPyBuZXcgVVJMKHVybCwgYmFzZVVybCkgOiBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIHByb3RvY29sID09PSBcImh0dHA6XCIgfHwgcHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRTY3JpcHQoc3JjKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlO1xuXG4gICAgc2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBDYW5ub3QgbG9hZCBzY3JpcHQgYXQ6ICR7c2NyaXB0LnNyY31gKSk7XG4gICAgfTtcblxuICAgIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZWQoZGV0YWlscykge1xuICBjb25zb2xlLmxvZyhcIkRlcHJlY2F0ZWQgQVBJIHVzYWdlOiBcIiArIGRldGFpbHMpO1xufVxuXG5sZXQgcGRmRGF0ZVN0cmluZ1JlZ2V4O1xuXG5jbGFzcyBQREZEYXRlU3RyaW5nIHtcbiAgc3RhdGljIHRvRGF0ZU9iamVjdChpbnB1dCkge1xuICAgIGlmICghaW5wdXQgfHwgISgwLCBfdXRpbC5pc1N0cmluZykoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXBkZkRhdGVTdHJpbmdSZWdleCkge1xuICAgICAgcGRmRGF0ZVN0cmluZ1JlZ2V4ID0gbmV3IFJlZ0V4cChcIl5EOlwiICsgXCIoXFxcXGR7NH0pXCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIihbWnwrfC1dKT9cIiArIFwiKFxcXFxkezJ9KT9cIiArIFwiJz9cIiArIFwiKFxcXFxkezJ9KT9cIiArIFwiJz9cIik7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlcyA9IHBkZkRhdGVTdHJpbmdSZWdleC5leGVjKGlucHV0KTtcblxuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgeWVhciA9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKTtcbiAgICBsZXQgbW9udGggPSBwYXJzZUludChtYXRjaGVzWzJdLCAxMCk7XG4gICAgbW9udGggPSBtb250aCA+PSAxICYmIG1vbnRoIDw9IDEyID8gbW9udGggLSAxIDogMDtcbiAgICBsZXQgZGF5ID0gcGFyc2VJbnQobWF0Y2hlc1szXSwgMTApO1xuICAgIGRheSA9IGRheSA+PSAxICYmIGRheSA8PSAzMSA/IGRheSA6IDE7XG4gICAgbGV0IGhvdXIgPSBwYXJzZUludChtYXRjaGVzWzRdLCAxMCk7XG4gICAgaG91ciA9IGhvdXIgPj0gMCAmJiBob3VyIDw9IDIzID8gaG91ciA6IDA7XG4gICAgbGV0IG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKTtcbiAgICBtaW51dGUgPSBtaW51dGUgPj0gMCAmJiBtaW51dGUgPD0gNTkgPyBtaW51dGUgOiAwO1xuICAgIGxldCBzZWNvbmQgPSBwYXJzZUludChtYXRjaGVzWzZdLCAxMCk7XG4gICAgc2Vjb25kID0gc2Vjb25kID49IDAgJiYgc2Vjb25kIDw9IDU5ID8gc2Vjb25kIDogMDtcbiAgICBjb25zdCB1bml2ZXJzYWxUaW1lUmVsYXRpb24gPSBtYXRjaGVzWzddIHx8IFwiWlwiO1xuICAgIGxldCBvZmZzZXRIb3VyID0gcGFyc2VJbnQobWF0Y2hlc1s4XSwgMTApO1xuICAgIG9mZnNldEhvdXIgPSBvZmZzZXRIb3VyID49IDAgJiYgb2Zmc2V0SG91ciA8PSAyMyA/IG9mZnNldEhvdXIgOiAwO1xuICAgIGxldCBvZmZzZXRNaW51dGUgPSBwYXJzZUludChtYXRjaGVzWzldLCAxMCkgfHwgMDtcbiAgICBvZmZzZXRNaW51dGUgPSBvZmZzZXRNaW51dGUgPj0gMCAmJiBvZmZzZXRNaW51dGUgPD0gNTkgPyBvZmZzZXRNaW51dGUgOiAwO1xuXG4gICAgaWYgKHVuaXZlcnNhbFRpbWVSZWxhdGlvbiA9PT0gXCItXCIpIHtcbiAgICAgIGhvdXIgKz0gb2Zmc2V0SG91cjtcbiAgICAgIG1pbnV0ZSArPSBvZmZzZXRNaW51dGU7XG4gICAgfSBlbHNlIGlmICh1bml2ZXJzYWxUaW1lUmVsYXRpb24gPT09IFwiK1wiKSB7XG4gICAgICBob3VyIC09IG9mZnNldEhvdXI7XG4gICAgICBtaW51dGUgLT0gb2Zmc2V0TWludXRlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEYXRlU3RyaW5nID0gUERGRGF0ZVN0cmluZztcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFycmF5Qnl0ZUxlbmd0aCA9IGFycmF5Qnl0ZUxlbmd0aDtcbmV4cG9ydHMuYXJyYXlzVG9CeXRlcyA9IGFycmF5c1RvQnl0ZXM7XG5leHBvcnRzLmFzc2VydCA9IGFzc2VydDtcbmV4cG9ydHMuYnl0ZXNUb1N0cmluZyA9IGJ5dGVzVG9TdHJpbmc7XG5leHBvcnRzLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5ID0gY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk7XG5leHBvcnRzLmdldFZlcmJvc2l0eUxldmVsID0gZ2V0VmVyYm9zaXR5TGV2ZWw7XG5leHBvcnRzLmluZm8gPSBpbmZvO1xuZXhwb3J0cy5pc0FycmF5QnVmZmVyID0gaXNBcnJheUJ1ZmZlcjtcbmV4cG9ydHMuaXNBcnJheUVxdWFsID0gaXNBcnJheUVxdWFsO1xuZXhwb3J0cy5pc0Jvb2wgPSBpc0Jvb2w7XG5leHBvcnRzLmlzRW1wdHlPYmogPSBpc0VtcHR5T2JqO1xuZXhwb3J0cy5pc051bSA9IGlzTnVtO1xuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuZXhwb3J0cy5pc1NhbWVPcmlnaW4gPSBpc1NhbWVPcmlnaW47XG5leHBvcnRzLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwgPSBjcmVhdGVWYWxpZEFic29sdXRlVXJsO1xuZXhwb3J0cy5yZW1vdmVOdWxsQ2hhcmFjdGVycyA9IHJlbW92ZU51bGxDaGFyYWN0ZXJzO1xuZXhwb3J0cy5zZXRWZXJib3NpdHlMZXZlbCA9IHNldFZlcmJvc2l0eUxldmVsO1xuZXhwb3J0cy5zaGFkb3cgPSBzaGFkb3c7XG5leHBvcnRzLnN0cmluZzMyID0gc3RyaW5nMzI7XG5leHBvcnRzLnN0cmluZ1RvQnl0ZXMgPSBzdHJpbmdUb0J5dGVzO1xuZXhwb3J0cy5zdHJpbmdUb1BERlN0cmluZyA9IHN0cmluZ1RvUERGU3RyaW5nO1xuZXhwb3J0cy5zdHJpbmdUb1VURjhTdHJpbmcgPSBzdHJpbmdUb1VURjhTdHJpbmc7XG5leHBvcnRzLnV0ZjhTdHJpbmdUb1N0cmluZyA9IHV0ZjhTdHJpbmdUb1N0cmluZztcbmV4cG9ydHMud2FybiA9IHdhcm47XG5leHBvcnRzLnVucmVhY2hhYmxlID0gdW5yZWFjaGFibGU7XG5leHBvcnRzLklzRXZhbFN1cHBvcnRlZENhY2hlZCA9IGV4cG9ydHMuSXNMaXR0bGVFbmRpYW5DYWNoZWQgPSBleHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGV4cG9ydHMuRm9ybWF0RXJyb3IgPSBleHBvcnRzLlV0aWwgPSBleHBvcnRzLlVua25vd25FcnJvckV4Y2VwdGlvbiA9IGV4cG9ydHMuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gZXhwb3J0cy5UZXh0UmVuZGVyaW5nTW9kZSA9IGV4cG9ydHMuU3RyZWFtVHlwZSA9IGV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBleHBvcnRzLlBhc3N3b3JkUmVzcG9uc2VzID0gZXhwb3J0cy5QYXNzd29yZEV4Y2VwdGlvbiA9IGV4cG9ydHMuTWlzc2luZ1BERkV4Y2VwdGlvbiA9IGV4cG9ydHMuSW52YWxpZFBERkV4Y2VwdGlvbiA9IGV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSBleHBvcnRzLkNNYXBDb21wcmVzc2lvblR5cGUgPSBleHBvcnRzLkltYWdlS2luZCA9IGV4cG9ydHMuRm9udFR5cGUgPSBleHBvcnRzLkFubm90YXRpb25UeXBlID0gZXhwb3J0cy5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGUgPSBleHBvcnRzLkFubm90YXRpb25SZXZpZXdTdGF0ZSA9IGV4cG9ydHMuQW5ub3RhdGlvblJlcGx5VHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IGV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBleHBvcnRzLlZlcmJvc2l0eUxldmVsID0gZXhwb3J0cy5PUFMgPSBleHBvcnRzLklERU5USVRZX01BVFJJWCA9IGV4cG9ydHMuRk9OVF9JREVOVElUWV9NQVRSSVggPSBleHBvcnRzLkJhc2VFeGNlcHRpb24gPSB2b2lkIDA7XG5cbl9fd19wZGZqc19yZXF1aXJlX18oMyk7XG5cbmNvbnN0IElERU5USVRZX01BVFJJWCA9IFsxLCAwLCAwLCAxLCAwLCAwXTtcbmV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gSURFTlRJVFlfTUFUUklYO1xuY29uc3QgRk9OVF9JREVOVElUWV9NQVRSSVggPSBbMC4wMDEsIDAsIDAsIDAuMDAxLCAwLCAwXTtcbmV4cG9ydHMuRk9OVF9JREVOVElUWV9NQVRSSVggPSBGT05UX0lERU5USVRZX01BVFJJWDtcbmNvbnN0IFBlcm1pc3Npb25GbGFnID0ge1xuICBQUklOVDogMHgwNCxcbiAgTU9ESUZZX0NPTlRFTlRTOiAweDA4LFxuICBDT1BZOiAweDEwLFxuICBNT0RJRllfQU5OT1RBVElPTlM6IDB4MjAsXG4gIEZJTExfSU5URVJBQ1RJVkVfRk9STVM6IDB4MTAwLFxuICBDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOiAweDIwMCxcbiAgQVNTRU1CTEU6IDB4NDAwLFxuICBQUklOVF9ISUdIX1FVQUxJVFk6IDB4ODAwXG59O1xuZXhwb3J0cy5QZXJtaXNzaW9uRmxhZyA9IFBlcm1pc3Npb25GbGFnO1xuY29uc3QgVGV4dFJlbmRlcmluZ01vZGUgPSB7XG4gIEZJTEw6IDAsXG4gIFNUUk9LRTogMSxcbiAgRklMTF9TVFJPS0U6IDIsXG4gIElOVklTSUJMRTogMyxcbiAgRklMTF9BRERfVE9fUEFUSDogNCxcbiAgU1RST0tFX0FERF9UT19QQVRIOiA1LFxuICBGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDogNixcbiAgQUREX1RPX1BBVEg6IDcsXG4gIEZJTExfU1RST0tFX01BU0s6IDMsXG4gIEFERF9UT19QQVRIX0ZMQUc6IDRcbn07XG5leHBvcnRzLlRleHRSZW5kZXJpbmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU7XG5jb25zdCBJbWFnZUtpbmQgPSB7XG4gIEdSQVlTQ0FMRV8xQlBQOiAxLFxuICBSR0JfMjRCUFA6IDIsXG4gIFJHQkFfMzJCUFA6IDNcbn07XG5leHBvcnRzLkltYWdlS2luZCA9IEltYWdlS2luZDtcbmNvbnN0IEFubm90YXRpb25UeXBlID0ge1xuICBURVhUOiAxLFxuICBMSU5LOiAyLFxuICBGUkVFVEVYVDogMyxcbiAgTElORTogNCxcbiAgU1FVQVJFOiA1LFxuICBDSVJDTEU6IDYsXG4gIFBPTFlHT046IDcsXG4gIFBPTFlMSU5FOiA4LFxuICBISUdITElHSFQ6IDksXG4gIFVOREVSTElORTogMTAsXG4gIFNRVUlHR0xZOiAxMSxcbiAgU1RSSUtFT1VUOiAxMixcbiAgU1RBTVA6IDEzLFxuICBDQVJFVDogMTQsXG4gIElOSzogMTUsXG4gIFBPUFVQOiAxNixcbiAgRklMRUFUVEFDSE1FTlQ6IDE3LFxuICBTT1VORDogMTgsXG4gIE1PVklFOiAxOSxcbiAgV0lER0VUOiAyMCxcbiAgU0NSRUVOOiAyMSxcbiAgUFJJTlRFUk1BUks6IDIyLFxuICBUUkFQTkVUOiAyMyxcbiAgV0FURVJNQVJLOiAyNCxcbiAgVEhSRUVEOiAyNSxcbiAgUkVEQUNUOiAyNlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvblR5cGUgPSBBbm5vdGF0aW9uVHlwZTtcbmNvbnN0IEFubm90YXRpb25TdGF0ZU1vZGVsVHlwZSA9IHtcbiAgTUFSS0VEOiBcIk1hcmtlZFwiLFxuICBSRVZJRVc6IFwiUmV2aWV3XCJcbn07XG5leHBvcnRzLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZSA9IEFubm90YXRpb25TdGF0ZU1vZGVsVHlwZTtcbmNvbnN0IEFubm90YXRpb25NYXJrZWRTdGF0ZSA9IHtcbiAgTUFSS0VEOiBcIk1hcmtlZFwiLFxuICBVTk1BUktFRDogXCJVbm1hcmtlZFwiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uTWFya2VkU3RhdGUgPSBBbm5vdGF0aW9uTWFya2VkU3RhdGU7XG5jb25zdCBBbm5vdGF0aW9uUmV2aWV3U3RhdGUgPSB7XG4gIEFDQ0VQVEVEOiBcIkFjY2VwdGVkXCIsXG4gIFJFSkVDVEVEOiBcIlJlamVjdGVkXCIsXG4gIENBTkNFTExFRDogXCJDYW5jZWxsZWRcIixcbiAgQ09NUExFVEVEOiBcIkNvbXBsZXRlZFwiLFxuICBOT05FOiBcIk5vbmVcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvblJldmlld1N0YXRlID0gQW5ub3RhdGlvblJldmlld1N0YXRlO1xuY29uc3QgQW5ub3RhdGlvblJlcGx5VHlwZSA9IHtcbiAgR1JPVVA6IFwiR3JvdXBcIixcbiAgUkVQTFk6IFwiUlwiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uUmVwbHlUeXBlID0gQW5ub3RhdGlvblJlcGx5VHlwZTtcbmNvbnN0IEFubm90YXRpb25GbGFnID0ge1xuICBJTlZJU0lCTEU6IDB4MDEsXG4gIEhJRERFTjogMHgwMixcbiAgUFJJTlQ6IDB4MDQsXG4gIE5PWk9PTTogMHgwOCxcbiAgTk9ST1RBVEU6IDB4MTAsXG4gIE5PVklFVzogMHgyMCxcbiAgUkVBRE9OTFk6IDB4NDAsXG4gIExPQ0tFRDogMHg4MCxcbiAgVE9HR0xFTk9WSUVXOiAweDEwMCxcbiAgTE9DS0VEQ09OVEVOVFM6IDB4MjAwXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uRmxhZyA9IEFubm90YXRpb25GbGFnO1xuY29uc3QgQW5ub3RhdGlvbkZpZWxkRmxhZyA9IHtcbiAgUkVBRE9OTFk6IDB4MDAwMDAwMSxcbiAgUkVRVUlSRUQ6IDB4MDAwMDAwMixcbiAgTk9FWFBPUlQ6IDB4MDAwMDAwNCxcbiAgTVVMVElMSU5FOiAweDAwMDEwMDAsXG4gIFBBU1NXT1JEOiAweDAwMDIwMDAsXG4gIE5PVE9HR0xFVE9PRkY6IDB4MDAwNDAwMCxcbiAgUkFESU86IDB4MDAwODAwMCxcbiAgUFVTSEJVVFRPTjogMHgwMDEwMDAwLFxuICBDT01CTzogMHgwMDIwMDAwLFxuICBFRElUOiAweDAwNDAwMDAsXG4gIFNPUlQ6IDB4MDA4MDAwMCxcbiAgRklMRVNFTEVDVDogMHgwMTAwMDAwLFxuICBNVUxUSVNFTEVDVDogMHgwMjAwMDAwLFxuICBET05PVFNQRUxMQ0hFQ0s6IDB4MDQwMDAwMCxcbiAgRE9OT1RTQ1JPTEw6IDB4MDgwMDAwMCxcbiAgQ09NQjogMHgxMDAwMDAwLFxuICBSSUNIVEVYVDogMHgyMDAwMDAwLFxuICBSQURJT1NJTlVOSVNPTjogMHgyMDAwMDAwLFxuICBDT01NSVRPTlNFTENIQU5HRTogMHg0MDAwMDAwXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uRmllbGRGbGFnID0gQW5ub3RhdGlvbkZpZWxkRmxhZztcbmNvbnN0IEFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUgPSB7XG4gIFNPTElEOiAxLFxuICBEQVNIRUQ6IDIsXG4gIEJFVkVMRUQ6IDMsXG4gIElOU0VUOiA0LFxuICBVTkRFUkxJTkU6IDVcbn07XG5leHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUgPSBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlO1xuY29uc3QgU3RyZWFtVHlwZSA9IHtcbiAgVU5LTk9XTjogXCJVTktOT1dOXCIsXG4gIEZMQVRFOiBcIkZMQVRFXCIsXG4gIExaVzogXCJMWldcIixcbiAgRENUOiBcIkRDVFwiLFxuICBKUFg6IFwiSlBYXCIsXG4gIEpCSUc6IFwiSkJJR1wiLFxuICBBODU6IFwiQTg1XCIsXG4gIEFIWDogXCJBSFhcIixcbiAgQ0NGOiBcIkNDRlwiLFxuICBSTFg6IFwiUkxYXCJcbn07XG5leHBvcnRzLlN0cmVhbVR5cGUgPSBTdHJlYW1UeXBlO1xuY29uc3QgRm9udFR5cGUgPSB7XG4gIFVOS05PV046IFwiVU5LTk9XTlwiLFxuICBUWVBFMTogXCJUWVBFMVwiLFxuICBUWVBFMUM6IFwiVFlQRTFDXCIsXG4gIENJREZPTlRUWVBFMDogXCJDSURGT05UVFlQRTBcIixcbiAgQ0lERk9OVFRZUEUwQzogXCJDSURGT05UVFlQRTBDXCIsXG4gIFRSVUVUWVBFOiBcIlRSVUVUWVBFXCIsXG4gIENJREZPTlRUWVBFMjogXCJDSURGT05UVFlQRTJcIixcbiAgVFlQRTM6IFwiVFlQRTNcIixcbiAgT1BFTlRZUEU6IFwiT1BFTlRZUEVcIixcbiAgVFlQRTA6IFwiVFlQRTBcIixcbiAgTU1UWVBFMTogXCJNTVRZUEUxXCJcbn07XG5leHBvcnRzLkZvbnRUeXBlID0gRm9udFR5cGU7XG5jb25zdCBWZXJib3NpdHlMZXZlbCA9IHtcbiAgRVJST1JTOiAwLFxuICBXQVJOSU5HUzogMSxcbiAgSU5GT1M6IDVcbn07XG5leHBvcnRzLlZlcmJvc2l0eUxldmVsID0gVmVyYm9zaXR5TGV2ZWw7XG5jb25zdCBDTWFwQ29tcHJlc3Npb25UeXBlID0ge1xuICBOT05FOiAwLFxuICBCSU5BUlk6IDEsXG4gIFNUUkVBTTogMlxufTtcbmV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IENNYXBDb21wcmVzc2lvblR5cGU7XG5jb25zdCBPUFMgPSB7XG4gIGRlcGVuZGVuY3k6IDEsXG4gIHNldExpbmVXaWR0aDogMixcbiAgc2V0TGluZUNhcDogMyxcbiAgc2V0TGluZUpvaW46IDQsXG4gIHNldE1pdGVyTGltaXQ6IDUsXG4gIHNldERhc2g6IDYsXG4gIHNldFJlbmRlcmluZ0ludGVudDogNyxcbiAgc2V0RmxhdG5lc3M6IDgsXG4gIHNldEdTdGF0ZTogOSxcbiAgc2F2ZTogMTAsXG4gIHJlc3RvcmU6IDExLFxuICB0cmFuc2Zvcm06IDEyLFxuICBtb3ZlVG86IDEzLFxuICBsaW5lVG86IDE0LFxuICBjdXJ2ZVRvOiAxNSxcbiAgY3VydmVUbzI6IDE2LFxuICBjdXJ2ZVRvMzogMTcsXG4gIGNsb3NlUGF0aDogMTgsXG4gIHJlY3RhbmdsZTogMTksXG4gIHN0cm9rZTogMjAsXG4gIGNsb3NlU3Ryb2tlOiAyMSxcbiAgZmlsbDogMjIsXG4gIGVvRmlsbDogMjMsXG4gIGZpbGxTdHJva2U6IDI0LFxuICBlb0ZpbGxTdHJva2U6IDI1LFxuICBjbG9zZUZpbGxTdHJva2U6IDI2LFxuICBjbG9zZUVPRmlsbFN0cm9rZTogMjcsXG4gIGVuZFBhdGg6IDI4LFxuICBjbGlwOiAyOSxcbiAgZW9DbGlwOiAzMCxcbiAgYmVnaW5UZXh0OiAzMSxcbiAgZW5kVGV4dDogMzIsXG4gIHNldENoYXJTcGFjaW5nOiAzMyxcbiAgc2V0V29yZFNwYWNpbmc6IDM0LFxuICBzZXRIU2NhbGU6IDM1LFxuICBzZXRMZWFkaW5nOiAzNixcbiAgc2V0Rm9udDogMzcsXG4gIHNldFRleHRSZW5kZXJpbmdNb2RlOiAzOCxcbiAgc2V0VGV4dFJpc2U6IDM5LFxuICBtb3ZlVGV4dDogNDAsXG4gIHNldExlYWRpbmdNb3ZlVGV4dDogNDEsXG4gIHNldFRleHRNYXRyaXg6IDQyLFxuICBuZXh0TGluZTogNDMsXG4gIHNob3dUZXh0OiA0NCxcbiAgc2hvd1NwYWNlZFRleHQ6IDQ1LFxuICBuZXh0TGluZVNob3dUZXh0OiA0NixcbiAgbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6IDQ3LFxuICBzZXRDaGFyV2lkdGg6IDQ4LFxuICBzZXRDaGFyV2lkdGhBbmRCb3VuZHM6IDQ5LFxuICBzZXRTdHJva2VDb2xvclNwYWNlOiA1MCxcbiAgc2V0RmlsbENvbG9yU3BhY2U6IDUxLFxuICBzZXRTdHJva2VDb2xvcjogNTIsXG4gIHNldFN0cm9rZUNvbG9yTjogNTMsXG4gIHNldEZpbGxDb2xvcjogNTQsXG4gIHNldEZpbGxDb2xvck46IDU1LFxuICBzZXRTdHJva2VHcmF5OiA1NixcbiAgc2V0RmlsbEdyYXk6IDU3LFxuICBzZXRTdHJva2VSR0JDb2xvcjogNTgsXG4gIHNldEZpbGxSR0JDb2xvcjogNTksXG4gIHNldFN0cm9rZUNNWUtDb2xvcjogNjAsXG4gIHNldEZpbGxDTVlLQ29sb3I6IDYxLFxuICBzaGFkaW5nRmlsbDogNjIsXG4gIGJlZ2luSW5saW5lSW1hZ2U6IDYzLFxuICBiZWdpbkltYWdlRGF0YTogNjQsXG4gIGVuZElubGluZUltYWdlOiA2NSxcbiAgcGFpbnRYT2JqZWN0OiA2NixcbiAgbWFya1BvaW50OiA2NyxcbiAgbWFya1BvaW50UHJvcHM6IDY4LFxuICBiZWdpbk1hcmtlZENvbnRlbnQ6IDY5LFxuICBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogNzAsXG4gIGVuZE1hcmtlZENvbnRlbnQ6IDcxLFxuICBiZWdpbkNvbXBhdDogNzIsXG4gIGVuZENvbXBhdDogNzMsXG4gIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogNzQsXG4gIHBhaW50Rm9ybVhPYmplY3RFbmQ6IDc1LFxuICBiZWdpbkdyb3VwOiA3NixcbiAgZW5kR3JvdXA6IDc3LFxuICBiZWdpbkFubm90YXRpb25zOiA3OCxcbiAgZW5kQW5ub3RhdGlvbnM6IDc5LFxuICBiZWdpbkFubm90YXRpb246IDgwLFxuICBlbmRBbm5vdGF0aW9uOiA4MSxcbiAgcGFpbnRKcGVnWE9iamVjdDogODIsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiA4NCxcbiAgcGFpbnRJbWFnZVhPYmplY3Q6IDg1LFxuICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsXG4gIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IDg3LFxuICBwYWludEltYWdlWE9iamVjdFJlcGVhdDogODgsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksXG4gIHBhaW50U29saWRDb2xvckltYWdlTWFzazogOTAsXG4gIGNvbnN0cnVjdFBhdGg6IDkxXG59O1xuZXhwb3J0cy5PUFMgPSBPUFM7XG5jb25zdCBVTlNVUFBPUlRFRF9GRUFUVVJFUyA9IHtcbiAgdW5rbm93bjogXCJ1bmtub3duXCIsXG4gIGZvcm1zOiBcImZvcm1zXCIsXG4gIGphdmFTY3JpcHQ6IFwiamF2YVNjcmlwdFwiLFxuICBzbWFzazogXCJzbWFza1wiLFxuICBzaGFkaW5nUGF0dGVybjogXCJzaGFkaW5nUGF0dGVyblwiLFxuICBmb250OiBcImZvbnRcIixcbiAgZXJyb3JUaWxpbmdQYXR0ZXJuOiBcImVycm9yVGlsaW5nUGF0dGVyblwiLFxuICBlcnJvckV4dEdTdGF0ZTogXCJlcnJvckV4dEdTdGF0ZVwiLFxuICBlcnJvclhPYmplY3Q6IFwiZXJyb3JYT2JqZWN0XCIsXG4gIGVycm9yRm9udExvYWRUeXBlMzogXCJlcnJvckZvbnRMb2FkVHlwZTNcIixcbiAgZXJyb3JGb250U3RhdGU6IFwiZXJyb3JGb250U3RhdGVcIixcbiAgZXJyb3JGb250TWlzc2luZzogXCJlcnJvckZvbnRNaXNzaW5nXCIsXG4gIGVycm9yRm9udFRyYW5zbGF0ZTogXCJlcnJvckZvbnRUcmFuc2xhdGVcIixcbiAgZXJyb3JDb2xvclNwYWNlOiBcImVycm9yQ29sb3JTcGFjZVwiLFxuICBlcnJvck9wZXJhdG9yTGlzdDogXCJlcnJvck9wZXJhdG9yTGlzdFwiLFxuICBlcnJvckZvbnRUb1VuaWNvZGU6IFwiZXJyb3JGb250VG9Vbmljb2RlXCIsXG4gIGVycm9yRm9udExvYWROYXRpdmU6IFwiZXJyb3JGb250TG9hZE5hdGl2ZVwiLFxuICBlcnJvckZvbnRHZXRQYXRoOiBcImVycm9yRm9udEdldFBhdGhcIlxufTtcbmV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBVTlNVUFBPUlRFRF9GRUFUVVJFUztcbmNvbnN0IFBhc3N3b3JkUmVzcG9uc2VzID0ge1xuICBORUVEX1BBU1NXT1JEOiAxLFxuICBJTkNPUlJFQ1RfUEFTU1dPUkQ6IDJcbn07XG5leHBvcnRzLlBhc3N3b3JkUmVzcG9uc2VzID0gUGFzc3dvcmRSZXNwb25zZXM7XG5sZXQgdmVyYm9zaXR5ID0gVmVyYm9zaXR5TGV2ZWwuV0FSTklOR1M7XG5cbmZ1bmN0aW9uIHNldFZlcmJvc2l0eUxldmVsKGxldmVsKSB7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGxldmVsKSkge1xuICAgIHZlcmJvc2l0eSA9IGxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCkge1xuICByZXR1cm4gdmVyYm9zaXR5O1xufVxuXG5mdW5jdGlvbiBpbmZvKG1zZykge1xuICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLklORk9TKSB7XG4gICAgY29uc29sZS5sb2coYEluZm86ICR7bXNnfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gIGlmICh2ZXJib3NpdHkgPj0gVmVyYm9zaXR5TGV2ZWwuV0FSTklOR1MpIHtcbiAgICBjb25zb2xlLmxvZyhgV2FybmluZzogJHttc2d9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5yZWFjaGFibGUobXNnKSB7XG4gIHRocm93IG5ldyBFcnJvcihtc2cpO1xufVxuXG5mdW5jdGlvbiBhc3NlcnQoY29uZCwgbXNnKSB7XG4gIGlmICghY29uZCkge1xuICAgIHVucmVhY2hhYmxlKG1zZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTYW1lT3JpZ2luKGJhc2VVcmwsIG90aGVyVXJsKSB7XG4gIGxldCBiYXNlO1xuXG4gIHRyeSB7XG4gICAgYmFzZSA9IG5ldyBVUkwoYmFzZVVybCk7XG5cbiAgICBpZiAoIWJhc2Uub3JpZ2luIHx8IGJhc2Uub3JpZ2luID09PSBcIm51bGxcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG90aGVyID0gbmV3IFVSTChvdGhlclVybCwgYmFzZSk7XG4gIHJldHVybiBiYXNlLm9yaWdpbiA9PT0gb3RoZXIub3JpZ2luO1xufVxuXG5mdW5jdGlvbiBfaXNWYWxpZFByb3RvY29sKHVybCkge1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaCAodXJsLnByb3RvY29sKSB7XG4gICAgY2FzZSBcImh0dHA6XCI6XG4gICAgY2FzZSBcImh0dHBzOlwiOlxuICAgIGNhc2UgXCJmdHA6XCI6XG4gICAgY2FzZSBcIm1haWx0bzpcIjpcbiAgICBjYXNlIFwidGVsOlwiOlxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwodXJsLCBiYXNlVXJsKSB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGFic29sdXRlVXJsID0gYmFzZVVybCA/IG5ldyBVUkwodXJsLCBiYXNlVXJsKSA6IG5ldyBVUkwodXJsKTtcblxuICAgIGlmIChfaXNWYWxpZFByb3RvY29sKGFic29sdXRlVXJsKSkge1xuICAgICAgcmV0dXJuIGFic29sdXRlVXJsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNoYWRvdyhvYmosIHByb3AsIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHtcbiAgICB2YWx1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuY29uc3QgQmFzZUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEJhc2VFeGNlcHRpb25DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZUV4Y2VwdGlvbikge1xuICAgICAgdW5yZWFjaGFibGUoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRXhjZXB0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIEJhc2VFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gIEJhc2VFeGNlcHRpb24uY29uc3RydWN0b3IgPSBCYXNlRXhjZXB0aW9uO1xuICByZXR1cm4gQmFzZUV4Y2VwdGlvbjtcbn0oKTtcblxuZXhwb3J0cy5CYXNlRXhjZXB0aW9uID0gQmFzZUV4Y2VwdGlvbjtcblxuY2xhc3MgUGFzc3dvcmRFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnLCBjb2RlKSB7XG4gICAgc3VwZXIobXNnKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QYXNzd29yZEV4Y2VwdGlvbiA9IFBhc3N3b3JkRXhjZXB0aW9uO1xuXG5jbGFzcyBVbmtub3duRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnLCBkZXRhaWxzKSB7XG4gICAgc3VwZXIobXNnKTtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBVbmtub3duRXJyb3JFeGNlcHRpb247XG5cbmNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHt9XG5cbmV4cG9ydHMuSW52YWxpZFBERkV4Y2VwdGlvbiA9IEludmFsaWRQREZFeGNlcHRpb247XG5cbmNsYXNzIE1pc3NpbmdQREZFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHt9XG5cbmV4cG9ydHMuTWlzc2luZ1BERkV4Y2VwdGlvbiA9IE1pc3NpbmdQREZFeGNlcHRpb247XG5cbmNsYXNzIFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2csIHN0YXR1cykge1xuICAgIHN1cGVyKG1zZyk7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gIH1cblxufVxuXG5leHBvcnRzLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiA9IFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcblxuY2xhc3MgRm9ybWF0RXJyb3IgZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHt9XG5cbmV4cG9ydHMuRm9ybWF0RXJyb3IgPSBGb3JtYXRFcnJvcjtcblxuY2xhc3MgQWJvcnRFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHt9XG5cbmV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSBBYm9ydEV4Y2VwdGlvbjtcbmNvbnN0IE51bGxDaGFyYWN0ZXJzUmVnRXhwID0gL1xceDAwL2c7XG5cbmZ1bmN0aW9uIHJlbW92ZU51bGxDaGFyYWN0ZXJzKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gXCJzdHJpbmdcIikge1xuICAgIHdhcm4oXCJUaGUgYXJndW1lbnQgZm9yIHJlbW92ZU51bGxDaGFyYWN0ZXJzIG11c3QgYmUgYSBzdHJpbmcuXCIpO1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gc3RyLnJlcGxhY2UoTnVsbENoYXJhY3RlcnNSZWdFeHAsIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBieXRlc1RvU3RyaW5nKGJ5dGVzKSB7XG4gIGFzc2VydChieXRlcyAhPT0gbnVsbCAmJiB0eXBlb2YgYnl0ZXMgPT09IFwib2JqZWN0XCIgJiYgYnl0ZXMubGVuZ3RoICE9PSB1bmRlZmluZWQsIFwiSW52YWxpZCBhcmd1bWVudCBmb3IgYnl0ZXNUb1N0cmluZ1wiKTtcbiAgY29uc3QgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoO1xuICBjb25zdCBNQVhfQVJHVU1FTlRfQ09VTlQgPSA4MTkyO1xuXG4gIGlmIChsZW5ndGggPCBNQVhfQVJHVU1FTlRfQ09VTlQpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBieXRlcyk7XG4gIH1cblxuICBjb25zdCBzdHJCdWYgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSBNQVhfQVJHVU1FTlRfQ09VTlQpIHtcbiAgICBjb25zdCBjaHVua0VuZCA9IE1hdGgubWluKGkgKyBNQVhfQVJHVU1FTlRfQ09VTlQsIGxlbmd0aCk7XG4gICAgY29uc3QgY2h1bmsgPSBieXRlcy5zdWJhcnJheShpLCBjaHVua0VuZCk7XG4gICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBjaHVuaykpO1xuICB9XG5cbiAgcmV0dXJuIHN0ckJ1Zi5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHN0cikge1xuICBhc3NlcnQodHlwZW9mIHN0ciA9PT0gXCJzdHJpbmdcIiwgXCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzXCIpO1xuICBjb25zdCBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzW2ldID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5mdW5jdGlvbiBhcnJheUJ5dGVMZW5ndGgoYXJyKSB7XG4gIGlmIChhcnIubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJyLmxlbmd0aDtcbiAgfVxuXG4gIGFzc2VydChhcnIuYnl0ZUxlbmd0aCAhPT0gdW5kZWZpbmVkLCBcImFycmF5Qnl0ZUxlbmd0aCAtIGludmFsaWQgYXJndW1lbnQuXCIpO1xuICByZXR1cm4gYXJyLmJ5dGVMZW5ndGg7XG59XG5cbmZ1bmN0aW9uIGFycmF5c1RvQnl0ZXMoYXJyKSB7XG4gIGNvbnN0IGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgaWYgKGxlbmd0aCA9PT0gMSAmJiBhcnJbMF0gaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgcmV0dXJuIGFyclswXTtcbiAgfVxuXG4gIGxldCByZXN1bHRMZW5ndGggPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHRMZW5ndGggKz0gYXJyYXlCeXRlTGVuZ3RoKGFycltpXSk7XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHJlc3VsdExlbmd0aCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGxldCBpdGVtID0gYXJyW2ldO1xuXG4gICAgaWYgKCEoaXRlbSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaXRlbSA9IHN0cmluZ1RvQnl0ZXMoaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gbmV3IFVpbnQ4QXJyYXkoaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbUxlbmd0aCA9IGl0ZW0uYnl0ZUxlbmd0aDtcbiAgICBkYXRhLnNldChpdGVtLCBwb3MpO1xuICAgIHBvcyArPSBpdGVtTGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIHN0cmluZzMyKHZhbHVlKSB7XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlID4+IDI0ICYgMHhmZiwgdmFsdWUgPj4gMTYgJiAweGZmLCB2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmKTtcbn1cblxuZnVuY3Rpb24gaXNMaXR0bGVFbmRpYW4oKSB7XG4gIGNvbnN0IGJ1ZmZlcjggPSBuZXcgVWludDhBcnJheSg0KTtcbiAgYnVmZmVyOFswXSA9IDE7XG4gIGNvbnN0IHZpZXczMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXI4LmJ1ZmZlciwgMCwgMSk7XG4gIHJldHVybiB2aWV3MzJbMF0gPT09IDE7XG59XG5cbmNvbnN0IElzTGl0dGxlRW5kaWFuQ2FjaGVkID0ge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcInZhbHVlXCIsIGlzTGl0dGxlRW5kaWFuKCkpO1xuICB9XG5cbn07XG5leHBvcnRzLklzTGl0dGxlRW5kaWFuQ2FjaGVkID0gSXNMaXR0bGVFbmRpYW5DYWNoZWQ7XG5cbmZ1bmN0aW9uIGlzRXZhbFN1cHBvcnRlZCgpIHtcbiAgdHJ5IHtcbiAgICBuZXcgRnVuY3Rpb24oXCJcIik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuY29uc3QgSXNFdmFsU3VwcG9ydGVkQ2FjaGVkID0ge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcInZhbHVlXCIsIGlzRXZhbFN1cHBvcnRlZCgpKTtcbiAgfVxuXG59O1xuZXhwb3J0cy5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSBJc0V2YWxTdXBwb3J0ZWRDYWNoZWQ7XG5jb25zdCByZ2JCdWYgPSBbXCJyZ2IoXCIsIDAsIFwiLFwiLCAwLCBcIixcIiwgMCwgXCIpXCJdO1xuXG5jbGFzcyBVdGlsIHtcbiAgc3RhdGljIG1ha2VDc3NSZ2IociwgZywgYikge1xuICAgIHJnYkJ1ZlsxXSA9IHI7XG4gICAgcmdiQnVmWzNdID0gZztcbiAgICByZ2JCdWZbNV0gPSBiO1xuICAgIHJldHVybiByZ2JCdWYuam9pbihcIlwiKTtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm0obTEsIG0yKSB7XG4gICAgcmV0dXJuIFttMVswXSAqIG0yWzBdICsgbTFbMl0gKiBtMlsxXSwgbTFbMV0gKiBtMlswXSArIG0xWzNdICogbTJbMV0sIG0xWzBdICogbTJbMl0gKyBtMVsyXSAqIG0yWzNdLCBtMVsxXSAqIG0yWzJdICsgbTFbM10gKiBtMlszXSwgbTFbMF0gKiBtMls0XSArIG0xWzJdICogbTJbNV0gKyBtMVs0XSwgbTFbMV0gKiBtMls0XSArIG0xWzNdICogbTJbNV0gKyBtMVs1XV07XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUcmFuc2Zvcm0ocCwgbSkge1xuICAgIGNvbnN0IHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgY29uc3QgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICByZXR1cm4gW3h0LCB5dF07XG4gIH1cblxuICBzdGF0aWMgYXBwbHlJbnZlcnNlVHJhbnNmb3JtKHAsIG0pIHtcbiAgICBjb25zdCBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTtcbiAgICBjb25zdCB4dCA9IChwWzBdICogbVszXSAtIHBbMV0gKiBtWzJdICsgbVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkO1xuICAgIGNvbnN0IHl0ID0gKC1wWzBdICogbVsxXSArIHBbMV0gKiBtWzBdICsgbVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkO1xuICAgIHJldHVybiBbeHQsIHl0XTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChyLCBtKSB7XG4gICAgY29uc3QgcDEgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIsIG0pO1xuICAgIGNvbnN0IHAyID0gVXRpbC5hcHBseVRyYW5zZm9ybShyLnNsaWNlKDIsIDQpLCBtKTtcbiAgICBjb25zdCBwMyA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMF0sIHJbM11dLCBtKTtcbiAgICBjb25zdCBwNCA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMl0sIHJbMV1dLCBtKTtcbiAgICByZXR1cm4gW01hdGgubWluKHAxWzBdLCBwMlswXSwgcDNbMF0sIHA0WzBdKSwgTWF0aC5taW4ocDFbMV0sIHAyWzFdLCBwM1sxXSwgcDRbMV0pLCBNYXRoLm1heChwMVswXSwgcDJbMF0sIHAzWzBdLCBwNFswXSksIE1hdGgubWF4KHAxWzFdLCBwMlsxXSwgcDNbMV0sIHA0WzFdKV07XG4gIH1cblxuICBzdGF0aWMgaW52ZXJzZVRyYW5zZm9ybShtKSB7XG4gICAgY29uc3QgZCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgcmV0dXJuIFttWzNdIC8gZCwgLW1bMV0gLyBkLCAtbVsyXSAvIGQsIG1bMF0gLyBkLCAobVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkLCAobVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkXTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseTNkVHJhbnNmb3JtKG0sIHYpIHtcbiAgICByZXR1cm4gW21bMF0gKiB2WzBdICsgbVsxXSAqIHZbMV0gKyBtWzJdICogdlsyXSwgbVszXSAqIHZbMF0gKyBtWzRdICogdlsxXSArIG1bNV0gKiB2WzJdLCBtWzZdICogdlswXSArIG1bN10gKiB2WzFdICsgbVs4XSAqIHZbMl1dO1xuICB9XG5cbiAgc3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG0pIHtcbiAgICBjb25zdCB0cmFuc3Bvc2UgPSBbbVswXSwgbVsyXSwgbVsxXSwgbVszXV07XG4gICAgY29uc3QgYSA9IG1bMF0gKiB0cmFuc3Bvc2VbMF0gKyBtWzFdICogdHJhbnNwb3NlWzJdO1xuICAgIGNvbnN0IGIgPSBtWzBdICogdHJhbnNwb3NlWzFdICsgbVsxXSAqIHRyYW5zcG9zZVszXTtcbiAgICBjb25zdCBjID0gbVsyXSAqIHRyYW5zcG9zZVswXSArIG1bM10gKiB0cmFuc3Bvc2VbMl07XG4gICAgY29uc3QgZCA9IG1bMl0gKiB0cmFuc3Bvc2VbMV0gKyBtWzNdICogdHJhbnNwb3NlWzNdO1xuICAgIGNvbnN0IGZpcnN0ID0gKGEgKyBkKSAvIDI7XG4gICAgY29uc3Qgc2Vjb25kID0gTWF0aC5zcXJ0KChhICsgZCkgKiAoYSArIGQpIC0gNCAqIChhICogZCAtIGMgKiBiKSkgLyAyO1xuICAgIGNvbnN0IHN4ID0gZmlyc3QgKyBzZWNvbmQgfHwgMTtcbiAgICBjb25zdCBzeSA9IGZpcnN0IC0gc2Vjb25kIHx8IDE7XG4gICAgcmV0dXJuIFtNYXRoLnNxcnQoc3gpLCBNYXRoLnNxcnQoc3kpXTtcbiAgfVxuXG4gIHN0YXRpYyBub3JtYWxpemVSZWN0KHJlY3QpIHtcbiAgICBjb25zdCByID0gcmVjdC5zbGljZSgwKTtcblxuICAgIGlmIChyZWN0WzBdID4gcmVjdFsyXSkge1xuICAgICAgclswXSA9IHJlY3RbMl07XG4gICAgICByWzJdID0gcmVjdFswXTtcbiAgICB9XG5cbiAgICBpZiAocmVjdFsxXSA+IHJlY3RbM10pIHtcbiAgICAgIHJbMV0gPSByZWN0WzNdO1xuICAgICAgclszXSA9IHJlY3RbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBzdGF0aWMgaW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyZWRYID0gW3JlY3QxWzBdLCByZWN0MVsyXSwgcmVjdDJbMF0sIHJlY3QyWzJdXS5zb3J0KGNvbXBhcmUpO1xuICAgIGNvbnN0IG9yZGVyZWRZID0gW3JlY3QxWzFdLCByZWN0MVszXSwgcmVjdDJbMV0sIHJlY3QyWzNdXS5zb3J0KGNvbXBhcmUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIHJlY3QxID0gVXRpbC5ub3JtYWxpemVSZWN0KHJlY3QxKTtcbiAgICByZWN0MiA9IFV0aWwubm9ybWFsaXplUmVjdChyZWN0Mik7XG5cbiAgICBpZiAob3JkZXJlZFhbMF0gPT09IHJlY3QxWzBdICYmIG9yZGVyZWRYWzFdID09PSByZWN0MlswXSB8fCBvcmRlcmVkWFswXSA9PT0gcmVjdDJbMF0gJiYgb3JkZXJlZFhbMV0gPT09IHJlY3QxWzBdKSB7XG4gICAgICByZXN1bHRbMF0gPSBvcmRlcmVkWFsxXTtcbiAgICAgIHJlc3VsdFsyXSA9IG9yZGVyZWRYWzJdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAob3JkZXJlZFlbMF0gPT09IHJlY3QxWzFdICYmIG9yZGVyZWRZWzFdID09PSByZWN0MlsxXSB8fCBvcmRlcmVkWVswXSA9PT0gcmVjdDJbMV0gJiYgb3JkZXJlZFlbMV0gPT09IHJlY3QxWzFdKSB7XG4gICAgICByZXN1bHRbMV0gPSBvcmRlcmVkWVsxXTtcbiAgICAgIHJlc3VsdFszXSA9IG9yZGVyZWRZWzJdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn1cblxuZXhwb3J0cy5VdGlsID0gVXRpbDtcbmNvbnN0IFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MkQ4LCAweDJDNywgMHgyQzYsIDB4MkQ5LCAweDJERCwgMHgyREIsIDB4MkRBLCAweDJEQywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHgyMDIyLCAweDIwMjAsIDB4MjAyMSwgMHgyMDI2LCAweDIwMTQsIDB4MjAxMywgMHgxOTIsIDB4MjA0NCwgMHgyMDM5LCAweDIwM0EsIDB4MjIxMiwgMHgyMDMwLCAweDIwMUUsIDB4MjAxQywgMHgyMDFELCAweDIwMTgsIDB4MjAxOSwgMHgyMDFBLCAweDIxMjIsIDB4RkIwMSwgMHhGQjAyLCAweDE0MSwgMHgxNTIsIDB4MTYwLCAweDE3OCwgMHgxN0QsIDB4MTMxLCAweDE0MiwgMHgxNTMsIDB4MTYxLCAweDE3RSwgMCwgMHgyMEFDXTtcblxuZnVuY3Rpb24gc3RyaW5nVG9QREZTdHJpbmcoc3RyKSB7XG4gIGNvbnN0IGxlbmd0aCA9IHN0ci5sZW5ndGgsXG4gICAgICAgIHN0ckJ1ZiA9IFtdO1xuXG4gIGlmIChzdHJbMF0gPT09IFwiXFx4RkVcIiAmJiBzdHJbMV0gPT09IFwiXFx4RkZcIikge1xuICAgIGZvciAobGV0IGkgPSAyOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoc3RyLmNoYXJDb2RlQXQoaSkgPDwgOCB8IHN0ci5jaGFyQ29kZUF0KGkgKyAxKSkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzdHJbMF0gPT09IFwiXFx4RkZcIiAmJiBzdHJbMV0gPT09IFwiXFx4RkVcIikge1xuICAgIGZvciAobGV0IGkgPSAyOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoc3RyLmNoYXJDb2RlQXQoaSArIDEpIDw8IDggfCBzdHIuY2hhckNvZGVBdChpKSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBjb2RlID0gUERGU3RyaW5nVHJhbnNsYXRlVGFibGVbc3RyLmNoYXJDb2RlQXQoaSldO1xuICAgICAgc3RyQnVmLnB1c2goY29kZSA/IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgOiBzdHIuY2hhckF0KGkpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyQnVmLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvVVRGOFN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoc3RyKSk7XG59XG5cbmZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eU9iaihvYmopIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzQm9vbCh2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJib29sZWFuXCI7XG59XG5cbmZ1bmN0aW9uIGlzTnVtKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm51bWJlclwiO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmIHYuYnl0ZUxlbmd0aCAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5RXF1YWwoYXJyMSwgYXJyMikge1xuICBpZiAoYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGFycjEuZXZlcnkoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQgPT09IGFycjJbaW5kZXhdO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkoKSB7XG4gIGNvbnN0IGNhcGFiaWxpdHkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBsZXQgaXNTZXR0bGVkID0gZmFsc2U7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXBhYmlsaXR5LCBcInNldHRsZWRcIiwge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBpc1NldHRsZWQ7XG4gICAgfVxuXG4gIH0pO1xuICBjYXBhYmlsaXR5LnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY2FwYWJpbGl0eS5yZXNvbHZlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICByZXNvbHZlKGRhdGEpO1xuICAgIH07XG5cbiAgICBjYXBhYmlsaXR5LnJlamVjdCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIGNhcGFiaWxpdHk7XG59XG5cbmNvbnN0IGNyZWF0ZU9iamVjdFVSTCA9IGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTENsb3N1cmUoKSB7XG4gIGNvbnN0IGRpZ2l0cyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTChkYXRhLCBjb250ZW50VHlwZSwgZm9yY2VEYXRhU2NoZW1hID0gZmFsc2UpIHtcbiAgICBpZiAoIWZvcmNlRGF0YVNjaGVtYSAmJiBVUkwuY3JlYXRlT2JqZWN0VVJMKSB7XG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7XG4gICAgICAgIHR5cGU6IGNvbnRlbnRUeXBlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIH1cblxuICAgIGxldCBidWZmZXIgPSBgZGF0YToke2NvbnRlbnRUeXBlfTtiYXNlNjQsYDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMykge1xuICAgICAgY29uc3QgYjEgPSBkYXRhW2ldICYgMHhmZjtcbiAgICAgIGNvbnN0IGIyID0gZGF0YVtpICsgMV0gJiAweGZmO1xuICAgICAgY29uc3QgYjMgPSBkYXRhW2kgKyAyXSAmIDB4ZmY7XG4gICAgICBjb25zdCBkMSA9IGIxID4+IDIsXG4gICAgICAgICAgICBkMiA9IChiMSAmIDMpIDw8IDQgfCBiMiA+PiA0O1xuICAgICAgY29uc3QgZDMgPSBpICsgMSA8IGlpID8gKGIyICYgMHhmKSA8PCAyIHwgYjMgPj4gNiA6IDY0O1xuICAgICAgY29uc3QgZDQgPSBpICsgMiA8IGlpID8gYjMgJiAweDNmIDogNjQ7XG4gICAgICBidWZmZXIgKz0gZGlnaXRzW2QxXSArIGRpZ2l0c1tkMl0gKyBkaWdpdHNbZDNdICsgZGlnaXRzW2Q0XTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9O1xufSgpO1xuXG5leHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGNyZWF0ZU9iamVjdFVSTDtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfaXNfbm9kZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNCk7XG5cbjtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTm9kZUpTID0gdm9pZCAwO1xuY29uc3QgaXNOb2RlSlMgPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzICsgXCJcIiA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIgJiYgIXByb2Nlc3MudmVyc2lvbnMubncgJiYgIXByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb247XG5leHBvcnRzLmlzTm9kZUpTID0gaXNOb2RlSlM7XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXREb2N1bWVudCA9IGdldERvY3VtZW50O1xuZXhwb3J0cy5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSA9IHNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5O1xuZXhwb3J0cy5idWlsZCA9IGV4cG9ydHMudmVyc2lvbiA9IGV4cG9ydHMuUERGUGFnZVByb3h5ID0gZXhwb3J0cy5QREZEb2N1bWVudFByb3h5ID0gZXhwb3J0cy5QREZXb3JrZXIgPSBleHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydCA9IGV4cG9ydHMuTG9vcGJhY2tQb3J0ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2Rpc3BsYXlfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEpO1xuXG52YXIgX2ZvbnRfbG9hZGVyID0gX193X3BkZmpzX3JlcXVpcmVfXyg2KTtcblxudmFyIF9hcGlfY29tcGF0aWJpbGl0eSA9IF9fd19wZGZqc19yZXF1aXJlX18oNyk7XG5cbnZhciBfY2FudmFzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxudmFyIF93b3JrZXJfb3B0aW9ucyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTApO1xuXG52YXIgX2lzX25vZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQpO1xuXG52YXIgX21lc3NhZ2VfaGFuZGxlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMTEpO1xuXG52YXIgX21ldGFkYXRhID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfdHJhbnNwb3J0X3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTQpO1xuXG52YXIgX3dlYmdsID0gX193X3BkZmpzX3JlcXVpcmVfXygxNSk7XG5cbmNvbnN0IERFRkFVTFRfUkFOR0VfQ0hVTktfU0laRSA9IDY1NTM2O1xuY29uc3QgUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUID0gMTAwO1xubGV0IGNyZWF0ZVBERk5ldHdvcmtTdHJlYW07XG5cbmZ1bmN0aW9uIHNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KHBkZk5ldHdvcmtTdHJlYW1GYWN0b3J5KSB7XG4gIGNyZWF0ZVBERk5ldHdvcmtTdHJlYW0gPSBwZGZOZXR3b3JrU3RyZWFtRmFjdG9yeTtcbn1cblxuZnVuY3Rpb24gZ2V0RG9jdW1lbnQoc3JjKSB7XG4gIGNvbnN0IHRhc2sgPSBuZXcgUERGRG9jdW1lbnRMb2FkaW5nVGFzaygpO1xuICBsZXQgc291cmNlO1xuXG4gIGlmICh0eXBlb2Ygc3JjID09PSBcInN0cmluZ1wiKSB7XG4gICAgc291cmNlID0ge1xuICAgICAgdXJsOiBzcmNcbiAgICB9O1xuICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKShzcmMpKSB7XG4gICAgc291cmNlID0ge1xuICAgICAgZGF0YTogc3JjXG4gICAgfTtcbiAgfSBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBQREZEYXRhUmFuZ2VUcmFuc3BvcnQpIHtcbiAgICBzb3VyY2UgPSB7XG4gICAgICByYW5nZTogc3JjXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHNyYyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwYXJhbWV0ZXIgaW4gZ2V0RG9jdW1lbnQsIFwiICsgXCJuZWVkIGVpdGhlciBVaW50OEFycmF5LCBzdHJpbmcgb3IgYSBwYXJhbWV0ZXIgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGlmICghc3JjLnVybCAmJiAhc3JjLmRhdGEgJiYgIXNyYy5yYW5nZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwYXJhbWV0ZXIgb2JqZWN0OiBuZWVkIGVpdGhlciAuZGF0YSwgLnJhbmdlIG9yIC51cmxcIik7XG4gICAgfVxuXG4gICAgc291cmNlID0gc3JjO1xuICB9XG5cbiAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IHJhbmdlVHJhbnNwb3J0ID0gbnVsbCxcbiAgICAgIHdvcmtlciA9IG51bGw7XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGtleSA9PT0gXCJ1cmxcIiAmJiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBwYXJhbXNba2V5XSA9IG5ldyBVUkwoc291cmNlW2tleV0sIHdpbmRvdy5sb2NhdGlvbikuaHJlZjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInJhbmdlXCIpIHtcbiAgICAgIHJhbmdlVHJhbnNwb3J0ID0gc291cmNlW2tleV07XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJ3b3JrZXJcIikge1xuICAgICAgd29ya2VyID0gc291cmNlW2tleV07XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJkYXRhXCIgJiYgIShzb3VyY2Vba2V5XSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICBjb25zdCBwZGZCeXRlcyA9IHNvdXJjZVtrZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHBkZkJ5dGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHBhcmFtc1trZXldID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHBkZkJ5dGVzKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBkZkJ5dGVzID09PSBcIm9iamVjdFwiICYmIHBkZkJ5dGVzICE9PSBudWxsICYmICFpc05hTihwZGZCeXRlcy5sZW5ndGgpKSB7XG4gICAgICAgIHBhcmFtc1trZXldID0gbmV3IFVpbnQ4QXJyYXkocGRmQnl0ZXMpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikocGRmQnl0ZXMpKSB7XG4gICAgICAgIHBhcmFtc1trZXldID0gbmV3IFVpbnQ4QXJyYXkocGRmQnl0ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBQREYgYmluYXJ5IGRhdGE6IGVpdGhlciB0eXBlZCBhcnJheSwgXCIgKyBcInN0cmluZyBvciBhcnJheS1saWtlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0aGUgXCIgKyBcImRhdGEgcHJvcGVydHkuXCIpO1xuICAgICAgfVxuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBwYXJhbXNba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcGFyYW1zLnJhbmdlQ2h1bmtTaXplID0gcGFyYW1zLnJhbmdlQ2h1bmtTaXplIHx8IERFRkFVTFRfUkFOR0VfQ0hVTktfU0laRTtcbiAgcGFyYW1zLkNNYXBSZWFkZXJGYWN0b3J5ID0gcGFyYW1zLkNNYXBSZWFkZXJGYWN0b3J5IHx8IF9kaXNwbGF5X3V0aWxzLkRPTUNNYXBSZWFkZXJGYWN0b3J5O1xuICBwYXJhbXMuaWdub3JlRXJyb3JzID0gcGFyYW1zLnN0b3BBdEVycm9ycyAhPT0gdHJ1ZTtcbiAgcGFyYW1zLmZvbnRFeHRyYVByb3BlcnRpZXMgPSBwYXJhbXMuZm9udEV4dHJhUHJvcGVydGllcyA9PT0gdHJ1ZTtcbiAgcGFyYW1zLnBkZkJ1ZyA9IHBhcmFtcy5wZGZCdWcgPT09IHRydWU7XG5cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhcmFtcy5tYXhJbWFnZVNpemUpKSB7XG4gICAgcGFyYW1zLm1heEltYWdlU2l6ZSA9IC0xO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMuaXNFdmFsU3VwcG9ydGVkICE9PSBcImJvb2xlYW5cIikge1xuICAgIHBhcmFtcy5pc0V2YWxTdXBwb3J0ZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMuZGlzYWJsZUZvbnRGYWNlICE9PSBcImJvb2xlYW5cIikge1xuICAgIHBhcmFtcy5kaXNhYmxlRm9udEZhY2UgPSBfYXBpX2NvbXBhdGliaWxpdHkuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcy5kaXNhYmxlRm9udEZhY2UgfHwgZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy5kaXNhYmxlUmFuZ2UgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgcGFyYW1zLmRpc2FibGVSYW5nZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMuZGlzYWJsZVN0cmVhbSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICBwYXJhbXMuZGlzYWJsZVN0cmVhbSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMuZGlzYWJsZUF1dG9GZXRjaCAhPT0gXCJib29sZWFuXCIpIHtcbiAgICBwYXJhbXMuZGlzYWJsZUF1dG9GZXRjaCA9IGZhbHNlO1xuICB9XG5cbiAgKDAsIF91dGlsLnNldFZlcmJvc2l0eUxldmVsKShwYXJhbXMudmVyYm9zaXR5KTtcblxuICBpZiAoIXdvcmtlcikge1xuICAgIGNvbnN0IHdvcmtlclBhcmFtcyA9IHtcbiAgICAgIHZlcmJvc2l0eTogcGFyYW1zLnZlcmJvc2l0eSxcbiAgICAgIHBvcnQ6IF93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnRcbiAgICB9O1xuICAgIHdvcmtlciA9IHdvcmtlclBhcmFtcy5wb3J0ID8gUERGV29ya2VyLmZyb21Qb3J0KHdvcmtlclBhcmFtcykgOiBuZXcgUERGV29ya2VyKHdvcmtlclBhcmFtcyk7XG4gICAgdGFzay5fd29ya2VyID0gd29ya2VyO1xuICB9XG5cbiAgY29uc3QgZG9jSWQgPSB0YXNrLmRvY0lkO1xuICB3b3JrZXIucHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGFzay5kZXN0cm95ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRpbmcgYWJvcnRlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB3b3JrZXJJZFByb21pc2UgPSBfZmV0Y2hEb2N1bWVudCh3b3JrZXIsIHBhcmFtcywgcmFuZ2VUcmFuc3BvcnQsIGRvY0lkKTtcblxuICAgIGNvbnN0IG5ldHdvcmtTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIGxldCBuZXR3b3JrU3RyZWFtO1xuXG4gICAgICBpZiAocmFuZ2VUcmFuc3BvcnQpIHtcbiAgICAgICAgbmV0d29ya1N0cmVhbSA9IG5ldyBfdHJhbnNwb3J0X3N0cmVhbS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtKHtcbiAgICAgICAgICBsZW5ndGg6IHBhcmFtcy5sZW5ndGgsXG4gICAgICAgICAgaW5pdGlhbERhdGE6IHBhcmFtcy5pbml0aWFsRGF0YSxcbiAgICAgICAgICBwcm9ncmVzc2l2ZURvbmU6IHBhcmFtcy5wcm9ncmVzc2l2ZURvbmUsXG4gICAgICAgICAgZGlzYWJsZVJhbmdlOiBwYXJhbXMuZGlzYWJsZVJhbmdlLFxuICAgICAgICAgIGRpc2FibGVTdHJlYW06IHBhcmFtcy5kaXNhYmxlU3RyZWFtXG4gICAgICAgIH0sIHJhbmdlVHJhbnNwb3J0KTtcbiAgICAgIH0gZWxzZSBpZiAoIXBhcmFtcy5kYXRhKSB7XG4gICAgICAgIG5ldHdvcmtTdHJlYW0gPSBjcmVhdGVQREZOZXR3b3JrU3RyZWFtKHtcbiAgICAgICAgICB1cmw6IHBhcmFtcy51cmwsXG4gICAgICAgICAgbGVuZ3RoOiBwYXJhbXMubGVuZ3RoLFxuICAgICAgICAgIGh0dHBIZWFkZXJzOiBwYXJhbXMuaHR0cEhlYWRlcnMsXG4gICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiBwYXJhbXMud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiBwYXJhbXMucmFuZ2VDaHVua1NpemUsXG4gICAgICAgICAgZGlzYWJsZVJhbmdlOiBwYXJhbXMuZGlzYWJsZVJhbmdlLFxuICAgICAgICAgIGRpc2FibGVTdHJlYW06IHBhcmFtcy5kaXNhYmxlU3RyZWFtXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKG5ldHdvcmtTdHJlYW0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbd29ya2VySWRQcm9taXNlLCBuZXR3b3JrU3RyZWFtUHJvbWlzZV0pLnRoZW4oZnVuY3Rpb24gKFt3b3JrZXJJZCwgbmV0d29ya1N0cmVhbV0pIHtcbiAgICAgIGlmICh0YXNrLmRlc3Ryb3llZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkaW5nIGFib3J0ZWRcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VIYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoZG9jSWQsIHdvcmtlcklkLCB3b3JrZXIucG9ydCk7XG4gICAgICBtZXNzYWdlSGFuZGxlci5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IHdvcmtlci5wb3N0TWVzc2FnZVRyYW5zZmVycztcbiAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBXb3JrZXJUcmFuc3BvcnQobWVzc2FnZUhhbmRsZXIsIHRhc2ssIG5ldHdvcmtTdHJlYW0sIHBhcmFtcyk7XG4gICAgICB0YXNrLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4gICAgICBtZXNzYWdlSGFuZGxlci5zZW5kKFwiUmVhZHlcIiwgbnVsbCk7XG4gICAgfSk7XG4gIH0pLmNhdGNoKHRhc2suX2NhcGFiaWxpdHkucmVqZWN0KTtcbiAgcmV0dXJuIHRhc2s7XG59XG5cbmZ1bmN0aW9uIF9mZXRjaERvY3VtZW50KHdvcmtlciwgc291cmNlLCBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQsIGRvY0lkKSB7XG4gIGlmICh3b3JrZXIuZGVzdHJveWVkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkXCIpKTtcbiAgfVxuXG4gIGlmIChwZGZEYXRhUmFuZ2VUcmFuc3BvcnQpIHtcbiAgICBzb3VyY2UubGVuZ3RoID0gcGRmRGF0YVJhbmdlVHJhbnNwb3J0Lmxlbmd0aDtcbiAgICBzb3VyY2UuaW5pdGlhbERhdGEgPSBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQuaW5pdGlhbERhdGE7XG4gICAgc291cmNlLnByb2dyZXNzaXZlRG9uZSA9IHBkZkRhdGFSYW5nZVRyYW5zcG9ydC5wcm9ncmVzc2l2ZURvbmU7XG4gIH1cblxuICByZXR1cm4gd29ya2VyLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldERvY1JlcXVlc3RcIiwge1xuICAgIGRvY0lkLFxuICAgIGFwaVZlcnNpb246ICcyLjUuMjA3JyxcbiAgICBzb3VyY2U6IHtcbiAgICAgIGRhdGE6IHNvdXJjZS5kYXRhLFxuICAgICAgdXJsOiBzb3VyY2UudXJsLFxuICAgICAgcGFzc3dvcmQ6IHNvdXJjZS5wYXNzd29yZCxcbiAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IHNvdXJjZS5kaXNhYmxlQXV0b0ZldGNoLFxuICAgICAgcmFuZ2VDaHVua1NpemU6IHNvdXJjZS5yYW5nZUNodW5rU2l6ZSxcbiAgICAgIGxlbmd0aDogc291cmNlLmxlbmd0aFxuICAgIH0sXG4gICAgbWF4SW1hZ2VTaXplOiBzb3VyY2UubWF4SW1hZ2VTaXplLFxuICAgIGRpc2FibGVGb250RmFjZTogc291cmNlLmRpc2FibGVGb250RmFjZSxcbiAgICBwb3N0TWVzc2FnZVRyYW5zZmVyczogd29ya2VyLnBvc3RNZXNzYWdlVHJhbnNmZXJzLFxuICAgIGRvY0Jhc2VVcmw6IHNvdXJjZS5kb2NCYXNlVXJsLFxuICAgIGlnbm9yZUVycm9yczogc291cmNlLmlnbm9yZUVycm9ycyxcbiAgICBpc0V2YWxTdXBwb3J0ZWQ6IHNvdXJjZS5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgZm9udEV4dHJhUHJvcGVydGllczogc291cmNlLmZvbnRFeHRyYVByb3BlcnRpZXNcbiAgfSkudGhlbihmdW5jdGlvbiAod29ya2VySWQpIHtcbiAgICBpZiAod29ya2VyLmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV29ya2VyIHdhcyBkZXN0cm95ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmtlcklkO1xuICB9KTtcbn1cblxuY29uc3QgUERGRG9jdW1lbnRMb2FkaW5nVGFzayA9IGZ1bmN0aW9uIFBERkRvY3VtZW50TG9hZGluZ1Rhc2tDbG9zdXJlKCkge1xuICBsZXQgbmV4dERvY3VtZW50SWQgPSAwO1xuXG4gIGNsYXNzIFBERkRvY3VtZW50TG9hZGluZ1Rhc2sge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5fY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IG51bGw7XG4gICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xuICAgICAgdGhpcy5kb2NJZCA9IFwiZFwiICsgbmV4dERvY3VtZW50SWQrKztcbiAgICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgICB0aGlzLm9uUGFzc3dvcmQgPSBudWxsO1xuICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMub25VbnN1cHBvcnRlZEZlYXR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgY29uc3QgdHJhbnNwb3J0RGVzdHJveWVkID0gIXRoaXMuX3RyYW5zcG9ydCA/IFByb21pc2UucmVzb2x2ZSgpIDogdGhpcy5fdHJhbnNwb3J0LmRlc3Ryb3koKTtcbiAgICAgIHJldHVybiB0cmFuc3BvcnREZXN0cm95ZWQudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dvcmtlcikge1xuICAgICAgICAgIHRoaXMuX3dvcmtlci5kZXN0cm95KCk7XG5cbiAgICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBQREZEb2N1bWVudExvYWRpbmdUYXNrO1xufSgpO1xuXG5jbGFzcyBQREZEYXRhUmFuZ2VUcmFuc3BvcnQge1xuICBjb25zdHJ1Y3RvcihsZW5ndGgsIGluaXRpYWxEYXRhLCBwcm9ncmVzc2l2ZURvbmUgPSBmYWxzZSkge1xuICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgIHRoaXMuaW5pdGlhbERhdGEgPSBpbml0aWFsRGF0YTtcbiAgICB0aGlzLnByb2dyZXNzaXZlRG9uZSA9IHByb2dyZXNzaXZlRG9uZTtcbiAgICB0aGlzLl9yYW5nZUxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3Byb2dyZXNzTGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fcmVhZHlDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICB9XG5cbiAgYWRkUmFuZ2VMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIHRoaXMuX3JhbmdlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgYWRkUHJvZ3Jlc3NMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIHRoaXMuX3Byb2dyZXNzTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICB0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICBhZGRQcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIHRoaXMuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIG9uRGF0YVJhbmdlKGJlZ2luLCBjaHVuaykge1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fcmFuZ2VMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGJlZ2luLCBjaHVuayk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhUHJvZ3Jlc3MobG9hZGVkLCB0b3RhbCkge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9wcm9ncmVzc0xpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcihsb2FkZWQsIHRvdGFsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRGF0YVByb2dyZXNzaXZlUmVhZChjaHVuaykge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIoY2h1bmspO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25EYXRhUHJvZ3Jlc3NpdmVEb25lKCkge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9wcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRyYW5zcG9ydFJlYWR5KCkge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gIH1cblxuICByZXF1ZXN0RGF0YVJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIFBERkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlXCIpO1xuICB9XG5cbiAgYWJvcnQoKSB7fVxuXG59XG5cbmV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0ID0gUERGRGF0YVJhbmdlVHJhbnNwb3J0O1xuXG5jbGFzcyBQREZEb2N1bWVudFByb3h5IHtcbiAgY29uc3RydWN0b3IocGRmSW5mbywgdHJhbnNwb3J0KSB7XG4gICAgdGhpcy5fcGRmSW5mbyA9IHBkZkluZm87XG4gICAgdGhpcy5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuICB9XG5cbiAgZ2V0IG51bVBhZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9wZGZJbmZvLm51bVBhZ2VzO1xuICB9XG5cbiAgZ2V0IGZpbmdlcnByaW50KCkge1xuICAgIHJldHVybiB0aGlzLl9wZGZJbmZvLmZpbmdlcnByaW50O1xuICB9XG5cbiAgZ2V0UGFnZShwYWdlTnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlKHBhZ2VOdW1iZXIpO1xuICB9XG5cbiAgZ2V0UGFnZUluZGV4KHJlZikge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZUluZGV4KHJlZik7XG4gIH1cblxuICBnZXREZXN0aW5hdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKTtcbiAgfVxuXG4gIGdldERlc3RpbmF0aW9uKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbihpZCk7XG4gIH1cblxuICBnZXRQYWdlTGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZUxhYmVscygpO1xuICB9XG5cbiAgZ2V0UGFnZUxheW91dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYXlvdXQoKTtcbiAgfVxuXG4gIGdldFBhZ2VNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZU1vZGUoKTtcbiAgfVxuXG4gIGdldFZpZXdlclByZWZlcmVuY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0Vmlld2VyUHJlZmVyZW5jZXMoKTtcbiAgfVxuXG4gIGdldE9wZW5BY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRPcGVuQWN0aW9uKCk7XG4gIH1cblxuICBnZXRPcGVuQWN0aW9uRGVzdGluYXRpb24oKSB7XG4gICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKFwiZ2V0T3BlbkFjdGlvbkRlc3RpbmF0aW9uLCB1c2UgZ2V0T3BlbkFjdGlvbiBpbnN0ZWFkLlwiKTtcbiAgICByZXR1cm4gdGhpcy5nZXRPcGVuQWN0aW9uKCkudGhlbihmdW5jdGlvbiAob3BlbkFjdGlvbikge1xuICAgICAgcmV0dXJuIG9wZW5BY3Rpb24gJiYgb3BlbkFjdGlvbi5kZXN0ID8gb3BlbkFjdGlvbi5kZXN0IDogbnVsbDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEF0dGFjaG1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0QXR0YWNobWVudHMoKTtcbiAgfVxuXG4gIGdldEphdmFTY3JpcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRKYXZhU2NyaXB0KCk7XG4gIH1cblxuICBnZXRPdXRsaW5lKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3V0bGluZSgpO1xuICB9XG5cbiAgZ2V0UGVybWlzc2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQZXJtaXNzaW9ucygpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNZXRhZGF0YSgpO1xuICB9XG5cbiAgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERhdGEoKTtcbiAgfVxuXG4gIGdldERvd25sb2FkSW5mbygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmRvd25sb2FkSW5mb0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGdldFN0YXRzKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0U3RhdHMoKTtcbiAgfVxuXG4gIGNsZWFudXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zdGFydENsZWFudXAoKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1Rhc2suZGVzdHJveSgpO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmdQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5sb2FkaW5nUGFyYW1zO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmdUYXNrKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1Rhc2s7XG4gIH1cblxufVxuXG5leHBvcnRzLlBERkRvY3VtZW50UHJveHkgPSBQREZEb2N1bWVudFByb3h5O1xuXG5jbGFzcyBQREZQYWdlUHJveHkge1xuICBjb25zdHJ1Y3RvcihwYWdlSW5kZXgsIHBhZ2VJbmZvLCB0cmFuc3BvcnQsIHBkZkJ1ZyA9IGZhbHNlKSB7XG4gICAgdGhpcy5fcGFnZUluZGV4ID0gcGFnZUluZGV4O1xuICAgIHRoaXMuX3BhZ2VJbmZvID0gcGFnZUluZm87XG4gICAgdGhpcy5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuICAgIHRoaXMuX3N0YXRzID0gcGRmQnVnID8gbmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcigpIDogbnVsbDtcbiAgICB0aGlzLl9wZGZCdWcgPSBwZGZCdWc7XG4gICAgdGhpcy5jb21tb25PYmpzID0gdHJhbnNwb3J0LmNvbW1vbk9ianM7XG4gICAgdGhpcy5vYmpzID0gbmV3IFBERk9iamVjdHMoKTtcbiAgICB0aGlzLmNsZWFudXBBZnRlclJlbmRlciA9IGZhbHNlO1xuICAgIHRoaXMucGVuZGluZ0NsZWFudXAgPSBmYWxzZTtcbiAgICB0aGlzLmludGVudFN0YXRlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGdldCBwYWdlTnVtYmVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlSW5kZXggKyAxO1xuICB9XG5cbiAgZ2V0IHJvdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUluZm8ucm90YXRlO1xuICB9XG5cbiAgZ2V0IHJlZigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUluZm8ucmVmO1xuICB9XG5cbiAgZ2V0IHVzZXJVbml0KCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby51c2VyVW5pdDtcbiAgfVxuXG4gIGdldCB2aWV3KCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby52aWV3O1xuICB9XG5cbiAgZ2V0Vmlld3BvcnQoe1xuICAgIHNjYWxlLFxuICAgIHJvdGF0aW9uID0gdGhpcy5yb3RhdGUsXG4gICAgb2Zmc2V0WCA9IDAsXG4gICAgb2Zmc2V0WSA9IDAsXG4gICAgZG9udEZsaXAgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IF9kaXNwbGF5X3V0aWxzLlBhZ2VWaWV3cG9ydCh7XG4gICAgICB2aWV3Qm94OiB0aGlzLnZpZXcsXG4gICAgICBzY2FsZSxcbiAgICAgIHJvdGF0aW9uLFxuICAgICAgb2Zmc2V0WCxcbiAgICAgIG9mZnNldFksXG4gICAgICBkb250RmxpcFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QW5ub3RhdGlvbnMoe1xuICAgIGludGVudCA9IG51bGxcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmFubm90YXRpb25zUHJvbWlzZSB8fCB0aGlzLmFubm90YXRpb25zSW50ZW50ICE9PSBpbnRlbnQpIHtcbiAgICAgIHRoaXMuYW5ub3RhdGlvbnNQcm9taXNlID0gdGhpcy5fdHJhbnNwb3J0LmdldEFubm90YXRpb25zKHRoaXMuX3BhZ2VJbmRleCwgaW50ZW50KTtcbiAgICAgIHRoaXMuYW5ub3RhdGlvbnNJbnRlbnQgPSBpbnRlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYW5ub3RhdGlvbnNQcm9taXNlO1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBjYW52YXNDb250ZXh0LFxuICAgIHZpZXdwb3J0LFxuICAgIGludGVudCA9IFwiZGlzcGxheVwiLFxuICAgIGVuYWJsZVdlYkdMID0gZmFsc2UsXG4gICAgcmVuZGVySW50ZXJhY3RpdmVGb3JtcyA9IGZhbHNlLFxuICAgIHRyYW5zZm9ybSA9IG51bGwsXG4gICAgaW1hZ2VMYXllciA9IG51bGwsXG4gICAgY2FudmFzRmFjdG9yeSA9IG51bGwsXG4gICAgYmFja2dyb3VuZCA9IG51bGxcbiAgfSkge1xuICAgIGlmICh0aGlzLl9zdGF0cykge1xuICAgICAgdGhpcy5fc3RhdHMudGltZShcIk92ZXJhbGxcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyaW5nSW50ZW50ID0gaW50ZW50ID09PSBcInByaW50XCIgPyBcInByaW50XCIgOiBcImRpc3BsYXlcIjtcbiAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuaW50ZW50U3RhdGVzW3JlbmRlcmluZ0ludGVudF0pIHtcbiAgICAgIHRoaXMuaW50ZW50U3RhdGVzW3JlbmRlcmluZ0ludGVudF0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVudFN0YXRlID0gdGhpcy5pbnRlbnRTdGF0ZXNbcmVuZGVyaW5nSW50ZW50XTtcblxuICAgIGlmIChpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCk7XG4gICAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjYW52YXNGYWN0b3J5SW5zdGFuY2UgPSBjYW52YXNGYWN0b3J5IHx8IG5ldyBfZGlzcGxheV91dGlscy5ET01DYW52YXNGYWN0b3J5KCk7XG4gICAgY29uc3Qgd2ViR0xDb250ZXh0ID0gbmV3IF93ZWJnbC5XZWJHTENvbnRleHQoe1xuICAgICAgZW5hYmxlOiBlbmFibGVXZWJHTFxuICAgIH0pO1xuXG4gICAgaWYgKCFpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KSB7XG4gICAgICBpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0ID0ge1xuICAgICAgICBmbkFycmF5OiBbXSxcbiAgICAgICAgYXJnc0FycmF5OiBbXSxcbiAgICAgICAgbGFzdENodW5rOiBmYWxzZVxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuX3N0YXRzKSB7XG4gICAgICAgIHRoaXMuX3N0YXRzLnRpbWUoXCJQYWdlIFJlcXVlc3RcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3B1bXBPcGVyYXRvckxpc3Qoe1xuICAgICAgICBwYWdlSW5kZXg6IHRoaXMuX3BhZ2VJbmRleCxcbiAgICAgICAgaW50ZW50OiByZW5kZXJpbmdJbnRlbnQsXG4gICAgICAgIHJlbmRlckludGVyYWN0aXZlRm9ybXM6IHJlbmRlckludGVyYWN0aXZlRm9ybXMgPT09IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gZXJyb3IgPT4ge1xuICAgICAgY29uc3QgaSA9IGludGVudFN0YXRlLnJlbmRlclRhc2tzLmluZGV4T2YoaW50ZXJuYWxSZW5kZXJUYXNrKTtcblxuICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNsZWFudXBBZnRlclJlbmRlciB8fCByZW5kZXJpbmdJbnRlbnQgPT09IFwicHJpbnRcIikge1xuICAgICAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdHJ5Q2xlYW51cCgpO1xuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucmVqZWN0KGVycm9yKTtcblxuICAgICAgICB0aGlzLl9hYm9ydE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgaW50ZW50U3RhdGUsXG4gICAgICAgICAgcmVhc29uOiBlcnJvclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVybmFsUmVuZGVyVGFzay5jYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3N0YXRzKSB7XG4gICAgICAgIHRoaXMuX3N0YXRzLnRpbWVFbmQoXCJSZW5kZXJpbmdcIik7XG5cbiAgICAgICAgdGhpcy5fc3RhdHMudGltZUVuZChcIk92ZXJhbGxcIik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGludGVybmFsUmVuZGVyVGFzayA9IG5ldyBJbnRlcm5hbFJlbmRlclRhc2soe1xuICAgICAgY2FsbGJhY2s6IGNvbXBsZXRlLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGNhbnZhc0NvbnRleHQsXG4gICAgICAgIHZpZXdwb3J0LFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIGltYWdlTGF5ZXIsXG4gICAgICAgIGJhY2tncm91bmRcbiAgICAgIH0sXG4gICAgICBvYmpzOiB0aGlzLm9ianMsXG4gICAgICBjb21tb25PYmpzOiB0aGlzLmNvbW1vbk9ianMsXG4gICAgICBvcGVyYXRvckxpc3Q6IGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCxcbiAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZGV4LFxuICAgICAgY2FudmFzRmFjdG9yeTogY2FudmFzRmFjdG9yeUluc3RhbmNlLFxuICAgICAgd2ViR0xDb250ZXh0LFxuICAgICAgdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOiByZW5kZXJpbmdJbnRlbnQgIT09IFwicHJpbnRcIixcbiAgICAgIHBkZkJ1ZzogdGhpcy5fcGRmQnVnXG4gICAgfSk7XG5cbiAgICBpZiAoIWludGVudFN0YXRlLnJlbmRlclRhc2tzKSB7XG4gICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcyA9IFtdO1xuICAgIH1cblxuICAgIGludGVudFN0YXRlLnJlbmRlclRhc2tzLnB1c2goaW50ZXJuYWxSZW5kZXJUYXNrKTtcbiAgICBjb25zdCByZW5kZXJUYXNrID0gaW50ZXJuYWxSZW5kZXJUYXNrLnRhc2s7XG4gICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4odHJhbnNwYXJlbmN5ID0+IHtcbiAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGVhbnVwKSB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3N0YXRzKSB7XG4gICAgICAgIHRoaXMuX3N0YXRzLnRpbWUoXCJSZW5kZXJpbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGludGVybmFsUmVuZGVyVGFzay5pbml0aWFsaXplR3JhcGhpY3ModHJhbnNwYXJlbmN5KTtcbiAgICAgIGludGVybmFsUmVuZGVyVGFzay5vcGVyYXRvckxpc3RDaGFuZ2VkKCk7XG4gICAgfSkuY2F0Y2goY29tcGxldGUpO1xuICAgIHJldHVybiByZW5kZXJUYXNrO1xuICB9XG5cbiAgZ2V0T3BlcmF0b3JMaXN0KCkge1xuICAgIGZ1bmN0aW9uIG9wZXJhdG9yTGlzdENoYW5nZWQoKSB7XG4gICAgICBpZiAoaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaykge1xuICAgICAgICBpbnRlbnRTdGF0ZS5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCk7XG4gICAgICAgIGNvbnN0IGkgPSBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5pbmRleE9mKG9wTGlzdFRhc2spO1xuXG4gICAgICAgIGlmIChpID49IDApIHtcbiAgICAgICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJpbmdJbnRlbnQgPSBcIm9wbGlzdFwiO1xuXG4gICAgaWYgKCF0aGlzLmludGVudFN0YXRlc1tyZW5kZXJpbmdJbnRlbnRdKSB7XG4gICAgICB0aGlzLmludGVudFN0YXRlc1tyZW5kZXJpbmdJbnRlbnRdID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlbnRTdGF0ZSA9IHRoaXMuaW50ZW50U3RhdGVzW3JlbmRlcmluZ0ludGVudF07XG4gICAgbGV0IG9wTGlzdFRhc2s7XG5cbiAgICBpZiAoIWludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5KSB7XG4gICAgICBvcExpc3RUYXNrID0ge307XG4gICAgICBvcExpc3RUYXNrLm9wZXJhdG9yTGlzdENoYW5nZWQgPSBvcGVyYXRvckxpc3RDaGFuZ2VkO1xuICAgICAgaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcyA9IFtdO1xuICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MucHVzaChvcExpc3RUYXNrKTtcbiAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCA9IHtcbiAgICAgICAgZm5BcnJheTogW10sXG4gICAgICAgIGFyZ3NBcnJheTogW10sXG4gICAgICAgIGxhc3RDaHVuazogZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLl9zdGF0cykge1xuICAgICAgICB0aGlzLl9zdGF0cy50aW1lKFwiUGFnZSBSZXF1ZXN0XCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KHtcbiAgICAgICAgcGFnZUluZGV4OiB0aGlzLl9wYWdlSW5kZXgsXG4gICAgICAgIGludGVudDogcmVuZGVyaW5nSW50ZW50XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHN0cmVhbVRleHRDb250ZW50KHtcbiAgICBub3JtYWxpemVXaGl0ZXNwYWNlID0gZmFsc2UsXG4gICAgZGlzYWJsZUNvbWJpbmVUZXh0SXRlbXMgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICBjb25zdCBURVhUX0NPTlRFTlRfQ0hVTktfU0laRSA9IDEwMDtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0Lm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKFwiR2V0VGV4dENvbnRlbnRcIiwge1xuICAgICAgcGFnZUluZGV4OiB0aGlzLl9wYWdlSW5kZXgsXG4gICAgICBub3JtYWxpemVXaGl0ZXNwYWNlOiBub3JtYWxpemVXaGl0ZXNwYWNlID09PSB0cnVlLFxuICAgICAgY29tYmluZVRleHRJdGVtczogZGlzYWJsZUNvbWJpbmVUZXh0SXRlbXMgIT09IHRydWVcbiAgICB9LCB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiBURVhUX0NPTlRFTlRfQ0hVTktfU0laRSxcblxuICAgICAgc2l6ZSh0ZXh0Q29udGVudCkge1xuICAgICAgICByZXR1cm4gdGV4dENvbnRlbnQuaXRlbXMubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgfSk7XG4gIH1cblxuICBnZXRUZXh0Q29udGVudChwYXJhbXMgPSB7fSkge1xuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5zdHJlYW1UZXh0Q29udGVudChwYXJhbXMpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBwdW1wKCkge1xuICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBkb25lXG4gICAgICAgIH0pIHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0ZXh0Q29udGVudC5zdHlsZXMsIHZhbHVlLnN0eWxlcyk7XG4gICAgICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCguLi52YWx1ZS5pdGVtcyk7XG4gICAgICAgICAgcHVtcCgpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgIGNvbnN0IHRleHRDb250ZW50ID0ge1xuICAgICAgICBpdGVtczogW10sXG4gICAgICAgIHN0eWxlczogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgfTtcbiAgICAgIHB1bXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9kZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLl90cmFuc3BvcnQucGFnZUNhY2hlW3RoaXMuX3BhZ2VJbmRleF0gPSBudWxsO1xuICAgIGNvbnN0IHdhaXRPbiA9IFtdO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuaW50ZW50U3RhdGVzKS5mb3JFYWNoKGludGVudCA9PiB7XG4gICAgICBjb25zdCBpbnRlbnRTdGF0ZSA9IHRoaXMuaW50ZW50U3RhdGVzW2ludGVudF07XG5cbiAgICAgIHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgaW50ZW50U3RhdGUsXG4gICAgICAgIHJlYXNvbjogbmV3IEVycm9yKFwiUGFnZSB3YXMgZGVzdHJveWVkLlwiKSxcbiAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaW50ZW50ID09PSBcIm9wbGlzdFwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MuZm9yRWFjaChmdW5jdGlvbiAocmVuZGVyVGFzaykge1xuICAgICAgICBjb25zdCByZW5kZXJDb21wbGV0ZWQgPSByZW5kZXJUYXNrLmNhcGFiaWxpdHkucHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgIHdhaXRPbi5wdXNoKHJlbmRlckNvbXBsZXRlZCk7XG4gICAgICAgIHJlbmRlclRhc2suY2FuY2VsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLm9ianMuY2xlYXIoKTtcbiAgICB0aGlzLmFubm90YXRpb25zUHJvbWlzZSA9IG51bGw7XG4gICAgdGhpcy5wZW5kaW5nQ2xlYW51cCA9IGZhbHNlO1xuICAgIHJldHVybiBQcm9taXNlLmFsbCh3YWl0T24pO1xuICB9XG5cbiAgY2xlYW51cChyZXNldFN0YXRzID0gZmFsc2UpIHtcbiAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5fdHJ5Q2xlYW51cChyZXNldFN0YXRzKTtcbiAgfVxuXG4gIF90cnlDbGVhbnVwKHJlc2V0U3RhdHMgPSBmYWxzZSkge1xuICAgIGlmICghdGhpcy5wZW5kaW5nQ2xlYW51cCB8fCBPYmplY3Qua2V5cyh0aGlzLmludGVudFN0YXRlcykuc29tZShpbnRlbnQgPT4ge1xuICAgICAgY29uc3QgaW50ZW50U3RhdGUgPSB0aGlzLmludGVudFN0YXRlc1tpbnRlbnRdO1xuICAgICAgcmV0dXJuIGludGVudFN0YXRlLnJlbmRlclRhc2tzLmxlbmd0aCAhPT0gMCB8fCAhaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaztcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKHRoaXMuaW50ZW50U3RhdGVzKS5mb3JFYWNoKGludGVudCA9PiB7XG4gICAgICBkZWxldGUgdGhpcy5pbnRlbnRTdGF0ZXNbaW50ZW50XTtcbiAgICB9KTtcbiAgICB0aGlzLm9ianMuY2xlYXIoKTtcbiAgICB0aGlzLmFubm90YXRpb25zUHJvbWlzZSA9IG51bGw7XG5cbiAgICBpZiAocmVzZXRTdGF0cyAmJiB0aGlzLl9zdGF0cykge1xuICAgICAgdGhpcy5fc3RhdHMgPSBuZXcgX2Rpc3BsYXlfdXRpbHMuU3RhdFRpbWVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ2xlYW51cCA9IGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgX3N0YXJ0UmVuZGVyUGFnZSh0cmFuc3BhcmVuY3ksIGludGVudCkge1xuICAgIGNvbnN0IGludGVudFN0YXRlID0gdGhpcy5pbnRlbnRTdGF0ZXNbaW50ZW50XTtcblxuICAgIGlmICghaW50ZW50U3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdHMpIHtcbiAgICAgIHRoaXMuX3N0YXRzLnRpbWVFbmQoXCJQYWdlIFJlcXVlc3RcIik7XG4gICAgfVxuXG4gICAgaWYgKGludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpIHtcbiAgICAgIGludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSh0cmFuc3BhcmVuY3kpO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXJQYWdlQ2h1bmsob3BlcmF0b3JMaXN0Q2h1bmssIGludGVudFN0YXRlKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3BlcmF0b3JMaXN0Q2h1bmsubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LmZuQXJyYXkucHVzaChvcGVyYXRvckxpc3RDaHVuay5mbkFycmF5W2ldKTtcbiAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5hcmdzQXJyYXkucHVzaChvcGVyYXRvckxpc3RDaHVuay5hcmdzQXJyYXlbaV0pO1xuICAgIH1cblxuICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmsgPSBvcGVyYXRvckxpc3RDaHVuay5sYXN0Q2h1bms7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludGVudFN0YXRlLnJlbmRlclRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrc1tpXS5vcGVyYXRvckxpc3RDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdG9yTGlzdENodW5rLmxhc3RDaHVuaykge1xuICAgICAgdGhpcy5fdHJ5Q2xlYW51cCgpO1xuICAgIH1cbiAgfVxuXG4gIF9wdW1wT3BlcmF0b3JMaXN0KGFyZ3MpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KShhcmdzLmludGVudCwgJ1BERlBhZ2VQcm94eS5fcHVtcE9wZXJhdG9yTGlzdDogRXhwZWN0ZWQgXCJpbnRlbnRcIiBhcmd1bWVudC4nKTtcblxuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5fdHJhbnNwb3J0Lm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKFwiR2V0T3BlcmF0b3JMaXN0XCIsIGFyZ3MpO1xuXG4gICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgY29uc3QgaW50ZW50U3RhdGUgPSB0aGlzLmludGVudFN0YXRlc1thcmdzLmludGVudF07XG4gICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyID0gcmVhZGVyO1xuXG4gICAgY29uc3QgcHVtcCA9ICgpID0+IHtcbiAgICAgIHJlYWRlci5yZWFkKCkudGhlbigoe1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZG9uZVxuICAgICAgfSkgPT4ge1xuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlciA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3RyYW5zcG9ydC5kZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZW5kZXJQYWdlQ2h1bmsodmFsdWUsIGludGVudFN0YXRlKTtcblxuICAgICAgICBwdW1wKCk7XG4gICAgICB9LCByZWFzb24gPT4ge1xuICAgICAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXIgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCkge1xuICAgICAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmsgPSB0cnVlO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3NbaV0ub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3RyeUNsZWFudXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlbnRTdGF0ZS5vcExpc3RSZWFkQ2FwYWJpbGl0eSkge1xuICAgICAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHB1bXAoKTtcbiAgfVxuXG4gIF9hYm9ydE9wZXJhdG9yTGlzdCh7XG4gICAgaW50ZW50U3RhdGUsXG4gICAgcmVhc29uLFxuICAgIGZvcmNlID0gZmFsc2VcbiAgfSkge1xuICAgICgwLCBfdXRpbC5hc3NlcnQpKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiByZWFzb24gPT09IFwib2JqZWN0XCIgJiYgcmVhc29uICE9PSBudWxsLCAnUERGUGFnZVByb3h5Ll9hYm9ydE9wZXJhdG9yTGlzdDogRXhwZWN0ZWQgXCJyZWFzb25cIiBhcmd1bWVudC4nKTtcblxuICAgIGlmICghaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgaWYgKGludGVudFN0YXRlLnJlbmRlclRhc2tzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfZGlzcGxheV91dGlscy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24pIHtcbiAgICAgICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgICAgIGludGVudFN0YXRlLFxuICAgICAgICAgICAgcmVhc29uLFxuICAgICAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9LCBSRU5ERVJJTkdfQ0FOQ0VMTEVEX1RJTUVPVVQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyLmNhbmNlbChuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24ocmVhc29uICYmIHJlYXNvbi5tZXNzYWdlKSk7XG4gICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXModGhpcy5pbnRlbnRTdGF0ZXMpLnNvbWUoaW50ZW50ID0+IHtcbiAgICAgIGlmICh0aGlzLmludGVudFN0YXRlc1tpbnRlbnRdID09PSBpbnRlbnRTdGF0ZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5pbnRlbnRTdGF0ZXNbaW50ZW50XTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgfVxuXG4gIGdldCBzdGF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHM7XG4gIH1cblxufVxuXG5leHBvcnRzLlBERlBhZ2VQcm94eSA9IFBERlBhZ2VQcm94eTtcblxuY2xhc3MgTG9vcGJhY2tQb3J0IHtcbiAgY29uc3RydWN0b3IoZGVmZXIgPSB0cnVlKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fZGVmZXIgPSBkZWZlcjtcbiAgICB0aGlzLl9kZWZlcnJlZCA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgcG9zdE1lc3NhZ2Uob2JqLCB0cmFuc2ZlcnMpIHtcbiAgICBmdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsb25lZC5oYXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBjbG9uZWQuZ2V0KHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGJ1ZmZlciwgcmVzdWx0O1xuXG4gICAgICBpZiAoKGJ1ZmZlciA9IHZhbHVlLmJ1ZmZlcikgJiYgKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKGJ1ZmZlcikpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmZXJhYmxlID0gdHJhbnNmZXJzICYmIHRyYW5zZmVycy5pbmNsdWRlcyhidWZmZXIpO1xuXG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGUpIHtcbiAgICAgICAgICByZXN1bHQgPSBuZXcgdmFsdWUuY29uc3RydWN0b3IoYnVmZmVyLCB2YWx1ZS5ieXRlT2Zmc2V0LCB2YWx1ZS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBuZXcgdmFsdWUuY29uc3RydWN0b3IodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvbmVkLnNldCh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9O1xuICAgICAgY2xvbmVkLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgICAgZm9yIChjb25zdCBpIGluIHZhbHVlKSB7XG4gICAgICAgIGxldCBkZXNjLFxuICAgICAgICAgICAgcCA9IHZhbHVlO1xuXG4gICAgICAgIHdoaWxlICghKGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHAsIGkpKSkge1xuICAgICAgICAgIHAgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5ICYmIHZhbHVlLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExvb3BiYWNrUG9ydC5wb3N0TWVzc2FnZSAtIGNhbm5vdCBjbG9uZTogJHt2YWx1ZVtpXX1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdFtpXSA9IGNsb25lVmFsdWUoZGVzYy52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9kZWZlcikge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIHtcbiAgICAgICAgICBkYXRhOiBvYmpcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lZCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZSA9IHtcbiAgICAgIGRhdGE6IGNsb25lVmFsdWUob2JqKVxuICAgIH07XG5cbiAgICB0aGlzLl9kZWZlcnJlZC50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lcikge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBpID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgfVxuXG4gIHRlcm1pbmF0ZSgpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoID0gMDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTG9vcGJhY2tQb3J0ID0gTG9vcGJhY2tQb3J0O1xuXG5jb25zdCBQREZXb3JrZXIgPSBmdW5jdGlvbiBQREZXb3JrZXJDbG9zdXJlKCkge1xuICBjb25zdCBwZGZXb3JrZXJQb3J0cyA9IG5ldyBXZWFrTWFwKCk7XG4gIGxldCBpc1dvcmtlckRpc2FibGVkID0gZmFsc2U7XG4gIGxldCBmYWxsYmFja1dvcmtlclNyYztcbiAgbGV0IG5leHRGYWtlV29ya2VySWQgPSAwO1xuICBsZXQgZmFrZVdvcmtlckNhcGFiaWxpdHk7XG5cbiAgaWYgKF9pc19ub2RlLmlzTm9kZUpTICYmIHR5cGVvZiByZXF1aXJlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpc1dvcmtlckRpc2FibGVkID0gdHJ1ZTtcbiAgICBmYWxsYmFja1dvcmtlclNyYyA9IFwiLi9wZGYud29ya2VyLmpzXCI7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcIm9iamVjdFwiICYmIFwiY3VycmVudFNjcmlwdFwiIGluIGRvY3VtZW50KSB7XG4gICAgY29uc3QgcGRmanNGaWxlUGF0aCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cbiAgICBpZiAocGRmanNGaWxlUGF0aCkge1xuICAgICAgZmFsbGJhY2tXb3JrZXJTcmMgPSBwZGZqc0ZpbGVQYXRoLnJlcGxhY2UoLyhcXC4oPzptaW5cXC4pP2pzKShcXD8uKik/JC9pLCBcIi53b3JrZXIkMSQyXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFdvcmtlclNyYygpIHtcbiAgICBpZiAoX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjKSB7XG4gICAgICByZXR1cm4gX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFsbGJhY2tXb3JrZXJTcmMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmICghX2lzX25vZGUuaXNOb2RlSlMpIHtcbiAgICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKCdObyBcIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjXCIgc3BlY2lmaWVkLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsbGJhY2tXb3JrZXJTcmM7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBcIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjXCIgc3BlY2lmaWVkLicpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TWFpblRocmVhZFdvcmtlck1lc3NhZ2VIYW5kbGVyKCkge1xuICAgIGxldCBtYWluV29ya2VyTWVzc2FnZUhhbmRsZXI7XG5cbiAgICB0cnkge1xuICAgICAgbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyID0gZ2xvYmFsVGhpcy5wZGZqc1dvcmtlciAmJiBnbG9iYWxUaGlzLnBkZmpzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgcmV0dXJuIG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlciB8fCBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dXBGYWtlV29ya2VyR2xvYmFsKCkge1xuICAgIGlmIChmYWtlV29ya2VyQ2FwYWJpbGl0eSkge1xuICAgICAgcmV0dXJuIGZha2VXb3JrZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgfVxuXG4gICAgZmFrZVdvcmtlckNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICBjb25zdCBsb2FkZXIgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtYWluV29ya2VyTWVzc2FnZUhhbmRsZXIgPSBnZXRNYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIoKTtcblxuICAgICAgaWYgKG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcikge1xuICAgICAgICByZXR1cm4gbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2lzX25vZGUuaXNOb2RlSlMgJiYgdHlwZW9mIHJlcXVpcmUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCB3b3JrZXIgPSBldmFsKFwicmVxdWlyZVwiKShnZXRXb3JrZXJTcmMoKSk7XG4gICAgICAgIHJldHVybiB3b3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXI7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0ICgwLCBfZGlzcGxheV91dGlscy5sb2FkU2NyaXB0KShnZXRXb3JrZXJTcmMoKSk7XG4gICAgICByZXR1cm4gd2luZG93LnBkZmpzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICAgIH07XG5cbiAgICBsb2FkZXIoKS50aGVuKGZha2VXb3JrZXJDYXBhYmlsaXR5LnJlc29sdmUsIGZha2VXb3JrZXJDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgcmV0dXJuIGZha2VXb3JrZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDRE5XcmFwcGVyKHVybCkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBcImltcG9ydFNjcmlwdHMoJ1wiICsgdXJsICsgXCInKTtcIjtcbiAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbd3JhcHBlcl0pKTtcbiAgfVxuXG4gIGNsYXNzIFBERldvcmtlciB7XG4gICAgY29uc3RydWN0b3Ioe1xuICAgICAgbmFtZSA9IG51bGwsXG4gICAgICBwb3J0ID0gbnVsbCxcbiAgICAgIHZlcmJvc2l0eSA9ICgwLCBfdXRpbC5nZXRWZXJib3NpdHlMZXZlbCkoKVxuICAgIH0gPSB7fSkge1xuICAgICAgaWYgKHBvcnQgJiYgcGRmV29ya2VyUG9ydHMuaGFzKHBvcnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgbW9yZSB0aGFuIG9uZSBQREZXb3JrZXIgcGVyIHBvcnRcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IHRydWU7XG4gICAgICB0aGlzLnZlcmJvc2l0eSA9IHZlcmJvc2l0eTtcbiAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIHRoaXMuX3BvcnQgPSBudWxsO1xuICAgICAgdGhpcy5fd2ViV29ya2VyID0gbnVsbDtcbiAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyID0gbnVsbDtcblxuICAgICAgaWYgKHBvcnQpIHtcbiAgICAgICAgcGRmV29ya2VyUG9ydHMuc2V0KHBvcnQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVGcm9tUG9ydChwb3J0KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2luaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9XG5cbiAgICBnZXQgcG9ydCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wb3J0O1xuICAgIH1cblxuICAgIGdldCBtZXNzYWdlSGFuZGxlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGFuZGxlcjtcbiAgICB9XG5cbiAgICBfaW5pdGlhbGl6ZUZyb21Qb3J0KHBvcnQpIHtcbiAgICAgIHRoaXMuX3BvcnQgPSBwb3J0O1xuICAgICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihcIm1haW5cIiwgXCJ3b3JrZXJcIiwgcG9ydCk7XG5cbiAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyLm9uKFwicmVhZHlcIiwgZnVuY3Rpb24gKCkge30pO1xuXG4gICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIF9pbml0aWFsaXplKCkge1xuICAgICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgIWlzV29ya2VyRGlzYWJsZWQgJiYgIWdldE1haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcigpKSB7XG4gICAgICAgIGxldCB3b3JrZXJTcmMgPSBnZXRXb3JrZXJTcmMoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghKDAsIF91dGlsLmlzU2FtZU9yaWdpbikod2luZG93LmxvY2F0aW9uLmhyZWYsIHdvcmtlclNyYykpIHtcbiAgICAgICAgICAgIHdvcmtlclNyYyA9IGNyZWF0ZUNETldyYXBwZXIobmV3IFVSTCh3b3JrZXJTcmMsIHdpbmRvdy5sb2NhdGlvbikuaHJlZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJTcmMpO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VIYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoXCJtYWluXCIsIFwid29ya2VyXCIsIHdvcmtlcik7XG5cbiAgICAgICAgICBjb25zdCB0ZXJtaW5hdGVFYXJseSA9ICgpID0+IHtcbiAgICAgICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25Xb3JrZXJFcnJvcik7XG4gICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX3NldHVwRmFrZVdvcmtlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBvbldvcmtlckVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWJXb3JrZXIpIHtcbiAgICAgICAgICAgICAgdGVybWluYXRlRWFybHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbldvcmtlckVycm9yKTtcbiAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbihcInRlc3RcIiwgZGF0YSA9PiB7XG4gICAgICAgICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uV29ya2VyRXJyb3IpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgdGVybWluYXRlRWFybHkoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG1lc3NhZ2VIYW5kbGVyO1xuICAgICAgICAgICAgICB0aGlzLl9wb3J0ID0gd29ya2VyO1xuICAgICAgICAgICAgICB0aGlzLl93ZWJXb3JrZXIgPSB3b3JrZXI7XG5cbiAgICAgICAgICAgICAgaWYgKCFkYXRhLnN1cHBvcnRUcmFuc2ZlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlVHJhbnNmZXJzID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJjb25maWd1cmVcIiwge1xuICAgICAgICAgICAgICAgIHZlcmJvc2l0eTogdGhpcy52ZXJib3NpdHlcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9zZXR1cEZha2VXb3JrZXIoKTtcblxuICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbihcInJlYWR5XCIsIGRhdGEgPT4ge1xuICAgICAgICAgICAgd29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbldvcmtlckVycm9yKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgIHRlcm1pbmF0ZUVhcmx5KCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc2VuZFRlc3QoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0dXBGYWtlV29ya2VyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZW5kVGVzdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RPYmogPSBuZXcgVWludDhBcnJheShbdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycyA/IDI1NSA6IDBdKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZChcInRlc3RcIiwgdGVzdE9iaiwgW3Rlc3RPYmouYnVmZmVyXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJDYW5ub3QgdXNlIHBvc3RNZXNzYWdlIHRyYW5zZmVycy5cIik7XG4gICAgICAgICAgICAgIHRlc3RPYmpbMF0gPSAwO1xuICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5zZW5kKFwidGVzdFwiLCB0ZXN0T2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc2VuZFRlc3QoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJUaGUgd29ya2VyIGhhcyBiZWVuIGRpc2FibGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXR1cEZha2VXb3JrZXIoKTtcbiAgICB9XG5cbiAgICBfc2V0dXBGYWtlV29ya2VyKCkge1xuICAgICAgaWYgKCFpc1dvcmtlckRpc2FibGVkKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlNldHRpbmcgdXAgZmFrZSB3b3JrZXIuXCIpO1xuICAgICAgICBpc1dvcmtlckRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgc2V0dXBGYWtlV29ya2VyR2xvYmFsKCkudGhlbihXb3JrZXJNZXNzYWdlSGFuZGxlciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKFwiV29ya2VyIHdhcyBkZXN0cm95ZWRcIikpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9ydCA9IG5ldyBMb29wYmFja1BvcnQoKTtcbiAgICAgICAgdGhpcy5fcG9ydCA9IHBvcnQ7XG4gICAgICAgIGNvbnN0IGlkID0gXCJmYWtlXCIgKyBuZXh0RmFrZVdvcmtlcklkKys7XG4gICAgICAgIGNvbnN0IHdvcmtlckhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihpZCArIFwiX3dvcmtlclwiLCBpZCwgcG9ydCk7XG4gICAgICAgIFdvcmtlck1lc3NhZ2VIYW5kbGVyLnNldHVwKHdvcmtlckhhbmRsZXIsIHBvcnQpO1xuICAgICAgICBjb25zdCBtZXNzYWdlSGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKGlkLCBpZCArIFwiX3dvcmtlclwiLCBwb3J0KTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIgPSBtZXNzYWdlSGFuZGxlcjtcblxuICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuXG4gICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJjb25maWd1cmVcIiwge1xuICAgICAgICAgIHZlcmJvc2l0eTogdGhpcy52ZXJib3NpdHlcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihgU2V0dGluZyB1cCBmYWtlIHdvcmtlciBmYWlsZWQ6IFwiJHtyZWFzb24ubWVzc2FnZX1cIi5gKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5fd2ViV29ya2VyKSB7XG4gICAgICAgIHRoaXMuX3dlYldvcmtlci50ZXJtaW5hdGUoKTtcblxuICAgICAgICB0aGlzLl93ZWJXb3JrZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBwZGZXb3JrZXJQb3J0cy5kZWxldGUodGhpcy5fcG9ydCk7XG4gICAgICB0aGlzLl9wb3J0ID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX21lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21Qb3J0KHBhcmFtcykge1xuICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy5wb3J0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBERldvcmtlci5mcm9tUG9ydCAtIGludmFsaWQgbWV0aG9kIHNpZ25hdHVyZS5cIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChwZGZXb3JrZXJQb3J0cy5oYXMocGFyYW1zLnBvcnQpKSB7XG4gICAgICAgIHJldHVybiBwZGZXb3JrZXJQb3J0cy5nZXQocGFyYW1zLnBvcnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFBERldvcmtlcihwYXJhbXMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRXb3JrZXJTcmMoKSB7XG4gICAgICByZXR1cm4gZ2V0V29ya2VyU3JjKCk7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gUERGV29ya2VyO1xufSgpO1xuXG5leHBvcnRzLlBERldvcmtlciA9IFBERldvcmtlcjtcblxuY2xhc3MgV29ya2VyVHJhbnNwb3J0IHtcbiAgY29uc3RydWN0b3IobWVzc2FnZUhhbmRsZXIsIGxvYWRpbmdUYXNrLCBuZXR3b3JrU3RyZWFtLCBwYXJhbXMpIHtcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbWVzc2FnZUhhbmRsZXI7XG4gICAgdGhpcy5sb2FkaW5nVGFzayA9IGxvYWRpbmdUYXNrO1xuICAgIHRoaXMuY29tbW9uT2JqcyA9IG5ldyBQREZPYmplY3RzKCk7XG4gICAgdGhpcy5mb250TG9hZGVyID0gbmV3IF9mb250X2xvYWRlci5Gb250TG9hZGVyKHtcbiAgICAgIGRvY0lkOiBsb2FkaW5nVGFzay5kb2NJZCxcbiAgICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlOiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpXG4gICAgfSk7XG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zO1xuICAgIHRoaXMuQ01hcFJlYWRlckZhY3RvcnkgPSBuZXcgcGFyYW1zLkNNYXBSZWFkZXJGYWN0b3J5KHtcbiAgICAgIGJhc2VVcmw6IHBhcmFtcy5jTWFwVXJsLFxuICAgICAgaXNDb21wcmVzc2VkOiBwYXJhbXMuY01hcFBhY2tlZFxuICAgIH0pO1xuICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5kZXN0cm95Q2FwYWJpbGl0eSA9IG51bGw7XG4gICAgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5ID0gbnVsbDtcbiAgICB0aGlzLl9uZXR3b3JrU3RyZWFtID0gbmV0d29ya1N0cmVhbTtcbiAgICB0aGlzLl9mdWxsUmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSBudWxsO1xuICAgIHRoaXMucGFnZUNhY2hlID0gW107XG4gICAgdGhpcy5wYWdlUHJvbWlzZXMgPSBbXTtcbiAgICB0aGlzLmRvd25sb2FkSW5mb0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5zZXR1cE1lc3NhZ2VIYW5kbGVyKCk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5KSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgIH1cblxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgaWYgKHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eSkge1xuICAgICAgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZCBkdXJpbmcgb25QYXNzd29yZCBjYWxsYmFja1wiKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2FpdE9uID0gW107XG4gICAgdGhpcy5wYWdlQ2FjaGUuZm9yRWFjaChmdW5jdGlvbiAocGFnZSkge1xuICAgICAgaWYgKHBhZ2UpIHtcbiAgICAgICAgd2FpdE9uLnB1c2gocGFnZS5fZGVzdHJveSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnBhZ2VDYWNoZS5sZW5ndGggPSAwO1xuICAgIHRoaXMucGFnZVByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgY29uc3QgdGVybWluYXRlZCA9IHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiVGVybWluYXRlXCIsIG51bGwpO1xuICAgIHdhaXRPbi5wdXNoKHRlcm1pbmF0ZWQpO1xuICAgIFByb21pc2UuYWxsKHdhaXRPbikudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmZvbnRMb2FkZXIuY2xlYXIoKTtcblxuICAgICAgaWYgKHRoaXMuX25ldHdvcmtTdHJlYW0pIHtcbiAgICAgICAgdGhpcy5fbmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICB9LCB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgcmV0dXJuIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHNldHVwTWVzc2FnZUhhbmRsZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbWVzc2FnZUhhbmRsZXIsXG4gICAgICBsb2FkaW5nVGFza1xuICAgIH0gPSB0aGlzO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiR2V0UmVhZGVyXCIsIChkYXRhLCBzaW5rKSA9PiB7XG4gICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtLCBcIkdldFJlYWRlciAtIG5vIGBJUERGU3RyZWFtYCBpbnN0YW5jZSBhdmFpbGFibGUuXCIpO1xuICAgICAgdGhpcy5fZnVsbFJlYWRlciA9IHRoaXMuX25ldHdvcmtTdHJlYW0uZ2V0RnVsbFJlYWRlcigpO1xuXG4gICAgICB0aGlzLl9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3MgPSBldnQgPT4ge1xuICAgICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB7XG4gICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkLFxuICAgICAgICAgIHRvdGFsOiBldnQudG90YWxcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIHNpbmsub25QdWxsID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9mdWxsUmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uICh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9uZVxuICAgICAgICB9KSB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHNpbmsuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikodmFsdWUpLCBcIkdldFJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLlwiKTtcbiAgICAgICAgICBzaW5rLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpLCAxLCBbdmFsdWVdKTtcbiAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgc2luay5vbkNhbmNlbCA9IHJlYXNvbiA9PiB7XG4gICAgICAgIHRoaXMuX2Z1bGxSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiUmVhZGVySGVhZGVyc1JlYWR5XCIsIGRhdGEgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyc0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICBjb25zdCBmdWxsUmVhZGVyID0gdGhpcy5fZnVsbFJlYWRlcjtcbiAgICAgIGZ1bGxSZWFkZXIuaGVhZGVyc1JlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIWZ1bGxSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQgfHwgIWZ1bGxSZWFkZXIuaXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgICAgIGlmICh0aGlzLl9sYXN0UHJvZ3Jlc3MgJiYgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcyh0aGlzLl9sYXN0UHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZ1bGxSZWFkZXIub25Qcm9ncmVzcyA9IGV2dCA9PiB7XG4gICAgICAgICAgICBpZiAobG9hZGluZ1Rhc2sub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICBsb2FkaW5nVGFzay5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IGV2dC5sb2FkZWQsXG4gICAgICAgICAgICAgICAgdG90YWw6IGV2dC50b3RhbFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgaXNTdHJlYW1pbmdTdXBwb3J0ZWQ6IGZ1bGxSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQsXG4gICAgICAgICAgaXNSYW5nZVN1cHBvcnRlZDogZnVsbFJlYWRlci5pc1JhbmdlU3VwcG9ydGVkLFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IGZ1bGxSZWFkZXIuY29udGVudExlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH0sIGhlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICByZXR1cm4gaGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkdldFJhbmdlUmVhZGVyXCIsIChkYXRhLCBzaW5rKSA9PiB7XG4gICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtLCBcIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS5cIik7XG5cbiAgICAgIGNvbnN0IHJhbmdlUmVhZGVyID0gdGhpcy5fbmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihkYXRhLmJlZ2luLCBkYXRhLmVuZCk7XG5cbiAgICAgIGlmICghcmFuZ2VSZWFkZXIpIHtcbiAgICAgICAgc2luay5jbG9zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNpbmsub25QdWxsID0gKCkgPT4ge1xuICAgICAgICByYW5nZVJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiAoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbmVcbiAgICAgICAgfSkge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBzaW5rLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKHZhbHVlKSwgXCJHZXRSYW5nZVJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLlwiKTtcbiAgICAgICAgICBzaW5rLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpLCAxLCBbdmFsdWVdKTtcbiAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgc2luay5vbkNhbmNlbCA9IHJlYXNvbiA9PiB7XG4gICAgICAgIHJhbmdlUmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkdldERvY1wiLCAoe1xuICAgICAgcGRmSW5mb1xuICAgIH0pID0+IHtcbiAgICAgIHRoaXMuX251bVBhZ2VzID0gcGRmSW5mby5udW1QYWdlcztcblxuICAgICAgbG9hZGluZ1Rhc2suX2NhcGFiaWxpdHkucmVzb2x2ZShuZXcgUERGRG9jdW1lbnRQcm94eShwZGZJbmZvLCB0aGlzKSk7XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJEb2NFeGNlcHRpb25cIiwgZnVuY3Rpb24gKGV4KSB7XG4gICAgICBsZXQgcmVhc29uO1xuXG4gICAgICBzd2l0Y2ggKGV4Lm5hbWUpIHtcbiAgICAgICAgY2FzZSBcIlBhc3N3b3JkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgcmVhc29uID0gbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKGV4Lm1lc3NhZ2UsIGV4LmNvZGUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJJbnZhbGlkUERGRXhjZXB0aW9uXCI6XG4gICAgICAgICAgcmVhc29uID0gbmV3IF91dGlsLkludmFsaWRQREZFeGNlcHRpb24oZXgubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIk1pc3NpbmdQREZFeGNlcHRpb25cIjpcbiAgICAgICAgICByZWFzb24gPSBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbihleC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uXCI6XG4gICAgICAgICAgcmVhc29uID0gbmV3IF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC5zdGF0dXMpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJVbmtub3duRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICByZWFzb24gPSBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKGV4Lm1lc3NhZ2UsIGV4LmRldGFpbHMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBsb2FkaW5nVGFzay5fY2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIlBhc3N3b3JkUmVxdWVzdFwiLCBleGNlcHRpb24gPT4ge1xuICAgICAgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICBpZiAobG9hZGluZ1Rhc2sub25QYXNzd29yZCkge1xuICAgICAgICBjb25zdCB1cGRhdGVQYXNzd29yZCA9IHBhc3N3b3JkID0+IHtcbiAgICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICBwYXNzd29yZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9hZGluZ1Rhc2sub25QYXNzd29yZCh1cGRhdGVQYXNzd29yZCwgZXhjZXB0aW9uLmNvZGUpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QoZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KG5ldyBfdXRpbC5QYXNzd29yZEV4Y2VwdGlvbihleGNlcHRpb24ubWVzc2FnZSwgZXhjZXB0aW9uLmNvZGUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiRGF0YUxvYWRlZFwiLCBkYXRhID0+IHtcbiAgICAgIGlmIChsb2FkaW5nVGFzay5vblByb2dyZXNzKSB7XG4gICAgICAgIGxvYWRpbmdUYXNrLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgIGxvYWRlZDogZGF0YS5sZW5ndGgsXG4gICAgICAgICAgdG90YWw6IGRhdGEubGVuZ3RoXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRvd25sb2FkSW5mb0NhcGFiaWxpdHkucmVzb2x2ZShkYXRhKTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIlN0YXJ0UmVuZGVyUGFnZVwiLCBkYXRhID0+IHtcbiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VDYWNoZVtkYXRhLnBhZ2VJbmRleF07XG5cbiAgICAgIHBhZ2UuX3N0YXJ0UmVuZGVyUGFnZShkYXRhLnRyYW5zcGFyZW5jeSwgZGF0YS5pbnRlbnQpO1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiY29tbW9ub2JqXCIsIGRhdGEgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2lkLCB0eXBlLCBleHBvcnRlZERhdGFdID0gZGF0YTtcblxuICAgICAgaWYgKHRoaXMuY29tbW9uT2Jqcy5oYXMoaWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJGb250XCI6XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zO1xuXG4gICAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiBleHBvcnRlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydGVkRXJyb3IgPSBleHBvcnRlZERhdGEuZXJyb3I7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYEVycm9yIGR1cmluZyBmb250IGxvYWRpbmc6ICR7ZXhwb3J0ZWRFcnJvcn1gKTtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBleHBvcnRlZEVycm9yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBmb250UmVnaXN0cnkgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHBhcmFtcy5wZGZCdWcgJiYgZ2xvYmFsVGhpcy5Gb250SW5zcGVjdG9yICYmIGdsb2JhbFRoaXMuRm9udEluc3BlY3Rvci5lbmFibGVkKSB7XG4gICAgICAgICAgICBmb250UmVnaXN0cnkgPSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyRm9udChmb250LCB1cmwpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IuZm9udEFkZGVkKGZvbnQsIHVybCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmb250ID0gbmV3IF9mb250X2xvYWRlci5Gb250RmFjZU9iamVjdChleHBvcnRlZERhdGEsIHtcbiAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogcGFyYW1zLmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogcGFyYW1zLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgIGlnbm9yZUVycm9yczogcGFyYW1zLmlnbm9yZUVycm9ycyxcbiAgICAgICAgICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlOiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZm9udFJlZ2lzdHJ5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5mb250TG9hZGVyLmJpbmQoZm9udCkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJGb250RmFsbGJhY2tcIiwge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5mb250RXh0cmFQcm9wZXJ0aWVzICYmIGZvbnQuZGF0YSkge1xuICAgICAgICAgICAgICBmb250LmRhdGEgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMucmVzb2x2ZShpZCwgZm9udCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkZvbnRQYXRoXCI6XG4gICAgICAgIGNhc2UgXCJGb250VHlwZTNSZXNcIjpcbiAgICAgICAgY2FzZSBcIkltYWdlXCI6XG4gICAgICAgICAgdGhpcy5jb21tb25PYmpzLnJlc29sdmUoaWQsIGV4cG9ydGVkRGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCB1bmtub3duIGNvbW1vbiBvYmplY3QgdHlwZSAke3R5cGV9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJvYmpcIiwgZGF0YSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2lkLCBwYWdlSW5kZXgsIHR5cGUsIGltYWdlRGF0YV0gPSBkYXRhO1xuICAgICAgY29uc3QgcGFnZVByb3h5ID0gdGhpcy5wYWdlQ2FjaGVbcGFnZUluZGV4XTtcblxuICAgICAgaWYgKHBhZ2VQcm94eS5vYmpzLmhhcyhpZCkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJJbWFnZVwiOlxuICAgICAgICAgIHBhZ2VQcm94eS5vYmpzLnJlc29sdmUoaWQsIGltYWdlRGF0YSk7XG4gICAgICAgICAgY29uc3QgTUFYX0lNQUdFX1NJWkVfVE9fU1RPUkUgPSA4MDAwMDAwO1xuXG4gICAgICAgICAgaWYgKGltYWdlRGF0YSAmJiBcImRhdGFcIiBpbiBpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLmRhdGEubGVuZ3RoID4gTUFYX0lNQUdFX1NJWkVfVE9fU1RPUkUpIHtcbiAgICAgICAgICAgIHBhZ2VQcm94eS5jbGVhbnVwQWZ0ZXJSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgdW5rbm93biBvYmplY3QgdHlwZSAke3R5cGV9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJEb2NQcm9ncmVzc1wiLCBkYXRhID0+IHtcbiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChsb2FkaW5nVGFzay5vblByb2dyZXNzKSB7XG4gICAgICAgIGxvYWRpbmdUYXNrLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgIGxvYWRlZDogZGF0YS5sb2FkZWQsXG4gICAgICAgICAgdG90YWw6IGRhdGEudG90YWxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwgdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJGZXRjaEJ1aWx0SW5DTWFwXCIsIChkYXRhLCBzaW5rKSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgc2luay5lcnJvcihuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZFwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGZldGNoZWQgPSBmYWxzZTtcblxuICAgICAgc2luay5vblB1bGwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChmZXRjaGVkKSB7XG4gICAgICAgICAgc2luay5jbG9zZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZldGNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLkNNYXBSZWFkZXJGYWN0b3J5LmZldGNoKGRhdGEpLnRoZW4oZnVuY3Rpb24gKGJ1aWx0SW5DTWFwKSB7XG4gICAgICAgICAgc2luay5lbnF1ZXVlKGJ1aWx0SW5DTWFwLCAxLCBbYnVpbHRJbkNNYXAuY01hcERhdGEuYnVmZmVyXSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIF9vblVuc3VwcG9ydGVkRmVhdHVyZSh7XG4gICAgZmVhdHVyZUlkXG4gIH0pIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nVGFzay5vblVuc3VwcG9ydGVkRmVhdHVyZSkge1xuICAgICAgdGhpcy5sb2FkaW5nVGFzay5vblVuc3VwcG9ydGVkRmVhdHVyZShmZWF0dXJlSWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0RGF0YVwiLCBudWxsKTtcbiAgfVxuXG4gIGdldFBhZ2UocGFnZU51bWJlcikge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYWdlTnVtYmVyKSB8fCBwYWdlTnVtYmVyIDw9IDAgfHwgcGFnZU51bWJlciA+IHRoaXMuX251bVBhZ2VzKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBwYWdlIHJlcXVlc3RcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHBhZ2VOdW1iZXIgLSAxO1xuXG4gICAgaWYgKHBhZ2VJbmRleCBpbiB0aGlzLnBhZ2VQcm9taXNlcykge1xuICAgICAgcmV0dXJuIHRoaXMucGFnZVByb21pc2VzW3BhZ2VJbmRleF07XG4gICAgfVxuXG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0UGFnZVwiLCB7XG4gICAgICBwYWdlSW5kZXhcbiAgICB9KS50aGVuKHBhZ2VJbmZvID0+IHtcbiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmFuc3BvcnQgZGVzdHJveWVkXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlID0gbmV3IFBERlBhZ2VQcm94eShwYWdlSW5kZXgsIHBhZ2VJbmZvLCB0aGlzLCB0aGlzLl9wYXJhbXMucGRmQnVnKTtcbiAgICAgIHRoaXMucGFnZUNhY2hlW3BhZ2VJbmRleF0gPSBwYWdlO1xuICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgfSk7XG4gICAgdGhpcy5wYWdlUHJvbWlzZXNbcGFnZUluZGV4XSA9IHByb21pc2U7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRQYWdlSW5kZXgocmVmKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0UGFnZUluZGV4XCIsIHtcbiAgICAgIHJlZlxuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IocmVhc29uKSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9ucyhwYWdlSW5kZXgsIGludGVudCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldEFubm90YXRpb25zXCIsIHtcbiAgICAgIHBhZ2VJbmRleCxcbiAgICAgIGludGVudFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGVzdGluYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldERlc3RpbmF0aW9uc1wiLCBudWxsKTtcbiAgfVxuXG4gIGdldERlc3RpbmF0aW9uKGlkKSB7XG4gICAgaWYgKHR5cGVvZiBpZCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgZGVzdGluYXRpb24gcmVxdWVzdC5cIikpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldERlc3RpbmF0aW9uXCIsIHtcbiAgICAgIGlkXG4gICAgfSk7XG4gIH1cblxuICBnZXRQYWdlTGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VMYWJlbHNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRQYWdlTGF5b3V0KCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VMYXlvdXRcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRQYWdlTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRQYWdlTW9kZVwiLCBudWxsKTtcbiAgfVxuXG4gIGdldFZpZXdlclByZWZlcmVuY2VzKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFZpZXdlclByZWZlcmVuY2VzXCIsIG51bGwpO1xuICB9XG5cbiAgZ2V0T3BlbkFjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRPcGVuQWN0aW9uXCIsIG51bGwpO1xuICB9XG5cbiAgZ2V0QXR0YWNobWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0QXR0YWNobWVudHNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRKYXZhU2NyaXB0KCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldEphdmFTY3JpcHRcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRPdXRsaW5lKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldE91dGxpbmVcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRQZXJtaXNzaW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRQZXJtaXNzaW9uc1wiLCBudWxsKTtcbiAgfVxuXG4gIGdldE1ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldE1ldGFkYXRhXCIsIG51bGwpLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbmZvOiByZXN1bHRzWzBdLFxuICAgICAgICBtZXRhZGF0YTogcmVzdWx0c1sxXSA/IG5ldyBfbWV0YWRhdGEuTWV0YWRhdGEocmVzdWx0c1sxXSkgOiBudWxsLFxuICAgICAgICBjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTogdGhpcy5fZnVsbFJlYWRlciA/IHRoaXMuX2Z1bGxSZWFkZXIuZmlsZW5hbWUgOiBudWxsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3RhdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0U3RhdHNcIiwgbnVsbCk7XG4gIH1cblxuICBzdGFydENsZWFudXAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiQ2xlYW51cFwiLCBudWxsKS50aGVuKCgpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRoaXMucGFnZUNhY2hlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMucGFnZUNhY2hlW2ldO1xuXG4gICAgICAgIGlmIChwYWdlKSB7XG4gICAgICAgICAgY29uc3QgY2xlYW51cFN1Y2Nlc3NmdWwgPSBwYWdlLmNsZWFudXAoKTtcblxuICAgICAgICAgIGlmICghY2xlYW51cFN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc3RhcnRDbGVhbnVwOiBQYWdlICR7aSArIDF9IGlzIGN1cnJlbnRseSByZW5kZXJpbmcuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29tbW9uT2Jqcy5jbGVhcigpO1xuICAgICAgdGhpcy5mb250TG9hZGVyLmNsZWFyKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgbG9hZGluZ1BhcmFtcygpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXM7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwibG9hZGluZ1BhcmFtc1wiLCB7XG4gICAgICBkaXNhYmxlQXV0b0ZldGNoOiBwYXJhbXMuZGlzYWJsZUF1dG9GZXRjaCxcbiAgICAgIGRpc2FibGVGb250RmFjZTogcGFyYW1zLmRpc2FibGVGb250RmFjZVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgUERGT2JqZWN0cyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX29ianMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgX2Vuc3VyZU9iaihvYmpJZCkge1xuICAgIGlmICh0aGlzLl9vYmpzW29iaklkXSkge1xuICAgICAgcmV0dXJuIHRoaXMuX29ianNbb2JqSWRdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9vYmpzW29iaklkXSA9IHtcbiAgICAgIGNhcGFiaWxpdHk6ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgICByZXNvbHZlZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgZ2V0KG9iaklkLCBjYWxsYmFjayA9IG51bGwpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX2Vuc3VyZU9iaihvYmpJZCkuY2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oY2FsbGJhY2spO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBvYmogPSB0aGlzLl9vYmpzW29iaklkXTtcblxuICAgIGlmICghb2JqIHx8ICFvYmoucmVzb2x2ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWVzdGluZyBvYmplY3QgdGhhdCBpc24ndCByZXNvbHZlZCB5ZXQgJHtvYmpJZH0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iai5kYXRhO1xuICB9XG5cbiAgaGFzKG9iaklkKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fb2Jqc1tvYmpJZF07XG4gICAgcmV0dXJuIG9iaiA/IG9iai5yZXNvbHZlZCA6IGZhbHNlO1xuICB9XG5cbiAgcmVzb2x2ZShvYmpJZCwgZGF0YSkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2Vuc3VyZU9iaihvYmpJZCk7XG5cbiAgICBvYmoucmVzb2x2ZWQgPSB0cnVlO1xuICAgIG9iai5kYXRhID0gZGF0YTtcbiAgICBvYmouY2FwYWJpbGl0eS5yZXNvbHZlKGRhdGEpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5fb2JqcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxufVxuXG5jbGFzcyBSZW5kZXJUYXNrIHtcbiAgY29uc3RydWN0b3IoaW50ZXJuYWxSZW5kZXJUYXNrKSB7XG4gICAgdGhpcy5faW50ZXJuYWxSZW5kZXJUYXNrID0gaW50ZXJuYWxSZW5kZXJUYXNrO1xuICAgIHRoaXMub25Db250aW51ZSA9IG51bGw7XG4gIH1cblxuICBnZXQgcHJvbWlzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9pbnRlcm5hbFJlbmRlclRhc2suY2FuY2VsKCk7XG4gIH1cblxufVxuXG5jb25zdCBJbnRlcm5hbFJlbmRlclRhc2sgPSBmdW5jdGlvbiBJbnRlcm5hbFJlbmRlclRhc2tDbG9zdXJlKCkge1xuICBjb25zdCBjYW52YXNJblJlbmRlcmluZyA9IG5ldyBXZWFrU2V0KCk7XG5cbiAgY2xhc3MgSW50ZXJuYWxSZW5kZXJUYXNrIHtcbiAgICBjb25zdHJ1Y3Rvcih7XG4gICAgICBjYWxsYmFjayxcbiAgICAgIHBhcmFtcyxcbiAgICAgIG9ianMsXG4gICAgICBjb21tb25PYmpzLFxuICAgICAgb3BlcmF0b3JMaXN0LFxuICAgICAgcGFnZUluZGV4LFxuICAgICAgY2FudmFzRmFjdG9yeSxcbiAgICAgIHdlYkdMQ29udGV4dCxcbiAgICAgIHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZhbHNlLFxuICAgICAgcGRmQnVnID0gZmFsc2VcbiAgICB9KSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgICAgIHRoaXMub2JqcyA9IG9ianM7XG4gICAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgICAgdGhpcy5vcGVyYXRvckxpc3RJZHggPSBudWxsO1xuICAgICAgdGhpcy5vcGVyYXRvckxpc3QgPSBvcGVyYXRvckxpc3Q7XG4gICAgICB0aGlzLl9wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBjYW52YXNGYWN0b3J5O1xuICAgICAgdGhpcy53ZWJHTENvbnRleHQgPSB3ZWJHTENvbnRleHQ7XG4gICAgICB0aGlzLl9wZGZCdWcgPSBwZGZCdWc7XG4gICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrID0gbnVsbDtcbiAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeSA9IGZhbHNlO1xuICAgICAgdGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSB0cnVlICYmIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgdGhpcy50YXNrID0gbmV3IFJlbmRlclRhc2sodGhpcyk7XG4gICAgICB0aGlzLl9jb250aW51ZUJvdW5kID0gdGhpcy5fY29udGludWUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuX3NjaGVkdWxlTmV4dEJvdW5kID0gdGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyk7XG4gICAgICB0aGlzLl9uZXh0Qm91bmQgPSB0aGlzLl9uZXh0LmJpbmQodGhpcyk7XG4gICAgICB0aGlzLl9jYW52YXMgPSBwYXJhbXMuY2FudmFzQ29udGV4dC5jYW52YXM7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUdyYXBoaWNzKHRyYW5zcGFyZW5jeSA9IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5jYW5jZWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2FudmFzKSB7XG4gICAgICAgIGlmIChjYW52YXNJblJlbmRlcmluZy5oYXModGhpcy5fY2FudmFzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgdGhlIHNhbWUgY2FudmFzIGR1cmluZyBtdWx0aXBsZSByZW5kZXIoKSBvcGVyYXRpb25zLiBcIiArIFwiVXNlIGRpZmZlcmVudCBjYW52YXMgb3IgZW5zdXJlIHByZXZpb3VzIG9wZXJhdGlvbnMgd2VyZSBcIiArIFwiY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBjYW52YXNJblJlbmRlcmluZy5hZGQodGhpcy5fY2FudmFzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3BkZkJ1ZyAmJiBnbG9iYWxUaGlzLlN0ZXBwZXJNYW5hZ2VyICYmIGdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXIuZW5hYmxlZCkge1xuICAgICAgICB0aGlzLnN0ZXBwZXIgPSBnbG9iYWxUaGlzLlN0ZXBwZXJNYW5hZ2VyLmNyZWF0ZSh0aGlzLl9wYWdlSW5kZXgpO1xuICAgICAgICB0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCk7XG4gICAgICAgIHRoaXMuc3RlcHBlci5uZXh0QnJlYWtQb2ludCA9IHRoaXMuc3RlcHBlci5nZXROZXh0QnJlYWtQb2ludCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNhbnZhc0NvbnRleHQsXG4gICAgICAgIHZpZXdwb3J0LFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIGltYWdlTGF5ZXIsXG4gICAgICAgIGJhY2tncm91bmRcbiAgICAgIH0gPSB0aGlzLnBhcmFtcztcbiAgICAgIHRoaXMuZ2Z4ID0gbmV3IF9jYW52YXMuQ2FudmFzR3JhcGhpY3MoY2FudmFzQ29udGV4dCwgdGhpcy5jb21tb25PYmpzLCB0aGlzLm9ianMsIHRoaXMuY2FudmFzRmFjdG9yeSwgdGhpcy53ZWJHTENvbnRleHQsIGltYWdlTGF5ZXIpO1xuICAgICAgdGhpcy5nZnguYmVnaW5EcmF3aW5nKHtcbiAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICB2aWV3cG9ydCxcbiAgICAgICAgdHJhbnNwYXJlbmN5LFxuICAgICAgICBiYWNrZ3JvdW5kXG4gICAgICB9KTtcbiAgICAgIHRoaXMub3BlcmF0b3JMaXN0SWR4ID0gMDtcbiAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeSA9IHRydWU7XG5cbiAgICAgIGlmICh0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhbmNlbChlcnJvciA9IG51bGwpIHtcbiAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5nZngpIHtcbiAgICAgICAgdGhpcy5nZnguZW5kRHJhd2luZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2FudmFzKSB7XG4gICAgICAgIGNhbnZhc0luUmVuZGVyaW5nLmRlbGV0ZSh0aGlzLl9jYW52YXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhbGxiYWNrKGVycm9yIHx8IG5ldyBfZGlzcGxheV91dGlscy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24oYFJlbmRlcmluZyBjYW5jZWxsZWQsIHBhZ2UgJHt0aGlzLl9wYWdlSW5kZXggKyAxfWAsIFwiY2FudmFzXCIpKTtcbiAgICB9XG5cbiAgICBvcGVyYXRvckxpc3RDaGFuZ2VkKCkge1xuICAgICAgaWYgKCF0aGlzLmdyYXBoaWNzUmVhZHkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaykge1xuICAgICAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrID0gdGhpcy5fY29udGludWVCb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RlcHBlcikge1xuICAgICAgICB0aGlzLnN0ZXBwZXIudXBkYXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucnVubmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRpbnVlKCk7XG4gICAgfVxuXG4gICAgX2NvbnRpbnVlKCkge1xuICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudGFzay5vbkNvbnRpbnVlKSB7XG4gICAgICAgIHRoaXMudGFzay5vbkNvbnRpbnVlKHRoaXMuX3NjaGVkdWxlTmV4dEJvdW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlTmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9zY2hlZHVsZU5leHQoKSB7XG4gICAgICBpZiAodGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX25leHRCb3VuZCgpLmNhdGNoKHRoaXMuY2FuY2VsLmJpbmQodGhpcykpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy5fbmV4dEJvdW5kKS5jYXRjaCh0aGlzLmNhbmNlbC5iaW5kKHRoaXMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfbmV4dCgpIHtcbiAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3BlcmF0b3JMaXN0SWR4ID0gdGhpcy5nZnguZXhlY3V0ZU9wZXJhdG9yTGlzdCh0aGlzLm9wZXJhdG9yTGlzdCwgdGhpcy5vcGVyYXRvckxpc3RJZHgsIHRoaXMuX2NvbnRpbnVlQm91bmQsIHRoaXMuc3RlcHBlcik7XG5cbiAgICAgIGlmICh0aGlzLm9wZXJhdG9yTGlzdElkeCA9PT0gdGhpcy5vcGVyYXRvckxpc3QuYXJnc0FycmF5Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rKSB7XG4gICAgICAgICAgdGhpcy5nZnguZW5kRHJhd2luZygpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NhbnZhcykge1xuICAgICAgICAgICAgY2FudmFzSW5SZW5kZXJpbmcuZGVsZXRlKHRoaXMuX2NhbnZhcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gSW50ZXJuYWxSZW5kZXJUYXNrO1xufSgpO1xuXG5jb25zdCB2ZXJzaW9uID0gJzIuNS4yMDcnO1xuZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjtcbmNvbnN0IGJ1aWxkID0gJzA5NzRkNjA1JztcbmV4cG9ydHMuYnVpbGQgPSBidWlsZDtcblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkZvbnRMb2FkZXIgPSBleHBvcnRzLkZvbnRGYWNlT2JqZWN0ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBCYXNlRm9udExvYWRlciB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBkb2NJZCxcbiAgICBvblVuc3VwcG9ydGVkRmVhdHVyZVxuICB9KSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VGb250TG9hZGVyKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZUZvbnRMb2FkZXIuXCIpO1xuICAgIH1cblxuICAgIHRoaXMuZG9jSWQgPSBkb2NJZDtcbiAgICB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSA9IG9uVW5zdXBwb3J0ZWRGZWF0dXJlO1xuICAgIHRoaXMubmF0aXZlRm9udEZhY2VzID0gW107XG4gICAgdGhpcy5zdHlsZUVsZW1lbnQgPSBudWxsO1xuICB9XG5cbiAgYWRkTmF0aXZlRm9udEZhY2UobmF0aXZlRm9udEZhY2UpIHtcbiAgICB0aGlzLm5hdGl2ZUZvbnRGYWNlcy5wdXNoKG5hdGl2ZUZvbnRGYWNlKTtcbiAgICBkb2N1bWVudC5mb250cy5hZGQobmF0aXZlRm9udEZhY2UpO1xuICB9XG5cbiAgaW5zZXJ0UnVsZShydWxlKSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IHRoaXMuc3R5bGVFbGVtZW50O1xuXG4gICAgaWYgKCFzdHlsZUVsZW1lbnQpIHtcbiAgICAgIHN0eWxlRWxlbWVudCA9IHRoaXMuc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgc3R5bGVFbGVtZW50LmlkID0gYFBERkpTX0ZPTlRfU1RZTEVfVEFHXyR7dGhpcy5kb2NJZH1gO1xuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlU2hlZXQgPSBzdHlsZUVsZW1lbnQuc2hlZXQ7XG4gICAgc3R5bGVTaGVldC5pbnNlcnRSdWxlKHJ1bGUsIHN0eWxlU2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMubmF0aXZlRm9udEZhY2VzLmZvckVhY2goZnVuY3Rpb24gKG5hdGl2ZUZvbnRGYWNlKSB7XG4gICAgICBkb2N1bWVudC5mb250cy5kZWxldGUobmF0aXZlRm9udEZhY2UpO1xuICAgIH0pO1xuICAgIHRoaXMubmF0aXZlRm9udEZhY2VzLmxlbmd0aCA9IDA7XG5cbiAgICBpZiAodGhpcy5zdHlsZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc3R5bGVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgdGhpcy5zdHlsZUVsZW1lbnQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGJpbmQoZm9udCkge1xuICAgIGlmIChmb250LmF0dGFjaGVkIHx8IGZvbnQubWlzc2luZ0ZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb250LmF0dGFjaGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnN0IG5hdGl2ZUZvbnRGYWNlID0gZm9udC5jcmVhdGVOYXRpdmVGb250RmFjZSgpO1xuXG4gICAgICBpZiAobmF0aXZlRm9udEZhY2UpIHtcbiAgICAgICAgdGhpcy5hZGROYXRpdmVGb250RmFjZShuYXRpdmVGb250RmFjZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBuYXRpdmVGb250RmFjZS5sb2FkZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe1xuICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRMb2FkTmF0aXZlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYEZhaWxlZCB0byBsb2FkIGZvbnQgJyR7bmF0aXZlRm9udEZhY2UuZmFtaWx5fSc6ICcke2V4fScuYCk7XG4gICAgICAgICAgZm9udC5kaXNhYmxlRm9udEZhY2UgPSB0cnVlO1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0gZm9udC5jcmVhdGVGb250RmFjZVJ1bGUoKTtcblxuICAgIGlmIChydWxlKSB7XG4gICAgICB0aGlzLmluc2VydFJ1bGUocnVsZSk7XG5cbiAgICAgIGlmICh0aGlzLmlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9xdWV1ZUxvYWRpbmdDYWxsYmFjayhyZXNvbHZlKTtcblxuICAgICAgICB0aGlzLl9wcmVwYXJlRm9udExvYWRFdmVudChbcnVsZV0sIFtmb250XSwgcmVxdWVzdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfcXVldWVMb2FkaW5nQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBfcXVldWVMb2FkaW5nQ2FsbGJhY2tgLlwiKTtcbiAgfVxuXG4gIGdldCBpc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkKCkge1xuICAgIGNvbnN0IHN1cHBvcnRlZCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhIWRvY3VtZW50LmZvbnRzO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWRcIiwgc3VwcG9ydGVkKTtcbiAgfVxuXG4gIGdldCBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZGAuXCIpO1xuICB9XG5cbiAgZ2V0IF9sb2FkVGVzdEZvbnQoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgX2xvYWRUZXN0Rm9udGAuXCIpO1xuICB9XG5cbiAgX3ByZXBhcmVGb250TG9hZEV2ZW50KHJ1bGVzLCBmb250c1RvTG9hZCwgcmVxdWVzdCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9wcmVwYXJlRm9udExvYWRFdmVudGAuXCIpO1xuICB9XG5cbn1cblxubGV0IEZvbnRMb2FkZXI7XG5leHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyO1xue1xuICBleHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyID0gY2xhc3MgR2VuZXJpY0ZvbnRMb2FkZXIgZXh0ZW5kcyBCYXNlRm9udExvYWRlciB7XG4gICAgY29uc3RydWN0b3IoZG9jSWQpIHtcbiAgICAgIHN1cGVyKGRvY0lkKTtcbiAgICAgIHRoaXMubG9hZGluZ0NvbnRleHQgPSB7XG4gICAgICAgIHJlcXVlc3RzOiBbXSxcbiAgICAgICAgbmV4dFJlcXVlc3RJZDogMFxuICAgICAgfTtcbiAgICAgIHRoaXMubG9hZFRlc3RGb250SWQgPSAwO1xuICAgIH1cblxuICAgIGdldCBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCgpIHtcbiAgICAgIGxldCBzdXBwb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG0gPSAvTW96aWxsYVxcLzUuMC4qP3J2OihcXGQrKS4qPyBHZWNrby8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuICAgICAgICBpZiAobSAmJiBtWzFdID49IDE0KSB7XG4gICAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZFwiLCBzdXBwb3J0ZWQpO1xuICAgIH1cblxuICAgIF9xdWV1ZUxvYWRpbmdDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgZnVuY3Rpb24gY29tcGxldGVSZXF1ZXN0KCkge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghcmVxdWVzdC5kb25lLCBcImNvbXBsZXRlUmVxdWVzdCgpIGNhbm5vdCBiZSBjYWxsZWQgdHdpY2UuXCIpO1xuICAgICAgICByZXF1ZXN0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgIHdoaWxlIChjb250ZXh0LnJlcXVlc3RzLmxlbmd0aCA+IDAgJiYgY29udGV4dC5yZXF1ZXN0c1swXS5kb25lKSB7XG4gICAgICAgICAgY29uc3Qgb3RoZXJSZXF1ZXN0ID0gY29udGV4dC5yZXF1ZXN0cy5zaGlmdCgpO1xuICAgICAgICAgIHNldFRpbWVvdXQob3RoZXJSZXF1ZXN0LmNhbGxiYWNrLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5sb2FkaW5nQ29udGV4dDtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgIGlkOiBgcGRmanMtZm9udC1sb2FkaW5nLSR7Y29udGV4dC5uZXh0UmVxdWVzdElkKyt9YCxcbiAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZVJlcXVlc3QsXG4gICAgICAgIGNhbGxiYWNrXG4gICAgICB9O1xuICAgICAgY29udGV4dC5yZXF1ZXN0cy5wdXNoKHJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgZ2V0IF9sb2FkVGVzdEZvbnQoKSB7XG4gICAgICBjb25zdCBnZXRMb2FkVGVzdEZvbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhdG9iKFwiVDFSVVR3QUxBSUFBQXdBd1EwWkdJREh0Wmc0QUFBT1lBQUFBZ1VaR1ZFMWxrelp3QUFBRUhBQUFBQnhIUkVWR0FCUUFcIiArIFwiRlFBQUJEZ0FBQUFlVDFNdk1sWU5Zd2tBQUFFZ0FBQUFZR050WVhBQkRRTFVBQUFDTkFBQUFVSm9aV0ZrL3hWRkRRQUFcIiArIFwiQUx3QUFBQTJhR2hsWVFka0Erb0FBQUQwQUFBQUpHaHRkSGdENkFBQUFBQUVXQUFBQUFadFlYaHdBQUpRQUFBQUFSZ0FcIiArIFwiQUFBR2JtRnRaVmptZEg0QUFBR0FBQUFBc1hCdmMzVC9oZ0F6QUFBRGVBQUFBQ0FBQVFBQUFBRUFBTFpSRnNSZkR6ejFcIiArIFwiQUFzRDZBQUFBQURPQk9UTEFBQUFBTTRLSER3QUFBQUFBK2dESVFBQUFBZ0FBZ0FBQUFBQUFBQUJBQUFESVFBQUFGb0RcIiArIFwiNkFBQUFBQUQ2QUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBVUFBQUFnQUFBQVFENkFIMEFBVUFBQUtLQXJ3QUFBQ01cIiArIFwiQW9vQ3ZBQUFBZUFBTVFFQ0FBQUNBQVlKQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFGQm1SV1FBd0FBdUFDNERcIiArIFwiSVA4NEFGb0RJUUFBQUFBQUFRQUFBQUFBQUFBQUFDQUFJQUFCQUFBQURnQ3VBQUVBQUFBQUFBQUFBUUFBQUFFQUFBQUFcIiArIFwiQUFFQUFRQUFBQUVBQUFBQUFBSUFBUUFBQUFFQUFBQUFBQU1BQVFBQUFBRUFBQUFBQUFRQUFRQUFBQUVBQUFBQUFBVUFcIiArIFwiQVFBQUFBRUFBQUFBQUFZQUFRQUFBQU1BQVFRSkFBQUFBZ0FCQUFNQUFRUUpBQUVBQWdBQkFBTUFBUVFKQUFJQUFnQUJcIiArIFwiQUFNQUFRUUpBQU1BQWdBQkFBTUFBUVFKQUFRQUFnQUJBQU1BQVFRSkFBVUFBZ0FCQUFNQUFRUUpBQVlBQWdBQldBQllcIiArIFwiQUFBQUFBQUFBd0FBQUFNQUFBQWNBQUVBQUFBQUFEd0FBd0FCQUFBQUhBQUVBQ0FBQUFBRUFBUUFBUUFBQUM3Ly93QUFcIiArIFwiQUM3Ly8vL1RBQUVBQUFBQUFBQUJCZ0FBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcIiArIFwiQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcIiArIFwiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcIiArIFwiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcIiArIFwiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcIiArIFwiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBQUFBQUFEL2d3QXlBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFcIiArIFwiQUFBQkFBUUVBQUVCQVFKWUFBRUJBU0g0RHdENEd3SEVBdmdjQS9nWEJJd01BWXVMK256NXRRWGtENWozQ0JMbkVRQUNcIiArIFwiQVFFQklWaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZQUFBQkFRQUFEd0FDQVFFRUUvdDNcIiArIFwiRG92NmZBSDZmQVQrZlBwOCtud0hEb3NNQ3ZtMUN2bTFEQXo2ZkJRQUFBQUFBQUFCQUFBQUFNbUpiekVBQUFBQXpnVGpcIiArIFwiRlFBQUFBRE9CT1FwQUFFQUFBQUFBQUFBREFBVUFBUUFBQUFCQUFBQUFnQUJBQUFBQUFBQUFBQUQ2QUFBQUFBQUFBPT1cIik7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJfbG9hZFRlc3RGb250XCIsIGdldExvYWRUZXN0Rm9udCgpKTtcbiAgICB9XG5cbiAgICBfcHJlcGFyZUZvbnRMb2FkRXZlbnQocnVsZXMsIGZvbnRzLCByZXF1ZXN0KSB7XG4gICAgICBmdW5jdGlvbiBpbnQzMihkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEuY2hhckNvZGVBdChvZmZzZXQpIDw8IDI0IHwgZGF0YS5jaGFyQ29kZUF0KG9mZnNldCArIDEpIDw8IDE2IHwgZGF0YS5jaGFyQ29kZUF0KG9mZnNldCArIDIpIDw8IDggfCBkYXRhLmNoYXJDb2RlQXQob2Zmc2V0ICsgMykgJiAweGZmO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzcGxpY2VTdHJpbmcocywgb2Zmc2V0LCByZW1vdmUsIGluc2VydCkge1xuICAgICAgICBjb25zdCBjaHVuazEgPSBzLnN1YnN0cmluZygwLCBvZmZzZXQpO1xuICAgICAgICBjb25zdCBjaHVuazIgPSBzLnN1YnN0cmluZyhvZmZzZXQgKyByZW1vdmUpO1xuICAgICAgICByZXR1cm4gY2h1bmsxICsgaW5zZXJ0ICsgY2h1bmsyO1xuICAgICAgfVxuXG4gICAgICBsZXQgaSwgaWk7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgICAgY2FudmFzLndpZHRoID0gMTtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGxldCBjYWxsZWQgPSAwO1xuXG4gICAgICBmdW5jdGlvbiBpc0ZvbnRSZWFkeShuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsZWQrKztcblxuICAgICAgICBpZiAoY2FsbGVkID4gMzApIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJMb2FkIHRlc3QgZm9udCBuZXZlciBsb2FkZWQuXCIpO1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LmZvbnQgPSBcIjMwcHggXCIgKyBuYW1lO1xuICAgICAgICBjdHguZmlsbFRleHQoXCIuXCIsIDAsIDIwKTtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKTtcblxuICAgICAgICBpZiAoaW1hZ2VEYXRhLmRhdGFbM10gPiAwKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KGlzRm9udFJlYWR5LmJpbmQobnVsbCwgbmFtZSwgY2FsbGJhY2spKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9hZFRlc3RGb250SWQgPSBgbHQke0RhdGUubm93KCl9JHt0aGlzLmxvYWRUZXN0Rm9udElkKyt9YDtcbiAgICAgIGxldCBkYXRhID0gdGhpcy5fbG9hZFRlc3RGb250O1xuICAgICAgY29uc3QgQ09NTUVOVF9PRkZTRVQgPSA5NzY7XG4gICAgICBkYXRhID0gc3BsaWNlU3RyaW5nKGRhdGEsIENPTU1FTlRfT0ZGU0VULCBsb2FkVGVzdEZvbnRJZC5sZW5ndGgsIGxvYWRUZXN0Rm9udElkKTtcbiAgICAgIGNvbnN0IENGRl9DSEVDS1NVTV9PRkZTRVQgPSAxNjtcbiAgICAgIGNvbnN0IFhYWFhfVkFMVUUgPSAweDU4NTg1ODU4O1xuICAgICAgbGV0IGNoZWNrc3VtID0gaW50MzIoZGF0YSwgQ0ZGX0NIRUNLU1VNX09GRlNFVCk7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gbG9hZFRlc3RGb250SWQubGVuZ3RoIC0gMzsgaSA8IGlpOyBpICs9IDQpIHtcbiAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bSAtIFhYWFhfVkFMVUUgKyBpbnQzMihsb2FkVGVzdEZvbnRJZCwgaSkgfCAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSA8IGxvYWRUZXN0Rm9udElkLmxlbmd0aCkge1xuICAgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtIC0gWFhYWF9WQUxVRSArIGludDMyKGxvYWRUZXN0Rm9udElkICsgXCJYWFhcIiwgaSkgfCAwO1xuICAgICAgfVxuXG4gICAgICBkYXRhID0gc3BsaWNlU3RyaW5nKGRhdGEsIENGRl9DSEVDS1NVTV9PRkZTRVQsIDQsICgwLCBfdXRpbC5zdHJpbmczMikoY2hlY2tzdW0pKTtcbiAgICAgIGNvbnN0IHVybCA9IGB1cmwoZGF0YTpmb250L29wZW50eXBlO2Jhc2U2NCwke2J0b2EoZGF0YSl9KTtgO1xuICAgICAgY29uc3QgcnVsZSA9IGBAZm9udC1mYWNlIHtmb250LWZhbWlseTpcIiR7bG9hZFRlc3RGb250SWR9XCI7c3JjOiR7dXJsfX1gO1xuICAgICAgdGhpcy5pbnNlcnRSdWxlKHJ1bGUpO1xuICAgICAgY29uc3QgbmFtZXMgPSBbXTtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBmb250cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIG5hbWVzLnB1c2goZm9udHNbaV0ubG9hZGVkTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIG5hbWVzLnB1c2gobG9hZFRlc3RGb250SWQpO1xuICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGRpdi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgIGRpdi5zdHlsZS53aWR0aCA9IGRpdi5zdHlsZS5oZWlnaHQgPSBcIjEwcHhcIjtcbiAgICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgIGRpdi5zdHlsZS50b3AgPSBkaXYuc3R5bGUubGVmdCA9IFwiMHB4XCI7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBcIkhpXCI7XG4gICAgICAgIHNwYW4uc3R5bGUuZm9udEZhbWlseSA9IG5hbWVzW2ldO1xuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICB9XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgIGlzRm9udFJlYWR5KGxvYWRUZXN0Rm9udElkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICAgICAgcmVxdWVzdC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIH07XG59XG5cbmNsYXNzIEZvbnRGYWNlT2JqZWN0IHtcbiAgY29uc3RydWN0b3IodHJhbnNsYXRlZERhdGEsIHtcbiAgICBpc0V2YWxTdXBwb3J0ZWQgPSB0cnVlLFxuICAgIGRpc2FibGVGb250RmFjZSA9IGZhbHNlLFxuICAgIGlnbm9yZUVycm9ycyA9IGZhbHNlLFxuICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlID0gbnVsbCxcbiAgICBmb250UmVnaXN0cnkgPSBudWxsXG4gIH0pIHtcbiAgICB0aGlzLmNvbXBpbGVkR2x5cGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGZvciAoY29uc3QgaSBpbiB0cmFuc2xhdGVkRGF0YSkge1xuICAgICAgdGhpc1tpXSA9IHRyYW5zbGF0ZWREYXRhW2ldO1xuICAgIH1cblxuICAgIHRoaXMuaXNFdmFsU3VwcG9ydGVkID0gaXNFdmFsU3VwcG9ydGVkICE9PSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVGb250RmFjZSA9IGRpc2FibGVGb250RmFjZSA9PT0gdHJ1ZTtcbiAgICB0aGlzLmlnbm9yZUVycm9ycyA9IGlnbm9yZUVycm9ycyA9PT0gdHJ1ZTtcbiAgICB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSA9IG9uVW5zdXBwb3J0ZWRGZWF0dXJlO1xuICAgIHRoaXMuZm9udFJlZ2lzdHJ5ID0gZm9udFJlZ2lzdHJ5O1xuICB9XG5cbiAgY3JlYXRlTmF0aXZlRm9udEZhY2UoKSB7XG4gICAgaWYgKCF0aGlzLmRhdGEgfHwgdGhpcy5kaXNhYmxlRm9udEZhY2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5hdGl2ZUZvbnRGYWNlID0gbmV3IEZvbnRGYWNlKHRoaXMubG9hZGVkTmFtZSwgdGhpcy5kYXRhLCB7fSk7XG5cbiAgICBpZiAodGhpcy5mb250UmVnaXN0cnkpIHtcbiAgICAgIHRoaXMuZm9udFJlZ2lzdHJ5LnJlZ2lzdGVyRm9udCh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF0aXZlRm9udEZhY2U7XG4gIH1cblxuICBjcmVhdGVGb250RmFjZVJ1bGUoKSB7XG4gICAgaWYgKCF0aGlzLmRhdGEgfHwgdGhpcy5kaXNhYmxlRm9udEZhY2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykobmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSk7XG4gICAgY29uc3QgdXJsID0gYHVybChkYXRhOiR7dGhpcy5taW1ldHlwZX07YmFzZTY0LCR7YnRvYShkYXRhKX0pO2A7XG4gICAgY29uc3QgcnVsZSA9IGBAZm9udC1mYWNlIHtmb250LWZhbWlseTpcIiR7dGhpcy5sb2FkZWROYW1lfVwiO3NyYzoke3VybH19YDtcblxuICAgIGlmICh0aGlzLmZvbnRSZWdpc3RyeSkge1xuICAgICAgdGhpcy5mb250UmVnaXN0cnkucmVnaXN0ZXJGb250KHRoaXMsIHVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBnZXRQYXRoR2VuZXJhdG9yKG9ianMsIGNoYXJhY3Rlcikge1xuICAgIGlmICh0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbY2hhcmFjdGVyXTtcbiAgICB9XG5cbiAgICBsZXQgY21kcywgY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICBjbWRzID0gb2Jqcy5nZXQodGhpcy5sb2FkZWROYW1lICsgXCJfcGF0aF9cIiArIGNoYXJhY3Rlcik7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghdGhpcy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSkge1xuICAgICAgICB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7XG4gICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRHZXRQYXRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYGdldFBhdGhHZW5lcmF0b3IgLSBpZ25vcmluZyBjaGFyYWN0ZXI6IFwiJHtleH1cIi5gKTtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gPSBmdW5jdGlvbiAoYywgc2l6ZSkge307XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNFdmFsU3VwcG9ydGVkICYmIF91dGlsLklzRXZhbFN1cHBvcnRlZENhY2hlZC52YWx1ZSkge1xuICAgICAgbGV0IGFyZ3MsXG4gICAgICAgICAganMgPSBcIlwiO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjbWRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY3VycmVudCA9IGNtZHNbaV07XG5cbiAgICAgICAgaWYgKGN1cnJlbnQuYXJncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXJncyA9IGN1cnJlbnQuYXJncy5qb2luKFwiLFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcmdzID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGpzICs9IFwiYy5cIiArIGN1cnJlbnQuY21kICsgXCIoXCIgKyBhcmdzICsgXCIpO1xcblwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1tjaGFyYWN0ZXJdID0gbmV3IEZ1bmN0aW9uKFwiY1wiLCBcInNpemVcIiwganMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gPSBmdW5jdGlvbiAoYywgc2l6ZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gY21kcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGN1cnJlbnQgPSBjbWRzW2ldO1xuXG4gICAgICAgIGlmIChjdXJyZW50LmNtZCA9PT0gXCJzY2FsZVwiKSB7XG4gICAgICAgICAgY3VycmVudC5hcmdzID0gW3NpemUsIC1zaXplXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNbY3VycmVudC5jbWRdLmFwcGx5KGMsIGN1cnJlbnQuYXJncyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRm9udEZhY2VPYmplY3QgPSBGb250RmFjZU9iamVjdDtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFwaUNvbXBhdGliaWxpdHlQYXJhbXMgPSB2b2lkIDA7XG5cbnZhciBfaXNfbm9kZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNCk7XG5cbmNvbnN0IGNvbXBhdGliaWxpdHlQYXJhbXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xue1xuICAoZnVuY3Rpb24gY2hlY2tGb250RmFjZSgpIHtcbiAgICBpZiAoX2lzX25vZGUuaXNOb2RlSlMpIHtcbiAgICAgIGNvbXBhdGliaWxpdHlQYXJhbXMuZGlzYWJsZUZvbnRGYWNlID0gdHJ1ZTtcbiAgICB9XG4gIH0pKCk7XG59XG5jb25zdCBhcGlDb21wYXRpYmlsaXR5UGFyYW1zID0gT2JqZWN0LmZyZWV6ZShjb21wYXRpYmlsaXR5UGFyYW1zKTtcbmV4cG9ydHMuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcyA9IGFwaUNvbXBhdGliaWxpdHlQYXJhbXM7XG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5DYW52YXNHcmFwaGljcyA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wYXR0ZXJuX2hlbHBlciA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBNSU5fRk9OVF9TSVpFID0gMTY7XG52YXIgTUFYX0ZPTlRfU0laRSA9IDEwMDtcbnZhciBNQVhfR1JPVVBfU0laRSA9IDQwOTY7XG52YXIgTUlOX1dJRFRIX0ZBQ1RPUiA9IDAuNjU7XG52YXIgQ09NUElMRV9UWVBFM19HTFlQSFMgPSB0cnVlO1xudmFyIE1BWF9TSVpFX1RPX0NPTVBJTEUgPSAxMDAwO1xudmFyIEZVTExfQ0hVTktfSEVJR0hUID0gMTY7XG5cbmZ1bmN0aW9uIGFkZENvbnRleHRDdXJyZW50VHJhbnNmb3JtKGN0eCkge1xuICBpZiAoIWN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgY3R4Ll9vcmlnaW5hbFNhdmUgPSBjdHguc2F2ZTtcbiAgICBjdHguX29yaWdpbmFsUmVzdG9yZSA9IGN0eC5yZXN0b3JlO1xuICAgIGN0eC5fb3JpZ2luYWxSb3RhdGUgPSBjdHgucm90YXRlO1xuICAgIGN0eC5fb3JpZ2luYWxTY2FsZSA9IGN0eC5zY2FsZTtcbiAgICBjdHguX29yaWdpbmFsVHJhbnNsYXRlID0gY3R4LnRyYW5zbGF0ZTtcbiAgICBjdHguX29yaWdpbmFsVHJhbnNmb3JtID0gY3R4LnRyYW5zZm9ybTtcbiAgICBjdHguX29yaWdpbmFsU2V0VHJhbnNmb3JtID0gY3R4LnNldFRyYW5zZm9ybTtcbiAgICBjdHguX3RyYW5zZm9ybU1hdHJpeCA9IGN0eC5fdHJhbnNmb3JtTWF0cml4IHx8IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICBjdHguX3RyYW5zZm9ybVN0YWNrID0gW107XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgXCJtb3pDdXJyZW50VHJhbnNmb3JtXCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zZm9ybSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBcIm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlXCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgICAgICB2YXIgYSA9IG1bMF0sXG4gICAgICAgICAgICBiID0gbVsxXSxcbiAgICAgICAgICAgIGMgPSBtWzJdLFxuICAgICAgICAgICAgZCA9IG1bM10sXG4gICAgICAgICAgICBlID0gbVs0XSxcbiAgICAgICAgICAgIGYgPSBtWzVdO1xuICAgICAgICB2YXIgYWRfYmMgPSBhICogZCAtIGIgKiBjO1xuICAgICAgICB2YXIgYmNfYWQgPSBiICogYyAtIGEgKiBkO1xuICAgICAgICByZXR1cm4gW2QgLyBhZF9iYywgYiAvIGJjX2FkLCBjIC8gYmNfYWQsIGEgLyBhZF9iYywgKGQgKiBlIC0gYyAqIGYpIC8gYmNfYWQsIChiICogZSAtIGEgKiBmKSAvIGFkX2JjXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGN0eC5zYXZlID0gZnVuY3Rpb24gY3R4U2F2ZSgpIHtcbiAgICAgIHZhciBvbGQgPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG5cbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YWNrLnB1c2gob2xkKTtcblxuICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gb2xkLnNsaWNlKDAsIDYpO1xuXG4gICAgICB0aGlzLl9vcmlnaW5hbFNhdmUoKTtcbiAgICB9O1xuXG4gICAgY3R4LnJlc3RvcmUgPSBmdW5jdGlvbiBjdHhSZXN0b3JlKCkge1xuICAgICAgdmFyIHByZXYgPSB0aGlzLl90cmFuc2Zvcm1TdGFjay5wb3AoKTtcblxuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gcHJldjtcblxuICAgICAgICB0aGlzLl9vcmlnaW5hbFJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY3R4LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIGN0eFRyYW5zbGF0ZSh4LCB5KSB7XG4gICAgICB2YXIgbSA9IHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgIG1bNF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgICAgIG1bNV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcblxuICAgICAgdGhpcy5fb3JpZ2luYWxUcmFuc2xhdGUoeCwgeSk7XG4gICAgfTtcblxuICAgIGN0eC5zY2FsZSA9IGZ1bmN0aW9uIGN0eFNjYWxlKHgsIHkpIHtcbiAgICAgIHZhciBtID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgICAgbVswXSA9IG1bMF0gKiB4O1xuICAgICAgbVsxXSA9IG1bMV0gKiB4O1xuICAgICAgbVsyXSA9IG1bMl0gKiB5O1xuICAgICAgbVszXSA9IG1bM10gKiB5O1xuXG4gICAgICB0aGlzLl9vcmlnaW5hbFNjYWxlKHgsIHkpO1xuICAgIH07XG5cbiAgICBjdHgudHJhbnNmb3JtID0gZnVuY3Rpb24gY3R4VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIHZhciBtID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gW21bMF0gKiBhICsgbVsyXSAqIGIsIG1bMV0gKiBhICsgbVszXSAqIGIsIG1bMF0gKiBjICsgbVsyXSAqIGQsIG1bMV0gKiBjICsgbVszXSAqIGQsIG1bMF0gKiBlICsgbVsyXSAqIGYgKyBtWzRdLCBtWzFdICogZSArIG1bM10gKiBmICsgbVs1XV07XG5cbiAgICAgIGN0eC5fb3JpZ2luYWxUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZik7XG4gICAgfTtcblxuICAgIGN0eC5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhTZXRUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuXG4gICAgICBjdHguX29yaWdpbmFsU2V0VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgIH07XG5cbiAgICBjdHgucm90YXRlID0gZnVuY3Rpb24gY3R4Um90YXRlKGFuZ2xlKSB7XG4gICAgICB2YXIgY29zVmFsdWUgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICB2YXIgc2luVmFsdWUgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICB2YXIgbSA9IHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCA9IFttWzBdICogY29zVmFsdWUgKyBtWzJdICogc2luVmFsdWUsIG1bMV0gKiBjb3NWYWx1ZSArIG1bM10gKiBzaW5WYWx1ZSwgbVswXSAqIC1zaW5WYWx1ZSArIG1bMl0gKiBjb3NWYWx1ZSwgbVsxXSAqIC1zaW5WYWx1ZSArIG1bM10gKiBjb3NWYWx1ZSwgbVs0XSwgbVs1XV07XG5cbiAgICAgIHRoaXMuX29yaWdpbmFsUm90YXRlKGFuZ2xlKTtcbiAgICB9O1xuICB9XG59XG5cbnZhciBDYWNoZWRDYW52YXNlcyA9IGZ1bmN0aW9uIENhY2hlZENhbnZhc2VzQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQ2FjaGVkQ2FudmFzZXMoY2FudmFzRmFjdG9yeSkge1xuICAgIHRoaXMuY2FudmFzRmFjdG9yeSA9IGNhbnZhc0ZhY3Rvcnk7XG4gICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBDYWNoZWRDYW52YXNlcy5wcm90b3R5cGUgPSB7XG4gICAgZ2V0Q2FudmFzOiBmdW5jdGlvbiBDYWNoZWRDYW52YXNlc19nZXRDYW52YXMoaWQsIHdpZHRoLCBoZWlnaHQsIHRyYWNrVHJhbnNmb3JtKSB7XG4gICAgICB2YXIgY2FudmFzRW50cnk7XG5cbiAgICAgIGlmICh0aGlzLmNhY2hlW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbnZhc0VudHJ5ID0gdGhpcy5jYWNoZVtpZF07XG4gICAgICAgIHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChjYW52YXNFbnRyeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0VudHJ5LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzRW50cnkgPSB0aGlzLmNhbnZhc0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmNhY2hlW2lkXSA9IGNhbnZhc0VudHJ5O1xuICAgICAgfVxuXG4gICAgICBpZiAodHJhY2tUcmFuc2Zvcm0pIHtcbiAgICAgICAgYWRkQ29udGV4dEN1cnJlbnRUcmFuc2Zvcm0oY2FudmFzRW50cnkuY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYW52YXNFbnRyeTtcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICAgIHZhciBjYW52YXNFbnRyeSA9IHRoaXMuY2FjaGVbaWRdO1xuICAgICAgICB0aGlzLmNhbnZhc0ZhY3RvcnkuZGVzdHJveShjYW52YXNFbnRyeSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlW2lkXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIENhY2hlZENhbnZhc2VzO1xufSgpO1xuXG5mdW5jdGlvbiBjb21waWxlVHlwZTNHbHlwaChpbWdEYXRhKSB7XG4gIHZhciBQT0lOVF9UT19QUk9DRVNTX0xJTUlUID0gMTAwMDtcbiAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aCxcbiAgICAgIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICB2YXIgaSxcbiAgICAgIGosXG4gICAgICBqMCxcbiAgICAgIHdpZHRoMSA9IHdpZHRoICsgMTtcbiAgdmFyIHBvaW50cyA9IG5ldyBVaW50OEFycmF5KHdpZHRoMSAqIChoZWlnaHQgKyAxKSk7XG4gIHZhciBQT0lOVF9UWVBFUyA9IG5ldyBVaW50OEFycmF5KFswLCAyLCA0LCAwLCAxLCAwLCA1LCA0LCA4LCAxMCwgMCwgOCwgMCwgMiwgMSwgMF0pO1xuICB2YXIgbGluZVNpemUgPSB3aWR0aCArIDcgJiB+NyxcbiAgICAgIGRhdGEwID0gaW1nRGF0YS5kYXRhO1xuICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGxpbmVTaXplICogaGVpZ2h0KSxcbiAgICAgIHBvcyA9IDAsXG4gICAgICBpaTtcblxuICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEwLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICB2YXIgbWFzayA9IDEyOCxcbiAgICAgICAgZWxlbSA9IGRhdGEwW2ldO1xuXG4gICAgd2hpbGUgKG1hc2sgPiAwKSB7XG4gICAgICBkYXRhW3BvcysrXSA9IGVsZW0gJiBtYXNrID8gMCA6IDI1NTtcbiAgICAgIG1hc2sgPj49IDE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvdW50ID0gMDtcbiAgcG9zID0gMDtcblxuICBpZiAoZGF0YVtwb3NdICE9PSAwKSB7XG4gICAgcG9pbnRzWzBdID0gMTtcbiAgICArK2NvdW50O1xuICB9XG5cbiAgZm9yIChqID0gMTsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICBpZiAoZGF0YVtwb3NdICE9PSBkYXRhW3BvcyArIDFdKSB7XG4gICAgICBwb2ludHNbal0gPSBkYXRhW3Bvc10gPyAyIDogMTtcbiAgICAgICsrY291bnQ7XG4gICAgfVxuXG4gICAgcG9zKys7XG4gIH1cblxuICBpZiAoZGF0YVtwb3NdICE9PSAwKSB7XG4gICAgcG9pbnRzW2pdID0gMjtcbiAgICArK2NvdW50O1xuICB9XG5cbiAgZm9yIChpID0gMTsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgcG9zID0gaSAqIGxpbmVTaXplO1xuICAgIGowID0gaSAqIHdpZHRoMTtcblxuICAgIGlmIChkYXRhW3BvcyAtIGxpbmVTaXplXSAhPT0gZGF0YVtwb3NdKSB7XG4gICAgICBwb2ludHNbajBdID0gZGF0YVtwb3NdID8gMSA6IDg7XG4gICAgICArK2NvdW50O1xuICAgIH1cblxuICAgIHZhciBzdW0gPSAoZGF0YVtwb3NdID8gNCA6IDApICsgKGRhdGFbcG9zIC0gbGluZVNpemVdID8gOCA6IDApO1xuXG4gICAgZm9yIChqID0gMTsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgIHN1bSA9IChzdW0gPj4gMikgKyAoZGF0YVtwb3MgKyAxXSA/IDQgOiAwKSArIChkYXRhW3BvcyAtIGxpbmVTaXplICsgMV0gPyA4IDogMCk7XG5cbiAgICAgIGlmIChQT0lOVF9UWVBFU1tzdW1dKSB7XG4gICAgICAgIHBvaW50c1tqMCArIGpdID0gUE9JTlRfVFlQRVNbc3VtXTtcbiAgICAgICAgKytjb3VudDtcbiAgICAgIH1cblxuICAgICAgcG9zKys7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFbcG9zIC0gbGluZVNpemVdICE9PSBkYXRhW3Bvc10pIHtcbiAgICAgIHBvaW50c1tqMCArIGpdID0gZGF0YVtwb3NdID8gMiA6IDQ7XG4gICAgICArK2NvdW50O1xuICAgIH1cblxuICAgIGlmIChjb3VudCA+IFBPSU5UX1RPX1BST0NFU1NfTElNSVQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHBvcyA9IGxpbmVTaXplICogKGhlaWdodCAtIDEpO1xuICBqMCA9IGkgKiB3aWR0aDE7XG5cbiAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgIHBvaW50c1tqMF0gPSA4O1xuICAgICsrY291bnQ7XG4gIH1cblxuICBmb3IgKGogPSAxOyBqIDwgd2lkdGg7IGorKykge1xuICAgIGlmIChkYXRhW3Bvc10gIT09IGRhdGFbcG9zICsgMV0pIHtcbiAgICAgIHBvaW50c1tqMCArIGpdID0gZGF0YVtwb3NdID8gNCA6IDg7XG4gICAgICArK2NvdW50O1xuICAgIH1cblxuICAgIHBvcysrO1xuICB9XG5cbiAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgIHBvaW50c1tqMCArIGpdID0gNDtcbiAgICArK2NvdW50O1xuICB9XG5cbiAgaWYgKGNvdW50ID4gUE9JTlRfVE9fUFJPQ0VTU19MSU1JVCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHN0ZXBzID0gbmV3IEludDMyQXJyYXkoWzAsIHdpZHRoMSwgLTEsIDAsIC13aWR0aDEsIDAsIDAsIDAsIDFdKTtcbiAgdmFyIG91dGxpbmVzID0gW107XG5cbiAgZm9yIChpID0gMDsgY291bnQgJiYgaSA8PSBoZWlnaHQ7IGkrKykge1xuICAgIHZhciBwID0gaSAqIHdpZHRoMTtcbiAgICB2YXIgZW5kID0gcCArIHdpZHRoO1xuXG4gICAgd2hpbGUgKHAgPCBlbmQgJiYgIXBvaW50c1twXSkge1xuICAgICAgcCsrO1xuICAgIH1cblxuICAgIGlmIChwID09PSBlbmQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBjb29yZHMgPSBbcCAlIHdpZHRoMSwgaV07XG4gICAgdmFyIHR5cGUgPSBwb2ludHNbcF0sXG4gICAgICAgIHAwID0gcCxcbiAgICAgICAgcHA7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgc3RlcCA9IHN0ZXBzW3R5cGVdO1xuXG4gICAgICBkbyB7XG4gICAgICAgIHAgKz0gc3RlcDtcbiAgICAgIH0gd2hpbGUgKCFwb2ludHNbcF0pO1xuXG4gICAgICBwcCA9IHBvaW50c1twXTtcblxuICAgICAgaWYgKHBwICE9PSA1ICYmIHBwICE9PSAxMCkge1xuICAgICAgICB0eXBlID0gcHA7XG4gICAgICAgIHBvaW50c1twXSA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gcHAgJiAweDMzICogdHlwZSA+PiA0O1xuICAgICAgICBwb2ludHNbcF0gJj0gdHlwZSA+PiAyIHwgdHlwZSA8PCAyO1xuICAgICAgfVxuXG4gICAgICBjb29yZHMucHVzaChwICUgd2lkdGgxKTtcbiAgICAgIGNvb3Jkcy5wdXNoKHAgLyB3aWR0aDEgfCAwKTtcblxuICAgICAgaWYgKCFwb2ludHNbcF0pIHtcbiAgICAgICAgLS1jb3VudDtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChwMCAhPT0gcCk7XG5cbiAgICBvdXRsaW5lcy5wdXNoKGNvb3Jkcyk7XG4gICAgLS1pO1xuICB9XG5cbiAgdmFyIGRyYXdPdXRsaW5lID0gZnVuY3Rpb24gKGMpIHtcbiAgICBjLnNhdmUoKTtcbiAgICBjLnNjYWxlKDEgLyB3aWR0aCwgLTEgLyBoZWlnaHQpO1xuICAgIGMudHJhbnNsYXRlKDAsIC1oZWlnaHQpO1xuICAgIGMuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKGxldCBrID0gMCwga2sgPSBvdXRsaW5lcy5sZW5ndGg7IGsgPCBrazsgaysrKSB7XG4gICAgICB2YXIgbyA9IG91dGxpbmVzW2tdO1xuICAgICAgYy5tb3ZlVG8ob1swXSwgb1sxXSk7XG5cbiAgICAgIGZvciAobGV0IGwgPSAyLCBsbCA9IG8ubGVuZ3RoOyBsIDwgbGw7IGwgKz0gMikge1xuICAgICAgICBjLmxpbmVUbyhvW2xdLCBvW2wgKyAxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYy5maWxsKCk7XG4gICAgYy5iZWdpblBhdGgoKTtcbiAgICBjLnJlc3RvcmUoKTtcbiAgfTtcblxuICByZXR1cm4gZHJhd091dGxpbmU7XG59XG5cbnZhciBDYW52YXNFeHRyYVN0YXRlID0gZnVuY3Rpb24gQ2FudmFzRXh0cmFTdGF0ZUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIENhbnZhc0V4dHJhU3RhdGUoKSB7XG4gICAgdGhpcy5hbHBoYUlzU2hhcGUgPSBmYWxzZTtcbiAgICB0aGlzLmZvbnRTaXplID0gMDtcbiAgICB0aGlzLmZvbnRTaXplU2NhbGUgPSAxO1xuICAgIHRoaXMudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICB0aGlzLnRleHRNYXRyaXhTY2FsZSA9IDE7XG4gICAgdGhpcy5mb250TWF0cml4ID0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5saW5lWCA9IDA7XG4gICAgdGhpcy5saW5lWSA9IDA7XG4gICAgdGhpcy5jaGFyU3BhY2luZyA9IDA7XG4gICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgdGhpcy50ZXh0SFNjYWxlID0gMTtcbiAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTDtcbiAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICB0aGlzLmZpbGxDb2xvciA9IFwiIzAwMDAwMFwiO1xuICAgIHRoaXMuc3Ryb2tlQ29sb3IgPSBcIiMwMDAwMDBcIjtcbiAgICB0aGlzLnBhdHRlcm5GaWxsID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuICAgIHRoaXMuc3Ryb2tlQWxwaGEgPSAxO1xuICAgIHRoaXMubGluZVdpZHRoID0gMTtcbiAgICB0aGlzLmFjdGl2ZVNNYXNrID0gbnVsbDtcbiAgICB0aGlzLnJlc3VtZVNNYXNrQ3R4ID0gbnVsbDtcbiAgfVxuXG4gIENhbnZhc0V4dHJhU3RhdGUucHJvdG90eXBlID0ge1xuICAgIGNsb25lOiBmdW5jdGlvbiBDYW52YXNFeHRyYVN0YXRlX2Nsb25lKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50UG9pbnQ6IGZ1bmN0aW9uIENhbnZhc0V4dHJhU3RhdGVfc2V0Q3VycmVudFBvaW50KHgsIHkpIHtcbiAgICAgIHRoaXMueCA9IHg7XG4gICAgICB0aGlzLnkgPSB5O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIENhbnZhc0V4dHJhU3RhdGU7XG59KCk7XG5cbnZhciBDYW52YXNHcmFwaGljcyA9IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzQ2xvc3VyZSgpIHtcbiAgdmFyIEVYRUNVVElPTl9USU1FID0gMTU7XG4gIHZhciBFWEVDVVRJT05fU1RFUFMgPSAxMDtcblxuICBmdW5jdGlvbiBDYW52YXNHcmFwaGljcyhjYW52YXNDdHgsIGNvbW1vbk9ianMsIG9ianMsIGNhbnZhc0ZhY3RvcnksIHdlYkdMQ29udGV4dCwgaW1hZ2VMYXllcikge1xuICAgIHRoaXMuY3R4ID0gY2FudmFzQ3R4O1xuICAgIHRoaXMuY3VycmVudCA9IG5ldyBDYW52YXNFeHRyYVN0YXRlKCk7XG4gICAgdGhpcy5zdGF0ZVN0YWNrID0gW107XG4gICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7XG4gICAgdGhpcy5yZXMgPSBudWxsO1xuICAgIHRoaXMueG9ianMgPSBudWxsO1xuICAgIHRoaXMuY29tbW9uT2JqcyA9IGNvbW1vbk9ianM7XG4gICAgdGhpcy5vYmpzID0gb2JqcztcbiAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBjYW52YXNGYWN0b3J5O1xuICAgIHRoaXMud2ViR0xDb250ZXh0ID0gd2ViR0xDb250ZXh0O1xuICAgIHRoaXMuaW1hZ2VMYXllciA9IGltYWdlTGF5ZXI7XG4gICAgdGhpcy5ncm91cFN0YWNrID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBudWxsO1xuICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sgPSBbXTtcbiAgICB0aGlzLmdyb3VwTGV2ZWwgPSAwO1xuICAgIHRoaXMuc21hc2tTdGFjayA9IFtdO1xuICAgIHRoaXMuc21hc2tDb3VudGVyID0gMDtcbiAgICB0aGlzLnRlbXBTTWFzayA9IG51bGw7XG4gICAgdGhpcy5jYWNoZWRDYW52YXNlcyA9IG5ldyBDYWNoZWRDYW52YXNlcyh0aGlzLmNhbnZhc0ZhY3RvcnkpO1xuXG4gICAgaWYgKGNhbnZhc0N0eCkge1xuICAgICAgYWRkQ29udGV4dEN1cnJlbnRUcmFuc2Zvcm0oY2FudmFzQ3R4KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1dEJpbmFyeUltYWdlRGF0YShjdHgsIGltZ0RhdGEpIHtcbiAgICBpZiAodHlwZW9mIEltYWdlRGF0YSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpbWdEYXRhIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgICBjdHgucHV0SW1hZ2VEYXRhKGltZ0RhdGEsIDAsIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodCxcbiAgICAgICAgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICAgIHZhciBwYXJ0aWFsQ2h1bmtIZWlnaHQgPSBoZWlnaHQgJSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICB2YXIgZnVsbENodW5rcyA9IChoZWlnaHQgLSBwYXJ0aWFsQ2h1bmtIZWlnaHQpIC8gRlVMTF9DSFVOS19IRUlHSFQ7XG4gICAgdmFyIHRvdGFsQ2h1bmtzID0gcGFydGlhbENodW5rSGVpZ2h0ID09PSAwID8gZnVsbENodW5rcyA6IGZ1bGxDaHVua3MgKyAxO1xuICAgIHZhciBjaHVua0ltZ0RhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBGVUxMX0NIVU5LX0hFSUdIVCk7XG4gICAgdmFyIHNyY1BvcyA9IDAsXG4gICAgICAgIGRlc3RQb3M7XG4gICAgdmFyIHNyYyA9IGltZ0RhdGEuZGF0YTtcbiAgICB2YXIgZGVzdCA9IGNodW5rSW1nRGF0YS5kYXRhO1xuICAgIHZhciBpLCBqLCB0aGlzQ2h1bmtIZWlnaHQsIGVsZW1zSW5UaGlzQ2h1bms7XG5cbiAgICBpZiAoaW1nRGF0YS5raW5kID09PSBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFApIHtcbiAgICAgIHZhciBzcmNMZW5ndGggPSBzcmMuYnl0ZUxlbmd0aDtcbiAgICAgIHZhciBkZXN0MzIgPSBuZXcgVWludDMyQXJyYXkoZGVzdC5idWZmZXIsIDAsIGRlc3QuYnl0ZUxlbmd0aCA+PiAyKTtcbiAgICAgIHZhciBkZXN0MzJEYXRhTGVuZ3RoID0gZGVzdDMyLmxlbmd0aDtcbiAgICAgIHZhciBmdWxsU3JjRGlmZiA9IHdpZHRoICsgNyA+PiAzO1xuICAgICAgdmFyIHdoaXRlID0gMHhmZmZmZmZmZjtcbiAgICAgIHZhciBibGFjayA9IF91dGlsLklzTGl0dGxlRW5kaWFuQ2FjaGVkLnZhbHVlID8gMHhmZjAwMDAwMCA6IDB4MDAwMDAwZmY7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbENodW5rczsgaSsrKSB7XG4gICAgICAgIHRoaXNDaHVua0hlaWdodCA9IGkgPCBmdWxsQ2h1bmtzID8gRlVMTF9DSFVOS19IRUlHSFQgOiBwYXJ0aWFsQ2h1bmtIZWlnaHQ7XG4gICAgICAgIGRlc3RQb3MgPSAwO1xuXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzQ2h1bmtIZWlnaHQ7IGorKykge1xuICAgICAgICAgIHZhciBzcmNEaWZmID0gc3JjTGVuZ3RoIC0gc3JjUG9zO1xuICAgICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgICB2YXIga0VuZCA9IHNyY0RpZmYgPiBmdWxsU3JjRGlmZiA/IHdpZHRoIDogc3JjRGlmZiAqIDggLSA3O1xuICAgICAgICAgIHZhciBrRW5kVW5yb2xsZWQgPSBrRW5kICYgfjc7XG4gICAgICAgICAgdmFyIG1hc2sgPSAwO1xuICAgICAgICAgIHZhciBzcmNCeXRlID0gMDtcblxuICAgICAgICAgIGZvciAoOyBrIDwga0VuZFVucm9sbGVkOyBrICs9IDgpIHtcbiAgICAgICAgICAgIHNyY0J5dGUgPSBzcmNbc3JjUG9zKytdO1xuICAgICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMTI4ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDY0ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDMyID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDE2ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDggPyB3aGl0ZSA6IGJsYWNrO1xuICAgICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgNCA/IHdoaXRlIDogYmxhY2s7XG4gICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAyID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDEgPyB3aGl0ZSA6IGJsYWNrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoOyBrIDwga0VuZDsgaysrKSB7XG4gICAgICAgICAgICBpZiAobWFzayA9PT0gMCkge1xuICAgICAgICAgICAgICBzcmNCeXRlID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgbWFzayA/IHdoaXRlIDogYmxhY2s7XG4gICAgICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChkZXN0UG9zIDwgZGVzdDMyRGF0YUxlbmd0aCkge1xuICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW1nRGF0YS5raW5kID09PSBfdXRpbC5JbWFnZUtpbmQuUkdCQV8zMkJQUCkge1xuICAgICAgaiA9IDA7XG4gICAgICBlbGVtc0luVGhpc0NodW5rID0gd2lkdGggKiBGVUxMX0NIVU5LX0hFSUdIVCAqIDQ7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBmdWxsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY1Bvcywgc3JjUG9zICsgZWxlbXNJblRoaXNDaHVuaykpO1xuICAgICAgICBzcmNQb3MgKz0gZWxlbXNJblRoaXNDaHVuaztcbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGopO1xuICAgICAgICBqICs9IEZVTExfQ0hVTktfSEVJR0hUO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSA8IHRvdGFsQ2h1bmtzKSB7XG4gICAgICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIHBhcnRpYWxDaHVua0hlaWdodCAqIDQ7XG4gICAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTtcbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGopO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW1nRGF0YS5raW5kID09PSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQKSB7XG4gICAgICB0aGlzQ2h1bmtIZWlnaHQgPSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIHRoaXNDaHVua0hlaWdodDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPj0gZnVsbENodW5rcykge1xuICAgICAgICAgIHRoaXNDaHVua0hlaWdodCA9IHBhcnRpYWxDaHVua0hlaWdodDtcbiAgICAgICAgICBlbGVtc0luVGhpc0NodW5rID0gd2lkdGggKiB0aGlzQ2h1bmtIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0UG9zID0gMDtcblxuICAgICAgICBmb3IgKGogPSBlbGVtc0luVGhpc0NodW5rOyBqLS07KSB7XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBzcmNbc3JjUG9zKytdO1xuICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHNyY1tzcmNQb3MrK107XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGkgKiBGVUxMX0NIVU5LX0hFSUdIVCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGltYWdlIGtpbmQ6ICR7aW1nRGF0YS5raW5kfWApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHB1dEJpbmFyeUltYWdlTWFzayhjdHgsIGltZ0RhdGEpIHtcbiAgICB2YXIgaGVpZ2h0ID0gaW1nRGF0YS5oZWlnaHQsXG4gICAgICAgIHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICB2YXIgcGFydGlhbENodW5rSGVpZ2h0ID0gaGVpZ2h0ICUgRlVMTF9DSFVOS19IRUlHSFQ7XG4gICAgdmFyIGZ1bGxDaHVua3MgPSAoaGVpZ2h0IC0gcGFydGlhbENodW5rSGVpZ2h0KSAvIEZVTExfQ0hVTktfSEVJR0hUO1xuICAgIHZhciB0b3RhbENodW5rcyA9IHBhcnRpYWxDaHVua0hlaWdodCA9PT0gMCA/IGZ1bGxDaHVua3MgOiBmdWxsQ2h1bmtzICsgMTtcbiAgICB2YXIgY2h1bmtJbWdEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgIHZhciBzcmNQb3MgPSAwO1xuICAgIHZhciBzcmMgPSBpbWdEYXRhLmRhdGE7XG4gICAgdmFyIGRlc3QgPSBjaHVua0ltZ0RhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxDaHVua3M7IGkrKykge1xuICAgICAgdmFyIHRoaXNDaHVua0hlaWdodCA9IGkgPCBmdWxsQ2h1bmtzID8gRlVMTF9DSFVOS19IRUlHSFQgOiBwYXJ0aWFsQ2h1bmtIZWlnaHQ7XG4gICAgICB2YXIgZGVzdFBvcyA9IDM7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpc0NodW5rSGVpZ2h0OyBqKyspIHtcbiAgICAgICAgdmFyIG1hc2sgPSAwO1xuXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgd2lkdGg7IGsrKykge1xuICAgICAgICAgIGlmICghbWFzaykge1xuICAgICAgICAgICAgdmFyIGVsZW0gPSBzcmNbc3JjUG9zKytdO1xuICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZXN0W2Rlc3RQb3NdID0gZWxlbSAmIG1hc2sgPyAwIDogMjU1O1xuICAgICAgICAgIGRlc3RQb3MgKz0gNDtcbiAgICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlDdHhTdGF0ZShzb3VyY2VDdHgsIGRlc3RDdHgpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IFtcInN0cm9rZVN0eWxlXCIsIFwiZmlsbFN0eWxlXCIsIFwiZmlsbFJ1bGVcIiwgXCJnbG9iYWxBbHBoYVwiLCBcImxpbmVXaWR0aFwiLCBcImxpbmVDYXBcIiwgXCJsaW5lSm9pblwiLCBcIm1pdGVyTGltaXRcIiwgXCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb25cIiwgXCJmb250XCJdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICBpZiAoc291cmNlQ3R4W3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlc3RDdHhbcHJvcGVydHldID0gc291cmNlQ3R4W3Byb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc291cmNlQ3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc3RDdHguc2V0TGluZURhc2goc291cmNlQ3R4LmdldExpbmVEYXNoKCkpO1xuICAgICAgZGVzdEN0eC5saW5lRGFzaE9mZnNldCA9IHNvdXJjZUN0eC5saW5lRGFzaE9mZnNldDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNldEN0eFRvRGVmYXVsdChjdHgpIHtcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSBcIiMwMDAwMDBcIjtcbiAgICBjdHguZmlsbFN0eWxlID0gXCIjMDAwMDAwXCI7XG4gICAgY3R4LmZpbGxSdWxlID0gXCJub256ZXJvXCI7XG4gICAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgICBjdHgubGluZVdpZHRoID0gMTtcbiAgICBjdHgubGluZUNhcCA9IFwiYnV0dFwiO1xuICAgIGN0eC5saW5lSm9pbiA9IFwibWl0ZXJcIjtcbiAgICBjdHgubWl0ZXJMaW1pdCA9IDEwO1xuICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBcInNvdXJjZS1vdmVyXCI7XG4gICAgY3R4LmZvbnQgPSBcIjEwcHggc2Fucy1zZXJpZlwiO1xuXG4gICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguc2V0TGluZURhc2goW10pO1xuICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gMDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb21wb3NlU01hc2tCYWNrZHJvcChieXRlcywgcjAsIGcwLCBiMCkge1xuICAgIHZhciBsZW5ndGggPSBieXRlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMzsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICB2YXIgYWxwaGEgPSBieXRlc1tpXTtcblxuICAgICAgaWYgKGFscGhhID09PSAwKSB7XG4gICAgICAgIGJ5dGVzW2kgLSAzXSA9IHIwO1xuICAgICAgICBieXRlc1tpIC0gMl0gPSBnMDtcbiAgICAgICAgYnl0ZXNbaSAtIDFdID0gYjA7XG4gICAgICB9IGVsc2UgaWYgKGFscGhhIDwgMjU1KSB7XG4gICAgICAgIHZhciBhbHBoYV8gPSAyNTUgLSBhbHBoYTtcbiAgICAgICAgYnl0ZXNbaSAtIDNdID0gYnl0ZXNbaSAtIDNdICogYWxwaGEgKyByMCAqIGFscGhhXyA+PiA4O1xuICAgICAgICBieXRlc1tpIC0gMl0gPSBieXRlc1tpIC0gMl0gKiBhbHBoYSArIGcwICogYWxwaGFfID4+IDg7XG4gICAgICAgIGJ5dGVzW2kgLSAxXSA9IGJ5dGVzW2kgLSAxXSAqIGFscGhhICsgYjAgKiBhbHBoYV8gPj4gODtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb21wb3NlU01hc2tBbHBoYShtYXNrRGF0YSwgbGF5ZXJEYXRhLCB0cmFuc2Zlck1hcCkge1xuICAgIHZhciBsZW5ndGggPSBtYXNrRGF0YS5sZW5ndGg7XG4gICAgdmFyIHNjYWxlID0gMSAvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAzOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgIHZhciBhbHBoYSA9IHRyYW5zZmVyTWFwID8gdHJhbnNmZXJNYXBbbWFza0RhdGFbaV1dIDogbWFza0RhdGFbaV07XG4gICAgICBsYXllckRhdGFbaV0gPSBsYXllckRhdGFbaV0gKiBhbHBoYSAqIHNjYWxlIHwgMDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb21wb3NlU01hc2tMdW1pbm9zaXR5KG1hc2tEYXRhLCBsYXllckRhdGEsIHRyYW5zZmVyTWFwKSB7XG4gICAgdmFyIGxlbmd0aCA9IG1hc2tEYXRhLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAzOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgIHZhciB5ID0gbWFza0RhdGFbaSAtIDNdICogNzcgKyBtYXNrRGF0YVtpIC0gMl0gKiAxNTIgKyBtYXNrRGF0YVtpIC0gMV0gKiAyODtcbiAgICAgIGxheWVyRGF0YVtpXSA9IHRyYW5zZmVyTWFwID8gbGF5ZXJEYXRhW2ldICogdHJhbnNmZXJNYXBbeSA+PiA4XSA+PiA4IDogbGF5ZXJEYXRhW2ldICogeSA+PiAxNjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZW5lcmljQ29tcG9zZVNNYXNrKG1hc2tDdHgsIGxheWVyQ3R4LCB3aWR0aCwgaGVpZ2h0LCBzdWJ0eXBlLCBiYWNrZHJvcCwgdHJhbnNmZXJNYXApIHtcbiAgICB2YXIgaGFzQmFja2Ryb3AgPSAhIWJhY2tkcm9wO1xuICAgIHZhciByMCA9IGhhc0JhY2tkcm9wID8gYmFja2Ryb3BbMF0gOiAwO1xuICAgIHZhciBnMCA9IGhhc0JhY2tkcm9wID8gYmFja2Ryb3BbMV0gOiAwO1xuICAgIHZhciBiMCA9IGhhc0JhY2tkcm9wID8gYmFja2Ryb3BbMl0gOiAwO1xuICAgIHZhciBjb21wb3NlRm47XG5cbiAgICBpZiAoc3VidHlwZSA9PT0gXCJMdW1pbm9zaXR5XCIpIHtcbiAgICAgIGNvbXBvc2VGbiA9IGNvbXBvc2VTTWFza0x1bWlub3NpdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvc2VGbiA9IGNvbXBvc2VTTWFza0FscGhhO1xuICAgIH1cblxuICAgIHZhciBQSVhFTFNfVE9fUFJPQ0VTUyA9IDEwNDg1NzY7XG4gICAgdmFyIGNodW5rU2l6ZSA9IE1hdGgubWluKGhlaWdodCwgTWF0aC5jZWlsKFBJWEVMU19UT19QUk9DRVNTIC8gd2lkdGgpKTtcblxuICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICs9IGNodW5rU2l6ZSkge1xuICAgICAgdmFyIGNodW5rSGVpZ2h0ID0gTWF0aC5taW4oY2h1bmtTaXplLCBoZWlnaHQgLSByb3cpO1xuICAgICAgdmFyIG1hc2tEYXRhID0gbWFza0N0eC5nZXRJbWFnZURhdGEoMCwgcm93LCB3aWR0aCwgY2h1bmtIZWlnaHQpO1xuICAgICAgdmFyIGxheWVyRGF0YSA9IGxheWVyQ3R4LmdldEltYWdlRGF0YSgwLCByb3csIHdpZHRoLCBjaHVua0hlaWdodCk7XG5cbiAgICAgIGlmIChoYXNCYWNrZHJvcCkge1xuICAgICAgICBjb21wb3NlU01hc2tCYWNrZHJvcChtYXNrRGF0YS5kYXRhLCByMCwgZzAsIGIwKTtcbiAgICAgIH1cblxuICAgICAgY29tcG9zZUZuKG1hc2tEYXRhLmRhdGEsIGxheWVyRGF0YS5kYXRhLCB0cmFuc2Zlck1hcCk7XG4gICAgICBtYXNrQ3R4LnB1dEltYWdlRGF0YShsYXllckRhdGEsIDAsIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcG9zZVNNYXNrKGN0eCwgc21hc2ssIGxheWVyQ3R4LCB3ZWJHTENvbnRleHQpIHtcbiAgICB2YXIgbWFzayA9IHNtYXNrLmNhbnZhcztcbiAgICB2YXIgbWFza0N0eCA9IHNtYXNrLmNvbnRleHQ7XG4gICAgY3R4LnNldFRyYW5zZm9ybShzbWFzay5zY2FsZVgsIDAsIDAsIHNtYXNrLnNjYWxlWSwgc21hc2sub2Zmc2V0WCwgc21hc2sub2Zmc2V0WSk7XG4gICAgdmFyIGJhY2tkcm9wID0gc21hc2suYmFja2Ryb3AgfHwgbnVsbDtcblxuICAgIGlmICghc21hc2sudHJhbnNmZXJNYXAgJiYgd2ViR0xDb250ZXh0LmlzRW5hYmxlZCkge1xuICAgICAgY29uc3QgY29tcG9zZWQgPSB3ZWJHTENvbnRleHQuY29tcG9zZVNNYXNrKHtcbiAgICAgICAgbGF5ZXI6IGxheWVyQ3R4LmNhbnZhcyxcbiAgICAgICAgbWFzayxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHN1YnR5cGU6IHNtYXNrLnN1YnR5cGUsXG4gICAgICAgICAgYmFja2Ryb3BcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgY3R4LmRyYXdJbWFnZShjb21wb3NlZCwgc21hc2sub2Zmc2V0WCwgc21hc2sub2Zmc2V0WSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ2VuZXJpY0NvbXBvc2VTTWFzayhtYXNrQ3R4LCBsYXllckN0eCwgbWFzay53aWR0aCwgbWFzay5oZWlnaHQsIHNtYXNrLnN1YnR5cGUsIGJhY2tkcm9wLCBzbWFzay50cmFuc2Zlck1hcCk7XG4gICAgY3R4LmRyYXdJbWFnZShtYXNrLCAwLCAwKTtcbiAgfVxuXG4gIHZhciBMSU5FX0NBUF9TVFlMRVMgPSBbXCJidXR0XCIsIFwicm91bmRcIiwgXCJzcXVhcmVcIl07XG4gIHZhciBMSU5FX0pPSU5fU1RZTEVTID0gW1wibWl0ZXJcIiwgXCJyb3VuZFwiLCBcImJldmVsXCJdO1xuICB2YXIgTk9STUFMX0NMSVAgPSB7fTtcbiAgdmFyIEVPX0NMSVAgPSB7fTtcbiAgQ2FudmFzR3JhcGhpY3MucHJvdG90eXBlID0ge1xuICAgIGJlZ2luRHJhd2luZyh7XG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICB2aWV3cG9ydCxcbiAgICAgIHRyYW5zcGFyZW5jeSA9IGZhbHNlLFxuICAgICAgYmFja2dyb3VuZCA9IG51bGxcbiAgICB9KSB7XG4gICAgICB2YXIgd2lkdGggPSB0aGlzLmN0eC5jYW52YXMud2lkdGg7XG4gICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5jdHguY2FudmFzLmhlaWdodDtcbiAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGJhY2tncm91bmQgfHwgXCJyZ2IoMjU1LCAyNTUsIDI1NSlcIjtcbiAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuXG4gICAgICBpZiAodHJhbnNwYXJlbmN5KSB7XG4gICAgICAgIHZhciB0cmFuc3BhcmVudENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwidHJhbnNwYXJlbnRcIiwgd2lkdGgsIGhlaWdodCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY29tcG9zaXRlQ3R4ID0gdGhpcy5jdHg7XG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnRDYW52YXMgPSB0cmFuc3BhcmVudENhbnZhcy5jYW52YXM7XG4gICAgICAgIHRoaXMuY3R4ID0gdHJhbnNwYXJlbnRDYW52YXMuY29udGV4dDtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRoaXMuY29tcG9zaXRlQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICByZXNldEN0eFRvRGVmYXVsdCh0aGlzLmN0eCk7XG5cbiAgICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgICAgdGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5KHRoaXMuY3R4LCB0cmFuc2Zvcm0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHZpZXdwb3J0LnRyYW5zZm9ybSk7XG4gICAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKCk7XG5cbiAgICAgIGlmICh0aGlzLmltYWdlTGF5ZXIpIHtcbiAgICAgICAgdGhpcy5pbWFnZUxheWVyLmJlZ2luTGF5b3V0KCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGV4ZWN1dGVPcGVyYXRvckxpc3Q6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2V4ZWN1dGVPcGVyYXRvckxpc3Qob3BlcmF0b3JMaXN0LCBleGVjdXRpb25TdGFydElkeCwgY29udGludWVDYWxsYmFjaywgc3RlcHBlcikge1xuICAgICAgdmFyIGFyZ3NBcnJheSA9IG9wZXJhdG9yTGlzdC5hcmdzQXJyYXk7XG4gICAgICB2YXIgZm5BcnJheSA9IG9wZXJhdG9yTGlzdC5mbkFycmF5O1xuICAgICAgdmFyIGkgPSBleGVjdXRpb25TdGFydElkeCB8fCAwO1xuICAgICAgdmFyIGFyZ3NBcnJheUxlbiA9IGFyZ3NBcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmIChhcmdzQXJyYXlMZW4gPT09IGkpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaHVua09wZXJhdGlvbnMgPSBhcmdzQXJyYXlMZW4gLSBpID4gRVhFQ1VUSU9OX1NURVBTICYmIHR5cGVvZiBjb250aW51ZUNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICB2YXIgZW5kVGltZSA9IGNodW5rT3BlcmF0aW9ucyA/IERhdGUubm93KCkgKyBFWEVDVVRJT05fVElNRSA6IDA7XG4gICAgICB2YXIgc3RlcHMgPSAwO1xuICAgICAgdmFyIGNvbW1vbk9ianMgPSB0aGlzLmNvbW1vbk9ianM7XG4gICAgICB2YXIgb2JqcyA9IHRoaXMub2JqcztcbiAgICAgIHZhciBmbklkO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoc3RlcHBlciAhPT0gdW5kZWZpbmVkICYmIGkgPT09IHN0ZXBwZXIubmV4dEJyZWFrUG9pbnQpIHtcbiAgICAgICAgICBzdGVwcGVyLmJyZWFrSXQoaSwgY29udGludWVDYWxsYmFjayk7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cblxuICAgICAgICBmbklkID0gZm5BcnJheVtpXTtcblxuICAgICAgICBpZiAoZm5JZCAhPT0gX3V0aWwuT1BTLmRlcGVuZGVuY3kpIHtcbiAgICAgICAgICB0aGlzW2ZuSWRdLmFwcGx5KHRoaXMsIGFyZ3NBcnJheVtpXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkZXBPYmpJZCBvZiBhcmdzQXJyYXlbaV0pIHtcbiAgICAgICAgICAgIGNvbnN0IG9ianNQb29sID0gZGVwT2JqSWQuc3RhcnRzV2l0aChcImdfXCIpID8gY29tbW9uT2JqcyA6IG9ianM7XG5cbiAgICAgICAgICAgIGlmICghb2Jqc1Bvb2wuaGFzKGRlcE9iaklkKSkge1xuICAgICAgICAgICAgICBvYmpzUG9vbC5nZXQoZGVwT2JqSWQsIGNvbnRpbnVlQ2FsbGJhY2spO1xuICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpKys7XG5cbiAgICAgICAgaWYgKGkgPT09IGFyZ3NBcnJheUxlbikge1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNodW5rT3BlcmF0aW9ucyAmJiArK3N0ZXBzID4gRVhFQ1VUSU9OX1NURVBTKSB7XG4gICAgICAgICAgaWYgKERhdGUubm93KCkgPiBlbmRUaW1lKSB7XG4gICAgICAgICAgICBjb250aW51ZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGVwcyA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGVuZERyYXdpbmc6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZERyYXdpbmcoKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZW5kU01hc2tHcm91cCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG5cbiAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50Q2FudmFzKSB7XG4gICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jb21wb3NpdGVDdHg7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy50cmFuc3BhcmVudENhbnZhcywgMCwgMCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgdGhpcy50cmFuc3BhcmVudENhbnZhcyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGVkQ2FudmFzZXMuY2xlYXIoKTtcbiAgICAgIHRoaXMud2ViR0xDb250ZXh0LmNsZWFyKCk7XG5cbiAgICAgIGlmICh0aGlzLmltYWdlTGF5ZXIpIHtcbiAgICAgICAgdGhpcy5pbWFnZUxheWVyLmVuZExheW91dCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0TGluZVdpZHRoOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRMaW5lV2lkdGgod2lkdGgpIHtcbiAgICAgIHRoaXMuY3VycmVudC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IHdpZHRoO1xuICAgIH0sXG4gICAgc2V0TGluZUNhcDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0TGluZUNhcChzdHlsZSkge1xuICAgICAgdGhpcy5jdHgubGluZUNhcCA9IExJTkVfQ0FQX1NUWUxFU1tzdHlsZV07XG4gICAgfSxcbiAgICBzZXRMaW5lSm9pbjogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0TGluZUpvaW4oc3R5bGUpIHtcbiAgICAgIHRoaXMuY3R4LmxpbmVKb2luID0gTElORV9KT0lOX1NUWUxFU1tzdHlsZV07XG4gICAgfSxcbiAgICBzZXRNaXRlckxpbWl0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRNaXRlckxpbWl0KGxpbWl0KSB7XG4gICAgICB0aGlzLmN0eC5taXRlckxpbWl0ID0gbGltaXQ7XG4gICAgfSxcbiAgICBzZXREYXNoOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXREYXNoKGRhc2hBcnJheSwgZGFzaFBoYXNlKSB7XG4gICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG5cbiAgICAgIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjdHguc2V0TGluZURhc2goZGFzaEFycmF5KTtcbiAgICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gZGFzaFBoYXNlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50KSB7fSxcblxuICAgIHNldEZsYXRuZXNzKGZsYXRuZXNzKSB7fSxcblxuICAgIHNldEdTdGF0ZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0R1N0YXRlKHN0YXRlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3RhdGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gc3RhdGVzW2ldO1xuICAgICAgICB2YXIga2V5ID0gc3RhdGVbMF07XG4gICAgICAgIHZhciB2YWx1ZSA9IHN0YXRlWzFdO1xuXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgY2FzZSBcIkxXXCI6XG4gICAgICAgICAgICB0aGlzLnNldExpbmVXaWR0aCh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJMQ1wiOlxuICAgICAgICAgICAgdGhpcy5zZXRMaW5lQ2FwKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkxKXCI6XG4gICAgICAgICAgICB0aGlzLnNldExpbmVKb2luKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIk1MXCI6XG4gICAgICAgICAgICB0aGlzLnNldE1pdGVyTGltaXQodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRFwiOlxuICAgICAgICAgICAgdGhpcy5zZXREYXNoKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJSSVwiOlxuICAgICAgICAgICAgdGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRkxcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0RmxhdG5lc3ModmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRm9udFwiOlxuICAgICAgICAgICAgdGhpcy5zZXRGb250KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJDQVwiOlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUFscGhhID0gc3RhdGVbMV07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjYVwiOlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxBbHBoYSA9IHN0YXRlWzFdO1xuICAgICAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSBzdGF0ZVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkJNXCI6XG4gICAgICAgICAgICB0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSB2YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIlNNYXNrXCI6XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlU3RhY2subGVuZ3RoID4gMCAmJiB0aGlzLnN0YXRlU3RhY2tbdGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCAtIDFdLmFjdGl2ZVNNYXNrID09PSB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1c3BlbmRTTWFza0dyb3VwKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRTTWFza0dyb3VwKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrID0gdmFsdWUgPyB0aGlzLnRlbXBTTWFzayA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2spIHtcbiAgICAgICAgICAgICAgdGhpcy5iZWdpblNNYXNrR3JvdXAoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50ZW1wU01hc2sgPSBudWxsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGJlZ2luU01hc2tHcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfYmVnaW5TTWFza0dyb3VwKCkge1xuICAgICAgdmFyIGFjdGl2ZVNNYXNrID0gdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrO1xuICAgICAgdmFyIGRyYXduV2lkdGggPSBhY3RpdmVTTWFzay5jYW52YXMud2lkdGg7XG4gICAgICB2YXIgZHJhd25IZWlnaHQgPSBhY3RpdmVTTWFzay5jYW52YXMuaGVpZ2h0O1xuICAgICAgdmFyIGNhY2hlSWQgPSBcInNtYXNrR3JvdXBBdFwiICsgdGhpcy5ncm91cExldmVsO1xuICAgICAgdmFyIHNjcmF0Y2hDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhjYWNoZUlkLCBkcmF3bldpZHRoLCBkcmF3bkhlaWdodCwgdHJ1ZSk7XG4gICAgICB2YXIgY3VycmVudEN0eCA9IHRoaXMuY3R4O1xuICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBjdXJyZW50Q3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICB2YXIgZ3JvdXBDdHggPSBzY3JhdGNoQ2FudmFzLmNvbnRleHQ7XG4gICAgICBncm91cEN0eC5zY2FsZSgxIC8gYWN0aXZlU01hc2suc2NhbGVYLCAxIC8gYWN0aXZlU01hc2suc2NhbGVZKTtcbiAgICAgIGdyb3VwQ3R4LnRyYW5zbGF0ZSgtYWN0aXZlU01hc2sub2Zmc2V0WCwgLWFjdGl2ZVNNYXNrLm9mZnNldFkpO1xuICAgICAgZ3JvdXBDdHgudHJhbnNmb3JtLmFwcGx5KGdyb3VwQ3R4LCBjdXJyZW50VHJhbnNmb3JtKTtcbiAgICAgIGFjdGl2ZVNNYXNrLnN0YXJ0VHJhbnNmb3JtSW52ZXJzZSA9IGdyb3VwQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlO1xuICAgICAgY29weUN0eFN0YXRlKGN1cnJlbnRDdHgsIGdyb3VwQ3R4KTtcbiAgICAgIHRoaXMuY3R4ID0gZ3JvdXBDdHg7XG4gICAgICB0aGlzLnNldEdTdGF0ZShbW1wiQk1cIiwgXCJzb3VyY2Utb3ZlclwiXSwgW1wiY2FcIiwgMV0sIFtcIkNBXCIsIDFdXSk7XG4gICAgICB0aGlzLmdyb3VwU3RhY2sucHVzaChjdXJyZW50Q3R4KTtcbiAgICAgIHRoaXMuZ3JvdXBMZXZlbCsrO1xuICAgIH0sXG4gICAgc3VzcGVuZFNNYXNrR3JvdXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZFNNYXNrR3JvdXAoKSB7XG4gICAgICB2YXIgZ3JvdXBDdHggPSB0aGlzLmN0eDtcbiAgICAgIHRoaXMuZ3JvdXBMZXZlbC0tO1xuICAgICAgdGhpcy5jdHggPSB0aGlzLmdyb3VwU3RhY2sucG9wKCk7XG4gICAgICBjb21wb3NlU01hc2sodGhpcy5jdHgsIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaywgZ3JvdXBDdHgsIHRoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgIGNvcHlDdHhTdGF0ZShncm91cEN0eCwgdGhpcy5jdHgpO1xuICAgICAgdGhpcy5jdXJyZW50LnJlc3VtZVNNYXNrQ3R4ID0gZ3JvdXBDdHg7XG5cbiAgICAgIHZhciBkZWx0YVRyYW5zZm9ybSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzay5zdGFydFRyYW5zZm9ybUludmVyc2UsIGdyb3VwQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuXG4gICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIGRlbHRhVHJhbnNmb3JtKTtcbiAgICAgIGdyb3VwQ3R4LnNhdmUoKTtcbiAgICAgIGdyb3VwQ3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICAgIGdyb3VwQ3R4LmNsZWFyUmVjdCgwLCAwLCBncm91cEN0eC5jYW52YXMud2lkdGgsIGdyb3VwQ3R4LmNhbnZhcy5oZWlnaHQpO1xuICAgICAgZ3JvdXBDdHgucmVzdG9yZSgpO1xuICAgIH0sXG4gICAgcmVzdW1lU01hc2tHcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kU01hc2tHcm91cCgpIHtcbiAgICAgIHZhciBncm91cEN0eCA9IHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eDtcbiAgICAgIHZhciBjdXJyZW50Q3R4ID0gdGhpcy5jdHg7XG4gICAgICB0aGlzLmN0eCA9IGdyb3VwQ3R4O1xuICAgICAgdGhpcy5ncm91cFN0YWNrLnB1c2goY3VycmVudEN0eCk7XG4gICAgICB0aGlzLmdyb3VwTGV2ZWwrKztcbiAgICB9LFxuICAgIGVuZFNNYXNrR3JvdXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZFNNYXNrR3JvdXAoKSB7XG4gICAgICB2YXIgZ3JvdXBDdHggPSB0aGlzLmN0eDtcbiAgICAgIHRoaXMuZ3JvdXBMZXZlbC0tO1xuICAgICAgdGhpcy5jdHggPSB0aGlzLmdyb3VwU3RhY2sucG9wKCk7XG4gICAgICBjb21wb3NlU01hc2sodGhpcy5jdHgsIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaywgZ3JvdXBDdHgsIHRoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgIGNvcHlDdHhTdGF0ZShncm91cEN0eCwgdGhpcy5jdHgpO1xuXG4gICAgICB2YXIgZGVsdGFUcmFuc2Zvcm0gPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2suc3RhcnRUcmFuc2Zvcm1JbnZlcnNlLCBncm91cEN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKTtcblxuICAgICAgdGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5KHRoaXMuY3R4LCBkZWx0YVRyYW5zZm9ybSk7XG4gICAgfSxcbiAgICBzYXZlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zYXZlKCkge1xuICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgdmFyIG9sZCA9IHRoaXMuY3VycmVudDtcbiAgICAgIHRoaXMuc3RhdGVTdGFjay5wdXNoKG9sZCk7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBvbGQuY2xvbmUoKTtcbiAgICAgIHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eCA9IG51bGw7XG4gICAgfSxcbiAgICByZXN0b3JlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19yZXN0b3JlKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eCkge1xuICAgICAgICB0aGlzLnJlc3VtZVNNYXNrR3JvdXAoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayAhPT0gbnVsbCAmJiAodGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCA9PT0gMCB8fCB0aGlzLnN0YXRlU3RhY2tbdGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCAtIDFdLmFjdGl2ZVNNYXNrICE9PSB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2spKSB7XG4gICAgICAgIHRoaXMuZW5kU01hc2tHcm91cCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnN0YXRlU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgdHJhbnNmb3JtOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc190cmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgdGhpcy5jdHgudHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IG51bGw7XG4gICAgfSxcbiAgICBjb25zdHJ1Y3RQYXRoOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19jb25zdHJ1Y3RQYXRoKG9wcywgYXJncykge1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICB2YXIgeCA9IGN1cnJlbnQueCxcbiAgICAgICAgICB5ID0gY3VycmVudC55O1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaiA9IDAsIGlpID0gb3BzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgc3dpdGNoIChvcHNbaV0gfCAwKSB7XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucmVjdGFuZ2xlOlxuICAgICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBhcmdzW2orK107XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gYXJnc1tqKytdO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHh3ID0geCArIHdpZHRoO1xuICAgICAgICAgICAgdmFyIHloID0geSArIGhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4dywgeSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeHcsIHloKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5aCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubW92ZVRvOlxuICAgICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5saW5lVG86XG4gICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgeSA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG86XG4gICAgICAgICAgICB4ID0gYXJnc1tqICsgNF07XG4gICAgICAgICAgICB5ID0gYXJnc1tqICsgNV07XG4gICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhhcmdzW2pdLCBhcmdzW2ogKyAxXSwgYXJnc1tqICsgMl0sIGFyZ3NbaiArIDNdLCB4LCB5KTtcbiAgICAgICAgICAgIGogKz0gNjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzI6XG4gICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyh4LCB5LCBhcmdzW2pdLCBhcmdzW2ogKyAxXSwgYXJnc1tqICsgMl0sIGFyZ3NbaiArIDNdKTtcbiAgICAgICAgICAgIHggPSBhcmdzW2ogKyAyXTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2ogKyAzXTtcbiAgICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzM6XG4gICAgICAgICAgICB4ID0gYXJnc1tqICsgMl07XG4gICAgICAgICAgICB5ID0gYXJnc1tqICsgM107XG4gICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhhcmdzW2pdLCBhcmdzW2ogKyAxXSwgeCwgeSwgeCwgeSk7XG4gICAgICAgICAgICBqICs9IDQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQuc2V0Q3VycmVudFBvaW50KHgsIHkpO1xuICAgIH0sXG4gICAgY2xvc2VQYXRoOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19jbG9zZVBhdGgoKSB7XG4gICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICB9LFxuICAgIHN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc3Ryb2tlKGNvbnN1bWVQYXRoKSB7XG4gICAgICBjb25zdW1lUGF0aCA9IHR5cGVvZiBjb25zdW1lUGF0aCAhPT0gXCJ1bmRlZmluZWRcIiA/IGNvbnN1bWVQYXRoIDogdHJ1ZTtcbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgIHZhciBzdHJva2VDb2xvciA9IHRoaXMuY3VycmVudC5zdHJva2VDb2xvcjtcbiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IHRoaXMuY3VycmVudC5zdHJva2VBbHBoYTtcblxuICAgICAgaWYgKHN0cm9rZUNvbG9yICYmIHN0cm9rZUNvbG9yLmhhc093blByb3BlcnR5KFwidHlwZVwiKSAmJiBzdHJva2VDb2xvci50eXBlID09PSBcIlBhdHRlcm5cIikge1xuICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybTtcblxuICAgICAgICBjb25zdCBzY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodHJhbnNmb3JtKVswXTtcblxuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBzdHJva2VDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcyk7XG4gICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1heCh0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKSAqIE1JTl9XSURUSF9GQUNUT1IsIHRoaXMuY3VycmVudC5saW5lV2lkdGggKiBzY2FsZSk7XG4gICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1heCh0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKSAqIE1JTl9XSURUSF9GQUNUT1IsIHRoaXMuY3VycmVudC5saW5lV2lkdGgpO1xuICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25zdW1lUGF0aCkge1xuICAgICAgICB0aGlzLmNvbnN1bWVQYXRoKCk7XG4gICAgICB9XG5cbiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IHRoaXMuY3VycmVudC5maWxsQWxwaGE7XG4gICAgfSxcbiAgICBjbG9zZVN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfY2xvc2VTdHJva2UoKSB7XG4gICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICB9LFxuICAgIGZpbGw6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2ZpbGwoY29uc3VtZVBhdGgpIHtcbiAgICAgIGNvbnN1bWVQYXRoID0gdHlwZW9mIGNvbnN1bWVQYXRoICE9PSBcInVuZGVmaW5lZFwiID8gY29uc3VtZVBhdGggOiB0cnVlO1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgdmFyIGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgICB2YXIgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgIHZhciBuZWVkUmVzdG9yZSA9IGZhbHNlO1xuXG4gICAgICBpZiAoaXNQYXR0ZXJuRmlsbCkge1xuICAgICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmJhc2VUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtLmFwcGx5KGN0eCwgdGhpcy5iYXNlVHJhbnNmb3JtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsQ29sb3IuZ2V0UGF0dGVybihjdHgsIHRoaXMpO1xuICAgICAgICBuZWVkUmVzdG9yZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBlbmRpbmdFT0ZpbGwpIHtcbiAgICAgICAgY3R4LmZpbGwoXCJldmVub2RkXCIpO1xuICAgICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5maWxsKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWVkUmVzdG9yZSkge1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uc3VtZVBhdGgpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZW9GaWxsOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lb0ZpbGwoKSB7XG4gICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSB0cnVlO1xuICAgICAgdGhpcy5maWxsKCk7XG4gICAgfSxcbiAgICBmaWxsU3Ryb2tlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19maWxsU3Ryb2tlKCkge1xuICAgICAgdGhpcy5maWxsKGZhbHNlKTtcbiAgICAgIHRoaXMuc3Ryb2tlKGZhbHNlKTtcbiAgICAgIHRoaXMuY29uc3VtZVBhdGgoKTtcbiAgICB9LFxuICAgIGVvRmlsbFN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW9GaWxsU3Ryb2tlKCkge1xuICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICAgIH0sXG4gICAgY2xvc2VGaWxsU3Ryb2tlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19jbG9zZUZpbGxTdHJva2UoKSB7XG4gICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgfSxcbiAgICBjbG9zZUVPRmlsbFN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfY2xvc2VFT0ZpbGxTdHJva2UoKSB7XG4gICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSB0cnVlO1xuICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICAgIH0sXG4gICAgZW5kUGF0aDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kUGF0aCgpIHtcbiAgICAgIHRoaXMuY29uc3VtZVBhdGgoKTtcbiAgICB9LFxuICAgIGNsaXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2NsaXAoKSB7XG4gICAgICB0aGlzLnBlbmRpbmdDbGlwID0gTk9STUFMX0NMSVA7XG4gICAgfSxcbiAgICBlb0NsaXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VvQ2xpcCgpIHtcbiAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBFT19DTElQO1xuICAgIH0sXG4gICAgYmVnaW5UZXh0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpblRleHQoKSB7XG4gICAgICB0aGlzLmN1cnJlbnQudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSAxO1xuICAgICAgdGhpcy5jdXJyZW50LnggPSB0aGlzLmN1cnJlbnQubGluZVggPSAwO1xuICAgICAgdGhpcy5jdXJyZW50LnkgPSB0aGlzLmN1cnJlbnQubGluZVkgPSAwO1xuICAgIH0sXG4gICAgZW5kVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kVGV4dCgpIHtcbiAgICAgIHZhciBwYXRocyA9IHRoaXMucGVuZGluZ1RleHRQYXRocztcbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcblxuICAgICAgaWYgKHBhdGhzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN0eC5zYXZlKCk7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBhdGggPSBwYXRoc1tpXTtcbiAgICAgICAgY3R4LnNldFRyYW5zZm9ybS5hcHBseShjdHgsIHBhdGgudHJhbnNmb3JtKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZShwYXRoLngsIHBhdGgueSk7XG4gICAgICAgIHBhdGguYWRkVG9QYXRoKGN0eCwgcGF0aC5mb250U2l6ZSk7XG4gICAgICB9XG5cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICBjdHguY2xpcCgpO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgZGVsZXRlIHRoaXMucGVuZGluZ1RleHRQYXRocztcbiAgICB9LFxuICAgIHNldENoYXJTcGFjaW5nOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRDaGFyU3BhY2luZyhzcGFjaW5nKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuY2hhclNwYWNpbmcgPSBzcGFjaW5nO1xuICAgIH0sXG4gICAgc2V0V29yZFNwYWNpbmc6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldFdvcmRTcGFjaW5nKHNwYWNpbmcpIHtcbiAgICAgIHRoaXMuY3VycmVudC53b3JkU3BhY2luZyA9IHNwYWNpbmc7XG4gICAgfSxcbiAgICBzZXRIU2NhbGU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEhTY2FsZShzY2FsZSkge1xuICAgICAgdGhpcy5jdXJyZW50LnRleHRIU2NhbGUgPSBzY2FsZSAvIDEwMDtcbiAgICB9LFxuICAgIHNldExlYWRpbmc6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldExlYWRpbmcobGVhZGluZykge1xuICAgICAgdGhpcy5jdXJyZW50LmxlYWRpbmcgPSAtbGVhZGluZztcbiAgICB9LFxuICAgIHNldEZvbnQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEZvbnQoZm9udFJlZk5hbWUsIHNpemUpIHtcbiAgICAgIHZhciBmb250T2JqID0gdGhpcy5jb21tb25PYmpzLmdldChmb250UmVmTmFtZSk7XG4gICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcblxuICAgICAgaWYgKCFmb250T2JqKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgZmluZCBmb250IGZvciAke2ZvbnRSZWZOYW1lfWApO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LmZvbnRNYXRyaXggPSBmb250T2JqLmZvbnRNYXRyaXggPyBmb250T2JqLmZvbnRNYXRyaXggOiBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWDtcblxuICAgICAgaWYgKGN1cnJlbnQuZm9udE1hdHJpeFswXSA9PT0gMCB8fCBjdXJyZW50LmZvbnRNYXRyaXhbM10gPT09IDApIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCBcIiArIGZvbnRSZWZOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgIHNpemUgPSAtc2l6ZTtcbiAgICAgICAgY3VycmVudC5mb250RGlyZWN0aW9uID0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAxO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnQuZm9udCA9IGZvbnRPYmo7XG4gICAgICB0aGlzLmN1cnJlbnQuZm9udFNpemUgPSBzaXplO1xuXG4gICAgICBpZiAoZm9udE9iai5pc1R5cGUzRm9udCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBuYW1lID0gZm9udE9iai5sb2FkZWROYW1lIHx8IFwic2Fucy1zZXJpZlwiO1xuICAgICAgbGV0IGJvbGQgPSBcIm5vcm1hbFwiO1xuXG4gICAgICBpZiAoZm9udE9iai5ibGFjaykge1xuICAgICAgICBib2xkID0gXCI5MDBcIjtcbiAgICAgIH0gZWxzZSBpZiAoZm9udE9iai5ib2xkKSB7XG4gICAgICAgIGJvbGQgPSBcImJvbGRcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0YWxpYyA9IGZvbnRPYmouaXRhbGljID8gXCJpdGFsaWNcIiA6IFwibm9ybWFsXCI7XG4gICAgICB2YXIgdHlwZWZhY2UgPSBgXCIke25hbWV9XCIsICR7Zm9udE9iai5mYWxsYmFja05hbWV9YDtcbiAgICAgIGxldCBicm93c2VyRm9udFNpemUgPSBzaXplO1xuXG4gICAgICBpZiAoc2l6ZSA8IE1JTl9GT05UX1NJWkUpIHtcbiAgICAgICAgYnJvd3NlckZvbnRTaXplID0gTUlOX0ZPTlRfU0laRTtcbiAgICAgIH0gZWxzZSBpZiAoc2l6ZSA+IE1BWF9GT05UX1NJWkUpIHtcbiAgICAgICAgYnJvd3NlckZvbnRTaXplID0gTUFYX0ZPTlRfU0laRTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50LmZvbnRTaXplU2NhbGUgPSBzaXplIC8gYnJvd3NlckZvbnRTaXplO1xuICAgICAgdGhpcy5jdHguZm9udCA9IGAke2l0YWxpY30gJHtib2xkfSAke2Jyb3dzZXJGb250U2l6ZX1weCAke3R5cGVmYWNlfWA7XG4gICAgfSxcbiAgICBzZXRUZXh0UmVuZGVyaW5nTW9kZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0VGV4dFJlbmRlcmluZ01vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID0gbW9kZTtcbiAgICB9LFxuICAgIHNldFRleHRSaXNlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRUZXh0UmlzZShyaXNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQudGV4dFJpc2UgPSByaXNlO1xuICAgIH0sXG4gICAgbW92ZVRleHQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX21vdmVUZXh0KHgsIHkpIHtcbiAgICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYICs9IHg7XG4gICAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSArPSB5O1xuICAgIH0sXG4gICAgc2V0TGVhZGluZ01vdmVUZXh0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRMZWFkaW5nTW92ZVRleHQoeCwgeSkge1xuICAgICAgdGhpcy5zZXRMZWFkaW5nKC15KTtcbiAgICAgIHRoaXMubW92ZVRleHQoeCwgeSk7XG4gICAgfSxcbiAgICBzZXRUZXh0TWF0cml4OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRUZXh0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4ID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdGhpcy5jdXJyZW50LnRleHRNYXRyaXhTY2FsZSA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYID0gMDtcbiAgICAgIHRoaXMuY3VycmVudC55ID0gdGhpcy5jdXJyZW50LmxpbmVZID0gMDtcbiAgICB9LFxuICAgIG5leHRMaW5lOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19uZXh0TGluZSgpIHtcbiAgICAgIHRoaXMubW92ZVRleHQoMCwgdGhpcy5jdXJyZW50LmxlYWRpbmcpO1xuICAgIH0sXG5cbiAgICBwYWludENoYXIoY2hhcmFjdGVyLCB4LCB5LCBwYXR0ZXJuVHJhbnNmb3JtKSB7XG4gICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIHZhciBmb250ID0gY3VycmVudC5mb250O1xuICAgICAgdmFyIHRleHRSZW5kZXJpbmdNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZTtcbiAgICAgIHZhciBmb250U2l6ZSA9IGN1cnJlbnQuZm9udFNpemUgLyBjdXJyZW50LmZvbnRTaXplU2NhbGU7XG4gICAgICB2YXIgZmlsbFN0cm9rZU1vZGUgPSB0ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG4gICAgICB2YXIgaXNBZGRUb1BhdGhTZXQgPSAhISh0ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcpO1xuICAgICAgY29uc3QgcGF0dGVybkZpbGwgPSBjdXJyZW50LnBhdHRlcm5GaWxsICYmICFmb250Lm1pc3NpbmdGaWxlO1xuICAgICAgdmFyIGFkZFRvUGF0aDtcblxuICAgICAgaWYgKGZvbnQuZGlzYWJsZUZvbnRGYWNlIHx8IGlzQWRkVG9QYXRoU2V0IHx8IHBhdHRlcm5GaWxsKSB7XG4gICAgICAgIGFkZFRvUGF0aCA9IGZvbnQuZ2V0UGF0aEdlbmVyYXRvcih0aGlzLmNvbW1vbk9ianMsIGNoYXJhY3Rlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb250LmRpc2FibGVGb250RmFjZSB8fCBwYXR0ZXJuRmlsbCkge1xuICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKHgsIHkpO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGFkZFRvUGF0aChjdHgsIGZvbnRTaXplKTtcblxuICAgICAgICBpZiAocGF0dGVyblRyYW5zZm9ybSkge1xuICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBwYXR0ZXJuVHJhbnNmb3JtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTCB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0UgfHwgZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKSB7XG4gICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTCB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICBjdHguZmlsbFRleHQoY2hhcmFjdGVyLCB4LCB5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICAgIGN0eC5zdHJva2VUZXh0KGNoYXJhY3RlciwgeCwgeSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQWRkVG9QYXRoU2V0KSB7XG4gICAgICAgIHZhciBwYXRocyA9IHRoaXMucGVuZGluZ1RleHRQYXRocyB8fCAodGhpcy5wZW5kaW5nVGV4dFBhdGhzID0gW10pO1xuICAgICAgICBwYXRocy5wdXNoKHtcbiAgICAgICAgICB0cmFuc2Zvcm06IGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLFxuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICBhZGRUb1BhdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldCBpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29udGV4dDogY3R4XG4gICAgICB9ID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZFwiLCAxMCwgMTApO1xuICAgICAgY3R4LnNjYWxlKDEuNSwgMSk7XG4gICAgICBjdHguZmlsbFRleHQoXCJJXCIsIDAsIDEwKTtcbiAgICAgIHZhciBkYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCAxMCwgMTApLmRhdGE7XG4gICAgICB2YXIgZW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBpID0gMzsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgaWYgKGRhdGFbaV0gPiAwICYmIGRhdGFbaV0gPCAyNTUpIHtcbiAgICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZFwiLCBlbmFibGVkKTtcbiAgICB9LFxuXG4gICAgc2hvd1RleHQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3Nob3dUZXh0KGdseXBocykge1xuICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICB2YXIgZm9udCA9IGN1cnJlbnQuZm9udDtcblxuICAgICAgaWYgKGZvbnQuaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1R5cGUzVGV4dChnbHlwaHMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZm9udFNpemUgPSBjdXJyZW50LmZvbnRTaXplO1xuXG4gICAgICBpZiAoZm9udFNpemUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgdmFyIGZvbnRTaXplU2NhbGUgPSBjdXJyZW50LmZvbnRTaXplU2NhbGU7XG4gICAgICB2YXIgY2hhclNwYWNpbmcgPSBjdXJyZW50LmNoYXJTcGFjaW5nO1xuICAgICAgdmFyIHdvcmRTcGFjaW5nID0gY3VycmVudC53b3JkU3BhY2luZztcbiAgICAgIHZhciBmb250RGlyZWN0aW9uID0gY3VycmVudC5mb250RGlyZWN0aW9uO1xuICAgICAgdmFyIHRleHRIU2NhbGUgPSBjdXJyZW50LnRleHRIU2NhbGUgKiBmb250RGlyZWN0aW9uO1xuICAgICAgdmFyIGdseXBoc0xlbmd0aCA9IGdseXBocy5sZW5ndGg7XG4gICAgICB2YXIgdmVydGljYWwgPSBmb250LnZlcnRpY2FsO1xuICAgICAgdmFyIHNwYWNpbmdEaXIgPSB2ZXJ0aWNhbCA/IDEgOiAtMTtcbiAgICAgIHZhciBkZWZhdWx0Vk1ldHJpY3MgPSBmb250LmRlZmF1bHRWTWV0cmljcztcbiAgICAgIHZhciB3aWR0aEFkdmFuY2VTY2FsZSA9IGZvbnRTaXplICogY3VycmVudC5mb250TWF0cml4WzBdO1xuICAgICAgdmFyIHNpbXBsZUZpbGxUZXh0ID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTCAmJiAhZm9udC5kaXNhYmxlRm9udEZhY2UgJiYgIWN1cnJlbnQucGF0dGVybkZpbGw7XG4gICAgICBjdHguc2F2ZSgpO1xuICAgICAgbGV0IHBhdHRlcm5UcmFuc2Zvcm07XG5cbiAgICAgIGlmIChjdXJyZW50LnBhdHRlcm5GaWxsKSB7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBjdXJyZW50LmZpbGxDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcyk7XG4gICAgICAgIHBhdHRlcm5UcmFuc2Zvcm0gPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHBhdHRlcm47XG4gICAgICB9XG5cbiAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBjdXJyZW50LnRleHRNYXRyaXgpO1xuICAgICAgY3R4LnRyYW5zbGF0ZShjdXJyZW50LngsIGN1cnJlbnQueSArIGN1cnJlbnQudGV4dFJpc2UpO1xuXG4gICAgICBpZiAoZm9udERpcmVjdGlvbiA+IDApIHtcbiAgICAgICAgY3R4LnNjYWxlKHRleHRIU2NhbGUsIC0xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5zY2FsZSh0ZXh0SFNjYWxlLCAxKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxpbmVXaWR0aCA9IGN1cnJlbnQubGluZVdpZHRoO1xuICAgICAgdmFyIHNjYWxlID0gY3VycmVudC50ZXh0TWF0cml4U2NhbGU7XG5cbiAgICAgIGlmIChzY2FsZSA9PT0gMCB8fCBsaW5lV2lkdGggPT09IDApIHtcbiAgICAgICAgdmFyIGZpbGxTdHJva2VNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG5cbiAgICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0UgfHwgZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKSB7XG4gICAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IG51bGw7XG4gICAgICAgICAgbGluZVdpZHRoID0gdGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkgKiBNSU5fV0lEVEhfRkFDVE9SO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lV2lkdGggLz0gc2NhbGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb250U2l6ZVNjYWxlICE9PSAxLjApIHtcbiAgICAgICAgY3R4LnNjYWxlKGZvbnRTaXplU2NhbGUsIGZvbnRTaXplU2NhbGUpO1xuICAgICAgICBsaW5lV2lkdGggLz0gZm9udFNpemVTY2FsZTtcbiAgICAgIH1cblxuICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgIHZhciB4ID0gMCxcbiAgICAgICAgICBpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ2x5cGhzTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGdseXBoID0gZ2x5cGhzW2ldO1xuXG4gICAgICAgIGlmICgoMCwgX3V0aWwuaXNOdW0pKGdseXBoKSkge1xuICAgICAgICAgIHggKz0gc3BhY2luZ0RpciAqIGdseXBoICogZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3RvcmVOZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZztcbiAgICAgICAgdmFyIGNoYXJhY3RlciA9IGdseXBoLmZvbnRDaGFyO1xuICAgICAgICB2YXIgYWNjZW50ID0gZ2x5cGguYWNjZW50O1xuICAgICAgICB2YXIgc2NhbGVkWCwgc2NhbGVkWSwgc2NhbGVkQWNjZW50WCwgc2NhbGVkQWNjZW50WTtcbiAgICAgICAgdmFyIHdpZHRoID0gZ2x5cGgud2lkdGg7XG5cbiAgICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgICAgdmFyIHZtZXRyaWMsIHZ4LCB2eTtcbiAgICAgICAgICB2bWV0cmljID0gZ2x5cGgudm1ldHJpYyB8fCBkZWZhdWx0Vk1ldHJpY3M7XG4gICAgICAgICAgdnggPSBnbHlwaC52bWV0cmljID8gdm1ldHJpY1sxXSA6IHdpZHRoICogMC41O1xuICAgICAgICAgIHZ4ID0gLXZ4ICogd2lkdGhBZHZhbmNlU2NhbGU7XG4gICAgICAgICAgdnkgPSB2bWV0cmljWzJdICogd2lkdGhBZHZhbmNlU2NhbGU7XG4gICAgICAgICAgd2lkdGggPSB2bWV0cmljID8gLXZtZXRyaWNbMF0gOiB3aWR0aDtcbiAgICAgICAgICBzY2FsZWRYID0gdnggLyBmb250U2l6ZVNjYWxlO1xuICAgICAgICAgIHNjYWxlZFkgPSAoeCArIHZ5KSAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NhbGVkWCA9IHggLyBmb250U2l6ZVNjYWxlO1xuICAgICAgICAgIHNjYWxlZFkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvbnQucmVtZWFzdXJlICYmIHdpZHRoID4gMCkge1xuICAgICAgICAgIHZhciBtZWFzdXJlZFdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KGNoYXJhY3Rlcikud2lkdGggKiAxMDAwIC8gZm9udFNpemUgKiBmb250U2l6ZVNjYWxlO1xuXG4gICAgICAgICAgaWYgKHdpZHRoIDwgbWVhc3VyZWRXaWR0aCAmJiB0aGlzLmlzRm9udFN1YnBpeGVsQUFFbmFibGVkKSB7XG4gICAgICAgICAgICB2YXIgY2hhcmFjdGVyU2NhbGVYID0gd2lkdGggLyBtZWFzdXJlZFdpZHRoO1xuICAgICAgICAgICAgcmVzdG9yZU5lZWRlZCA9IHRydWU7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4LnNjYWxlKGNoYXJhY3RlclNjYWxlWCwgMSk7XG4gICAgICAgICAgICBzY2FsZWRYIC89IGNoYXJhY3RlclNjYWxlWDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoICE9PSBtZWFzdXJlZFdpZHRoKSB7XG4gICAgICAgICAgICBzY2FsZWRYICs9ICh3aWR0aCAtIG1lYXN1cmVkV2lkdGgpIC8gMjAwMCAqIGZvbnRTaXplIC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2x5cGguaXNJbkZvbnQgfHwgZm9udC5taXNzaW5nRmlsZSkge1xuICAgICAgICAgIGlmIChzaW1wbGVGaWxsVGV4dCAmJiAhYWNjZW50KSB7XG4gICAgICAgICAgICBjdHguZmlsbFRleHQoY2hhcmFjdGVyLCBzY2FsZWRYLCBzY2FsZWRZKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYWludENoYXIoY2hhcmFjdGVyLCBzY2FsZWRYLCBzY2FsZWRZLCBwYXR0ZXJuVHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgaWYgKGFjY2VudCkge1xuICAgICAgICAgICAgICBzY2FsZWRBY2NlbnRYID0gc2NhbGVkWCArIGFjY2VudC5vZmZzZXQueCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICAgIHNjYWxlZEFjY2VudFkgPSBzY2FsZWRZIC0gYWNjZW50Lm9mZnNldC55IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICAgICAgdGhpcy5wYWludENoYXIoYWNjZW50LmZvbnRDaGFyLCBzY2FsZWRBY2NlbnRYLCBzY2FsZWRBY2NlbnRZLCBwYXR0ZXJuVHJhbnNmb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhcldpZHRoO1xuXG4gICAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICAgIGNoYXJXaWR0aCA9IHdpZHRoICogd2lkdGhBZHZhbmNlU2NhbGUgLSBzcGFjaW5nICogZm9udERpcmVjdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlICsgc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICB4ICs9IGNoYXJXaWR0aDtcblxuICAgICAgICBpZiAocmVzdG9yZU5lZWRlZCkge1xuICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIGN1cnJlbnQueSAtPSB4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudC54ICs9IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgfVxuXG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH0sXG4gICAgc2hvd1R5cGUzVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2hvd1R5cGUzVGV4dChnbHlwaHMpIHtcbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG4gICAgICB2YXIgZm9udFNpemUgPSBjdXJyZW50LmZvbnRTaXplO1xuICAgICAgdmFyIGZvbnREaXJlY3Rpb24gPSBjdXJyZW50LmZvbnREaXJlY3Rpb247XG4gICAgICB2YXIgc3BhY2luZ0RpciA9IGZvbnQudmVydGljYWwgPyAxIDogLTE7XG4gICAgICB2YXIgY2hhclNwYWNpbmcgPSBjdXJyZW50LmNoYXJTcGFjaW5nO1xuICAgICAgdmFyIHdvcmRTcGFjaW5nID0gY3VycmVudC53b3JkU3BhY2luZztcbiAgICAgIHZhciB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjtcbiAgICAgIHZhciBmb250TWF0cml4ID0gY3VycmVudC5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgdmFyIGdseXBoc0xlbmd0aCA9IGdseXBocy5sZW5ndGg7XG4gICAgICB2YXIgaXNUZXh0SW52aXNpYmxlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuSU5WSVNJQkxFO1xuICAgICAgdmFyIGksIGdseXBoLCB3aWR0aCwgc3BhY2luZ0xlbmd0aDtcblxuICAgICAgaWYgKGlzVGV4dEludmlzaWJsZSB8fCBmb250U2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBjdXJyZW50LnRleHRNYXRyaXgpO1xuICAgICAgY3R4LnRyYW5zbGF0ZShjdXJyZW50LngsIGN1cnJlbnQueSk7XG4gICAgICBjdHguc2NhbGUodGV4dEhTY2FsZSwgZm9udERpcmVjdGlvbik7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaHNMZW5ndGg7ICsraSkge1xuICAgICAgICBnbHlwaCA9IGdseXBoc1tpXTtcblxuICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgICBzcGFjaW5nTGVuZ3RoID0gc3BhY2luZ0RpciAqIGdseXBoICogZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgIHRoaXMuY3R4LnRyYW5zbGF0ZShzcGFjaW5nTGVuZ3RoLCAwKTtcbiAgICAgICAgICBjdXJyZW50LnggKz0gc3BhY2luZ0xlbmd0aCAqIHRleHRIU2NhbGU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3BhY2luZyA9IChnbHlwaC5pc1NwYWNlID8gd29yZFNwYWNpbmcgOiAwKSArIGNoYXJTcGFjaW5nO1xuICAgICAgICB2YXIgb3BlcmF0b3JMaXN0ID0gZm9udC5jaGFyUHJvY09wZXJhdG9yTGlzdFtnbHlwaC5vcGVyYXRvckxpc3RJZF07XG5cbiAgICAgICAgaWYgKCFvcGVyYXRvckxpc3QpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFR5cGUzIGNoYXJhY3RlciBcIiR7Z2x5cGgub3BlcmF0b3JMaXN0SWR9XCIgaXMgbm90IGF2YWlsYWJsZS5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ1R5cGUzID0gZ2x5cGg7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICBjdHguc2NhbGUoZm9udFNpemUsIGZvbnRTaXplKTtcbiAgICAgICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIGZvbnRNYXRyaXgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGVPcGVyYXRvckxpc3Qob3BlcmF0b3JMaXN0KTtcbiAgICAgICAgdGhpcy5yZXN0b3JlKCk7XG5cbiAgICAgICAgdmFyIHRyYW5zZm9ybWVkID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbZ2x5cGgud2lkdGgsIDBdLCBmb250TWF0cml4KTtcblxuICAgICAgICB3aWR0aCA9IHRyYW5zZm9ybWVkWzBdICogZm9udFNpemUgKyBzcGFjaW5nO1xuICAgICAgICBjdHgudHJhbnNsYXRlKHdpZHRoLCAwKTtcbiAgICAgICAgY3VycmVudC54ICs9IHdpZHRoICogdGV4dEhTY2FsZTtcbiAgICAgIH1cblxuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1R5cGUzID0gbnVsbDtcbiAgICB9LFxuICAgIHNldENoYXJXaWR0aDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0Q2hhcldpZHRoKHhXaWR0aCwgeVdpZHRoKSB7fSxcbiAgICBzZXRDaGFyV2lkdGhBbmRCb3VuZHM6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldENoYXJXaWR0aEFuZEJvdW5kcyh4V2lkdGgsIHlXaWR0aCwgbGx4LCBsbHksIHVyeCwgdXJ5KSB7XG4gICAgICB0aGlzLmN0eC5yZWN0KGxseCwgbGx5LCB1cnggLSBsbHgsIHVyeSAtIGxseSk7XG4gICAgICB0aGlzLmNsaXAoKTtcbiAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgIH0sXG4gICAgZ2V0Q29sb3JOX1BhdHRlcm46IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2dldENvbG9yTl9QYXR0ZXJuKElSKSB7XG4gICAgICB2YXIgcGF0dGVybjtcblxuICAgICAgaWYgKElSWzBdID09PSBcIlRpbGluZ1BhdHRlcm5cIikge1xuICAgICAgICB2YXIgY29sb3IgPSBJUlsxXTtcbiAgICAgICAgdmFyIGJhc2VUcmFuc2Zvcm0gPSB0aGlzLmJhc2VUcmFuc2Zvcm0gfHwgdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybS5zbGljZSgpO1xuICAgICAgICB2YXIgY2FudmFzR3JhcGhpY3NGYWN0b3J5ID0ge1xuICAgICAgICAgIGNyZWF0ZUNhbnZhc0dyYXBoaWNzOiBjdHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDYW52YXNHcmFwaGljcyhjdHgsIHRoaXMuY29tbW9uT2JqcywgdGhpcy5vYmpzLCB0aGlzLmNhbnZhc0ZhY3RvcnksIHRoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHBhdHRlcm4gPSBuZXcgX3BhdHRlcm5faGVscGVyLlRpbGluZ1BhdHRlcm4oSVIsIGNvbG9yLCB0aGlzLmN0eCwgY2FudmFzR3JhcGhpY3NGYWN0b3J5LCBiYXNlVHJhbnNmb3JtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdHRlcm4gPSAoMCwgX3BhdHRlcm5faGVscGVyLmdldFNoYWRpbmdQYXR0ZXJuRnJvbUlSKShJUik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgIH0sXG4gICAgc2V0U3Ryb2tlQ29sb3JOOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRTdHJva2VDb2xvck4oKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSB0aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBzZXRGaWxsQ29sb3JOOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRGaWxsQ29sb3JOKCkge1xuICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IHRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKTtcbiAgICAgIHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCA9IHRydWU7XG4gICAgfSxcbiAgICBzZXRTdHJva2VSR0JDb2xvcjogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0U3Ryb2tlUkdCQ29sb3IociwgZywgYikge1xuICAgICAgdmFyIGNvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKHIsIGcsIGIpO1xuXG4gICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gY29sb3I7XG4gICAgfSxcbiAgICBzZXRGaWxsUkdCQ29sb3I6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEZpbGxSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICB2YXIgY29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IociwgZywgYik7XG5cbiAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IGNvbG9yO1xuICAgICAgdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsID0gZmFsc2U7XG4gICAgfSxcbiAgICBzaGFkaW5nRmlsbDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2hhZGluZ0ZpbGwocGF0dGVybklSKSB7XG4gICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICB0aGlzLnNhdmUoKTtcbiAgICAgIHZhciBwYXR0ZXJuID0gKDAsIF9wYXR0ZXJuX2hlbHBlci5nZXRTaGFkaW5nUGF0dGVybkZyb21JUikocGF0dGVybklSKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBwYXR0ZXJuLmdldFBhdHRlcm4oY3R4LCB0aGlzLCB0cnVlKTtcbiAgICAgIHZhciBpbnYgPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2U7XG5cbiAgICAgIGlmIChpbnYpIHtcbiAgICAgICAgdmFyIGNhbnZhcyA9IGN0eC5jYW52YXM7XG4gICAgICAgIHZhciB3aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIGJsID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbMCwgMF0sIGludik7XG5cbiAgICAgICAgdmFyIGJyID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbMCwgaGVpZ2h0XSwgaW52KTtcblxuICAgICAgICB2YXIgdWwgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFt3aWR0aCwgMF0sIGludik7XG5cbiAgICAgICAgdmFyIHVyID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbd2lkdGgsIGhlaWdodF0sIGludik7XG5cbiAgICAgICAgdmFyIHgwID0gTWF0aC5taW4oYmxbMF0sIGJyWzBdLCB1bFswXSwgdXJbMF0pO1xuICAgICAgICB2YXIgeTAgPSBNYXRoLm1pbihibFsxXSwgYnJbMV0sIHVsWzFdLCB1clsxXSk7XG4gICAgICAgIHZhciB4MSA9IE1hdGgubWF4KGJsWzBdLCBiclswXSwgdWxbMF0sIHVyWzBdKTtcbiAgICAgICAgdmFyIHkxID0gTWF0aC5tYXgoYmxbMV0sIGJyWzFdLCB1bFsxXSwgdXJbMV0pO1xuICAgICAgICB0aGlzLmN0eC5maWxsUmVjdCh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdHguZmlsbFJlY3QoLTFlMTAsIC0xZTEwLCAyZTEwLCAyZTEwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgfSxcbiAgICBiZWdpbklubGluZUltYWdlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbklubGluZUltYWdlKCkge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBiZWdpbklubGluZUltYWdlXCIpO1xuICAgIH0sXG4gICAgYmVnaW5JbWFnZURhdGE6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luSW1hZ2VEYXRhKCkge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBiZWdpbkltYWdlRGF0YVwiKTtcbiAgICB9LFxuICAgIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRGb3JtWE9iamVjdEJlZ2luKG1hdHJpeCwgYmJveCkge1xuICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICB0aGlzLmJhc2VUcmFuc2Zvcm1TdGFjay5wdXNoKHRoaXMuYmFzZVRyYW5zZm9ybSk7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hdHJpeCkgJiYgbWF0cml4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLCBtYXRyaXgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtO1xuXG4gICAgICBpZiAoYmJveCkge1xuICAgICAgICB2YXIgd2lkdGggPSBiYm94WzJdIC0gYmJveFswXTtcbiAgICAgICAgdmFyIGhlaWdodCA9IGJib3hbM10gLSBiYm94WzFdO1xuICAgICAgICB0aGlzLmN0eC5yZWN0KGJib3hbMF0sIGJib3hbMV0sIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmNsaXAoKTtcbiAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYWludEZvcm1YT2JqZWN0RW5kOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEZvcm1YT2JqZWN0RW5kKCkge1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSB0aGlzLmJhc2VUcmFuc2Zvcm1TdGFjay5wb3AoKTtcbiAgICB9LFxuICAgIGJlZ2luR3JvdXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luR3JvdXAoZ3JvdXApIHtcbiAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgdmFyIGN1cnJlbnRDdHggPSB0aGlzLmN0eDtcblxuICAgICAgaWYgKCFncm91cC5pc29sYXRlZCkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJUT0RPOiBTdXBwb3J0IG5vbi1pc29sYXRlZCBncm91cHMuXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ3JvdXAua25vY2tvdXQpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiS25vY2tvdXQgZ3JvdXBzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudFRyYW5zZm9ybSA9IGN1cnJlbnRDdHgubW96Q3VycmVudFRyYW5zZm9ybTtcblxuICAgICAgaWYgKGdyb3VwLm1hdHJpeCkge1xuICAgICAgICBjdXJyZW50Q3R4LnRyYW5zZm9ybS5hcHBseShjdXJyZW50Q3R4LCBncm91cC5tYXRyaXgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWdyb3VwLmJib3gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJvdW5kcyA9IF91dGlsLlV0aWwuZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3goZ3JvdXAuYmJveCwgY3VycmVudEN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKTtcblxuICAgICAgdmFyIGNhbnZhc0JvdW5kcyA9IFswLCAwLCBjdXJyZW50Q3R4LmNhbnZhcy53aWR0aCwgY3VycmVudEN0eC5jYW52YXMuaGVpZ2h0XTtcbiAgICAgIGJvdW5kcyA9IF91dGlsLlV0aWwuaW50ZXJzZWN0KGJvdW5kcywgY2FudmFzQm91bmRzKSB8fCBbMCwgMCwgMCwgMF07XG4gICAgICB2YXIgb2Zmc2V0WCA9IE1hdGguZmxvb3IoYm91bmRzWzBdKTtcbiAgICAgIHZhciBvZmZzZXRZID0gTWF0aC5mbG9vcihib3VuZHNbMV0pO1xuICAgICAgdmFyIGRyYXduV2lkdGggPSBNYXRoLm1heChNYXRoLmNlaWwoYm91bmRzWzJdKSAtIG9mZnNldFgsIDEpO1xuICAgICAgdmFyIGRyYXduSGVpZ2h0ID0gTWF0aC5tYXgoTWF0aC5jZWlsKGJvdW5kc1szXSkgLSBvZmZzZXRZLCAxKTtcbiAgICAgIHZhciBzY2FsZVggPSAxLFxuICAgICAgICAgIHNjYWxlWSA9IDE7XG5cbiAgICAgIGlmIChkcmF3bldpZHRoID4gTUFYX0dST1VQX1NJWkUpIHtcbiAgICAgICAgc2NhbGVYID0gZHJhd25XaWR0aCAvIE1BWF9HUk9VUF9TSVpFO1xuICAgICAgICBkcmF3bldpZHRoID0gTUFYX0dST1VQX1NJWkU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkcmF3bkhlaWdodCA+IE1BWF9HUk9VUF9TSVpFKSB7XG4gICAgICAgIHNjYWxlWSA9IGRyYXduSGVpZ2h0IC8gTUFYX0dST1VQX1NJWkU7XG4gICAgICAgIGRyYXduSGVpZ2h0ID0gTUFYX0dST1VQX1NJWkU7XG4gICAgICB9XG5cbiAgICAgIHZhciBjYWNoZUlkID0gXCJncm91cEF0XCIgKyB0aGlzLmdyb3VwTGV2ZWw7XG5cbiAgICAgIGlmIChncm91cC5zbWFzaykge1xuICAgICAgICBjYWNoZUlkICs9IFwiX3NtYXNrX1wiICsgdGhpcy5zbWFza0NvdW50ZXIrKyAlIDI7XG4gICAgICB9XG5cbiAgICAgIHZhciBzY3JhdGNoQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoY2FjaGVJZCwgZHJhd25XaWR0aCwgZHJhd25IZWlnaHQsIHRydWUpO1xuICAgICAgdmFyIGdyb3VwQ3R4ID0gc2NyYXRjaENhbnZhcy5jb250ZXh0O1xuICAgICAgZ3JvdXBDdHguc2NhbGUoMSAvIHNjYWxlWCwgMSAvIHNjYWxlWSk7XG4gICAgICBncm91cEN0eC50cmFuc2xhdGUoLW9mZnNldFgsIC1vZmZzZXRZKTtcbiAgICAgIGdyb3VwQ3R4LnRyYW5zZm9ybS5hcHBseShncm91cEN0eCwgY3VycmVudFRyYW5zZm9ybSk7XG5cbiAgICAgIGlmIChncm91cC5zbWFzaykge1xuICAgICAgICB0aGlzLnNtYXNrU3RhY2sucHVzaCh7XG4gICAgICAgICAgY2FudmFzOiBzY3JhdGNoQ2FudmFzLmNhbnZhcyxcbiAgICAgICAgICBjb250ZXh0OiBncm91cEN0eCxcbiAgICAgICAgICBvZmZzZXRYLFxuICAgICAgICAgIG9mZnNldFksXG4gICAgICAgICAgc2NhbGVYLFxuICAgICAgICAgIHNjYWxlWSxcbiAgICAgICAgICBzdWJ0eXBlOiBncm91cC5zbWFzay5zdWJ0eXBlLFxuICAgICAgICAgIGJhY2tkcm9wOiBncm91cC5zbWFzay5iYWNrZHJvcCxcbiAgICAgICAgICB0cmFuc2Zlck1hcDogZ3JvdXAuc21hc2sudHJhbnNmZXJNYXAgfHwgbnVsbCxcbiAgICAgICAgICBzdGFydFRyYW5zZm9ybUludmVyc2U6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50Q3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICAgICAgY3VycmVudEN0eC50cmFuc2xhdGUob2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgIGN1cnJlbnRDdHguc2NhbGUoc2NhbGVYLCBzY2FsZVkpO1xuICAgICAgfVxuXG4gICAgICBjb3B5Q3R4U3RhdGUoY3VycmVudEN0eCwgZ3JvdXBDdHgpO1xuICAgICAgdGhpcy5jdHggPSBncm91cEN0eDtcbiAgICAgIHRoaXMuc2V0R1N0YXRlKFtbXCJCTVwiLCBcInNvdXJjZS1vdmVyXCJdLCBbXCJjYVwiLCAxXSwgW1wiQ0FcIiwgMV1dKTtcbiAgICAgIHRoaXMuZ3JvdXBTdGFjay5wdXNoKGN1cnJlbnRDdHgpO1xuICAgICAgdGhpcy5ncm91cExldmVsKys7XG4gICAgICB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgPSBudWxsO1xuICAgIH0sXG4gICAgZW5kR3JvdXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZEdyb3VwKGdyb3VwKSB7XG4gICAgICB0aGlzLmdyb3VwTGV2ZWwtLTtcbiAgICAgIHZhciBncm91cEN0eCA9IHRoaXMuY3R4O1xuICAgICAgdGhpcy5jdHggPSB0aGlzLmdyb3VwU3RhY2sucG9wKCk7XG5cbiAgICAgIGlmICh0aGlzLmN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3R4Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ3JvdXAuc21hc2spIHtcbiAgICAgICAgdGhpcy50ZW1wU01hc2sgPSB0aGlzLnNtYXNrU3RhY2sucG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoZ3JvdXBDdHguY2FudmFzLCAwLCAwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgfSxcbiAgICBiZWdpbkFubm90YXRpb25zOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbkFubm90YXRpb25zKCkge1xuICAgICAgdGhpcy5zYXZlKCk7XG5cbiAgICAgIGlmICh0aGlzLmJhc2VUcmFuc2Zvcm0pIHtcbiAgICAgICAgdGhpcy5jdHguc2V0VHJhbnNmb3JtLmFwcGx5KHRoaXMuY3R4LCB0aGlzLmJhc2VUcmFuc2Zvcm0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZW5kQW5ub3RhdGlvbnM6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZEFubm90YXRpb25zKCkge1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgfSxcbiAgICBiZWdpbkFubm90YXRpb246IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luQW5ub3RhdGlvbihyZWN0LCB0cmFuc2Zvcm0sIG1hdHJpeCkge1xuICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICByZXNldEN0eFRvRGVmYXVsdCh0aGlzLmN0eCk7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXcgQ2FudmFzRXh0cmFTdGF0ZSgpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZWN0KSAmJiByZWN0Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICB2YXIgd2lkdGggPSByZWN0WzJdIC0gcmVjdFswXTtcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlY3RbM10gLSByZWN0WzFdO1xuICAgICAgICB0aGlzLmN0eC5yZWN0KHJlY3RbMF0sIHJlY3RbMV0sIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmNsaXAoKTtcbiAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsIHRyYW5zZm9ybSk7XG4gICAgICB0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLCBtYXRyaXgpO1xuICAgIH0sXG4gICAgZW5kQW5ub3RhdGlvbjogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kQW5ub3RhdGlvbigpIHtcbiAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIH0sXG4gICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEltYWdlTWFza1hPYmplY3QoaW1nKSB7XG4gICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICB2YXIgd2lkdGggPSBpbWcud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0ID0gaW1nLmhlaWdodDtcbiAgICAgIHZhciBmaWxsQ29sb3IgPSB0aGlzLmN1cnJlbnQuZmlsbENvbG9yO1xuICAgICAgdmFyIGlzUGF0dGVybkZpbGwgPSB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw7XG4gICAgICB2YXIgZ2x5cGggPSB0aGlzLnByb2Nlc3NpbmdUeXBlMztcblxuICAgICAgaWYgKENPTVBJTEVfVFlQRTNfR0xZUEhTICYmIGdseXBoICYmIGdseXBoLmNvbXBpbGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHdpZHRoIDw9IE1BWF9TSVpFX1RPX0NPTVBJTEUgJiYgaGVpZ2h0IDw9IE1BWF9TSVpFX1RPX0NPTVBJTEUpIHtcbiAgICAgICAgICBnbHlwaC5jb21waWxlZCA9IGNvbXBpbGVUeXBlM0dseXBoKHtcbiAgICAgICAgICAgIGRhdGE6IGltZy5kYXRhLFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnbHlwaC5jb21waWxlZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGdseXBoICYmIGdseXBoLmNvbXBpbGVkKSB7XG4gICAgICAgIGdseXBoLmNvbXBpbGVkKGN0eCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG1hc2tDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhcIm1hc2tDYW52YXNcIiwgd2lkdGgsIGhlaWdodCk7XG4gICAgICB2YXIgbWFza0N0eCA9IG1hc2tDYW52YXMuY29udGV4dDtcbiAgICAgIG1hc2tDdHguc2F2ZSgpO1xuICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDdHgsIGltZyk7XG4gICAgICBtYXNrQ3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IFwic291cmNlLWluXCI7XG4gICAgICBtYXNrQ3R4LmZpbGxTdHlsZSA9IGlzUGF0dGVybkZpbGwgPyBmaWxsQ29sb3IuZ2V0UGF0dGVybihtYXNrQ3R4LCB0aGlzKSA6IGZpbGxDb2xvcjtcbiAgICAgIG1hc2tDdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBtYXNrQ3R4LnJlc3RvcmUoKTtcbiAgICAgIHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QobWFza0NhbnZhcy5jYW52YXMpO1xuICAgIH0sXG4gICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEltYWdlTWFza1hPYmplY3RSZXBlYXQoaW1nRGF0YSwgc2NhbGVYLCBzY2FsZVksIHBvc2l0aW9ucykge1xuICAgICAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgIHZhciBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgIHZhciBmaWxsQ29sb3IgPSB0aGlzLmN1cnJlbnQuZmlsbENvbG9yO1xuICAgICAgdmFyIGlzUGF0dGVybkZpbGwgPSB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw7XG4gICAgICB2YXIgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwibWFza0NhbnZhc1wiLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIHZhciBtYXNrQ3R4ID0gbWFza0NhbnZhcy5jb250ZXh0O1xuICAgICAgbWFza0N0eC5zYXZlKCk7XG4gICAgICBwdXRCaW5hcnlJbWFnZU1hc2sobWFza0N0eCwgaW1nRGF0YSk7XG4gICAgICBtYXNrQ3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IFwic291cmNlLWluXCI7XG4gICAgICBtYXNrQ3R4LmZpbGxTdHlsZSA9IGlzUGF0dGVybkZpbGwgPyBmaWxsQ29sb3IuZ2V0UGF0dGVybihtYXNrQ3R4LCB0aGlzKSA6IGZpbGxDb2xvcjtcbiAgICAgIG1hc2tDdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBtYXNrQ3R4LnJlc3RvcmUoKTtcbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcG9zaXRpb25zLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LnRyYW5zZm9ybShzY2FsZVgsIDAsIDAsIHNjYWxlWSwgcG9zaXRpb25zW2ldLCBwb3NpdGlvbnNbaSArIDFdKTtcbiAgICAgICAgY3R4LnNjYWxlKDEsIC0xKTtcbiAgICAgICAgY3R4LmRyYXdJbWFnZShtYXNrQ2FudmFzLmNhbnZhcywgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgLTEsIDEsIDEpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwKGltYWdlcykge1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgdmFyIGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgICB2YXIgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gaW1hZ2VzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgdmFyIGltYWdlID0gaW1hZ2VzW2ldO1xuICAgICAgICB2YXIgd2lkdGggPSBpbWFnZS53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICAgICAgdmFyIG1hc2tDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhcIm1hc2tDYW52YXNcIiwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBtYXNrQ3R4ID0gbWFza0NhbnZhcy5jb250ZXh0O1xuICAgICAgICBtYXNrQ3R4LnNhdmUoKTtcbiAgICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDdHgsIGltYWdlKTtcbiAgICAgICAgbWFza0N0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBcInNvdXJjZS1pblwiO1xuICAgICAgICBtYXNrQ3R4LmZpbGxTdHlsZSA9IGlzUGF0dGVybkZpbGwgPyBmaWxsQ29sb3IuZ2V0UGF0dGVybihtYXNrQ3R4LCB0aGlzKSA6IGZpbGxDb2xvcjtcbiAgICAgICAgbWFza0N0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgbWFza0N0eC5yZXN0b3JlKCk7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBpbWFnZS50cmFuc2Zvcm0pO1xuICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICBjdHguZHJhd0ltYWdlKG1hc2tDYW52YXMuY2FudmFzLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAtMSwgMSwgMSk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYWludEltYWdlWE9iamVjdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRJbWFnZVhPYmplY3Qob2JqSWQpIHtcbiAgICAgIGNvbnN0IGltZ0RhdGEgPSBvYmpJZC5zdGFydHNXaXRoKFwiZ19cIikgPyB0aGlzLmNvbW1vbk9ianMuZ2V0KG9iaklkKSA6IHRoaXMub2Jqcy5nZXQob2JqSWQpO1xuXG4gICAgICBpZiAoIWltZ0RhdGEpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiRGVwZW5kZW50IGltYWdlIGlzbid0IHJlYWR5IHlldFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEpO1xuICAgIH0sXG4gICAgcGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50SW1hZ2VYT2JqZWN0UmVwZWF0KG9iaklkLCBzY2FsZVgsIHNjYWxlWSwgcG9zaXRpb25zKSB7XG4gICAgICBjb25zdCBpbWdEYXRhID0gb2JqSWQuc3RhcnRzV2l0aChcImdfXCIpID8gdGhpcy5jb21tb25PYmpzLmdldChvYmpJZCkgOiB0aGlzLm9ianMuZ2V0KG9iaklkKTtcblxuICAgICAgaWYgKCFpbWdEYXRhKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkRlcGVuZGVudCBpbWFnZSBpc24ndCByZWFkeSB5ZXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgIHZhciBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgIHZhciBtYXAgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcG9zaXRpb25zLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgbWFwLnB1c2goe1xuICAgICAgICAgIHRyYW5zZm9ybTogW3NjYWxlWCwgMCwgMCwgc2NhbGVZLCBwb3NpdGlvbnNbaV0sIHBvc2l0aW9uc1tpICsgMV1dLFxuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICB3OiB3aWR0aCxcbiAgICAgICAgICBoOiBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cChpbWdEYXRhLCBtYXApO1xuICAgIH0sXG4gICAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEpIHtcbiAgICAgIHZhciB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICB2YXIgaGVpZ2h0ID0gaW1nRGF0YS5oZWlnaHQ7XG4gICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICB0aGlzLnNhdmUoKTtcbiAgICAgIGN0eC5zY2FsZSgxIC8gd2lkdGgsIC0xIC8gaGVpZ2h0KTtcbiAgICAgIHZhciBjdXJyZW50VHJhbnNmb3JtID0gY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlO1xuICAgICAgdmFyIGEgPSBjdXJyZW50VHJhbnNmb3JtWzBdLFxuICAgICAgICAgIGIgPSBjdXJyZW50VHJhbnNmb3JtWzFdO1xuICAgICAgdmFyIHdpZHRoU2NhbGUgPSBNYXRoLm1heChNYXRoLnNxcnQoYSAqIGEgKyBiICogYiksIDEpO1xuICAgICAgdmFyIGMgPSBjdXJyZW50VHJhbnNmb3JtWzJdLFxuICAgICAgICAgIGQgPSBjdXJyZW50VHJhbnNmb3JtWzNdO1xuICAgICAgdmFyIGhlaWdodFNjYWxlID0gTWF0aC5tYXgoTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpLCAxKTtcbiAgICAgIHZhciBpbWdUb1BhaW50LCB0bXBDYW52YXM7XG5cbiAgICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwiZnVuY3Rpb25cIiAmJiBpbWdEYXRhIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgIWltZ0RhdGEuZGF0YSkge1xuICAgICAgICBpbWdUb1BhaW50ID0gaW1nRGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRtcENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwiaW5saW5lSW1hZ2VcIiwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgICAgcHV0QmluYXJ5SW1hZ2VEYXRhKHRtcEN0eCwgaW1nRGF0YSk7XG4gICAgICAgIGltZ1RvUGFpbnQgPSB0bXBDYW52YXMuY2FudmFzO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFpbnRXaWR0aCA9IHdpZHRoLFxuICAgICAgICAgIHBhaW50SGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgdmFyIHRtcENhbnZhc0lkID0gXCJwcmVzY2FsZTFcIjtcblxuICAgICAgd2hpbGUgKHdpZHRoU2NhbGUgPiAyICYmIHBhaW50V2lkdGggPiAxIHx8IGhlaWdodFNjYWxlID4gMiAmJiBwYWludEhlaWdodCA+IDEpIHtcbiAgICAgICAgdmFyIG5ld1dpZHRoID0gcGFpbnRXaWR0aCxcbiAgICAgICAgICAgIG5ld0hlaWdodCA9IHBhaW50SGVpZ2h0O1xuXG4gICAgICAgIGlmICh3aWR0aFNjYWxlID4gMiAmJiBwYWludFdpZHRoID4gMSkge1xuICAgICAgICAgIG5ld1dpZHRoID0gTWF0aC5jZWlsKHBhaW50V2lkdGggLyAyKTtcbiAgICAgICAgICB3aWR0aFNjYWxlIC89IHBhaW50V2lkdGggLyBuZXdXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoZWlnaHRTY2FsZSA+IDIgJiYgcGFpbnRIZWlnaHQgPiAxKSB7XG4gICAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5jZWlsKHBhaW50SGVpZ2h0IC8gMik7XG4gICAgICAgICAgaGVpZ2h0U2NhbGUgLz0gcGFpbnRIZWlnaHQgLyBuZXdIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB0bXBDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyh0bXBDYW52YXNJZCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XG4gICAgICAgIHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0O1xuICAgICAgICB0bXBDdHguY2xlYXJSZWN0KDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xuICAgICAgICB0bXBDdHguZHJhd0ltYWdlKGltZ1RvUGFpbnQsIDAsIDAsIHBhaW50V2lkdGgsIHBhaW50SGVpZ2h0LCAwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTtcbiAgICAgICAgaW1nVG9QYWludCA9IHRtcENhbnZhcy5jYW52YXM7XG4gICAgICAgIHBhaW50V2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgcGFpbnRIZWlnaHQgPSBuZXdIZWlnaHQ7XG4gICAgICAgIHRtcENhbnZhc0lkID0gdG1wQ2FudmFzSWQgPT09IFwicHJlc2NhbGUxXCIgPyBcInByZXNjYWxlMlwiIDogXCJwcmVzY2FsZTFcIjtcbiAgICAgIH1cblxuICAgICAgY3R4LmRyYXdJbWFnZShpbWdUb1BhaW50LCAwLCAwLCBwYWludFdpZHRoLCBwYWludEhlaWdodCwgMCwgLWhlaWdodCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgIGlmICh0aGlzLmltYWdlTGF5ZXIpIHtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5nZXRDYW52YXNQb3NpdGlvbigwLCAtaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtcbiAgICAgICAgICBpbWdEYXRhLFxuICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uWzBdLFxuICAgICAgICAgIHRvcDogcG9zaXRpb25bMV0sXG4gICAgICAgICAgd2lkdGg6IHdpZHRoIC8gY3VycmVudFRyYW5zZm9ybVswXSxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGN1cnJlbnRUcmFuc2Zvcm1bM11cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIH0sXG4gICAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cChpbWdEYXRhLCBtYXApIHtcbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgIHZhciB3ID0gaW1nRGF0YS53aWR0aDtcbiAgICAgIHZhciBoID0gaW1nRGF0YS5oZWlnaHQ7XG4gICAgICB2YXIgdG1wQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJpbmxpbmVJbWFnZVwiLCB3LCBoKTtcbiAgICAgIHZhciB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgIHB1dEJpbmFyeUltYWdlRGF0YSh0bXBDdHgsIGltZ0RhdGEpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBtYXAubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICB2YXIgZW50cnkgPSBtYXBbaV07XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBlbnRyeS50cmFuc2Zvcm0pO1xuICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRtcENhbnZhcy5jYW52YXMsIGVudHJ5LngsIGVudHJ5LnksIGVudHJ5LncsIGVudHJ5LmgsIDAsIC0xLCAxLCAxKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZUxheWVyKSB7XG4gICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5nZXRDYW52YXNQb3NpdGlvbihlbnRyeS54LCBlbnRyeS55KTtcbiAgICAgICAgICB0aGlzLmltYWdlTGF5ZXIuYXBwZW5kSW1hZ2Uoe1xuICAgICAgICAgICAgaW1nRGF0YSxcbiAgICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uWzBdLFxuICAgICAgICAgICAgdG9wOiBwb3NpdGlvblsxXSxcbiAgICAgICAgICAgIHdpZHRoOiB3LFxuICAgICAgICAgICAgaGVpZ2h0OiBoXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludFNvbGlkQ29sb3JJbWFnZU1hc2soKSB7XG4gICAgICB0aGlzLmN0eC5maWxsUmVjdCgwLCAwLCAxLCAxKTtcbiAgICB9LFxuICAgIHBhaW50WE9iamVjdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRYT2JqZWN0KCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5zdXBwb3J0ZWQgJ3BhaW50WE9iamVjdCcgY29tbWFuZC5cIik7XG4gICAgfSxcbiAgICBtYXJrUG9pbnQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX21hcmtQb2ludCh0YWcpIHt9LFxuICAgIG1hcmtQb2ludFByb3BzOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19tYXJrUG9pbnRQcm9wcyh0YWcsIHByb3BlcnRpZXMpIHt9LFxuICAgIGJlZ2luTWFya2VkQ29udGVudDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfYmVnaW5NYXJrZWRDb250ZW50KHRhZykge30sXG4gICAgYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luTWFya2VkQ29udGVudFByb3BzKHRhZywgcHJvcGVydGllcykge30sXG4gICAgZW5kTWFya2VkQ29udGVudDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kTWFya2VkQ29udGVudCgpIHt9LFxuICAgIGJlZ2luQ29tcGF0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbkNvbXBhdCgpIHt9LFxuICAgIGVuZENvbXBhdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kQ29tcGF0KCkge30sXG4gICAgY29uc3VtZVBhdGg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2NvbnN1bWVQYXRoKCkge1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgICBpZiAodGhpcy5wZW5kaW5nQ2xpcCkge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ2xpcCA9PT0gRU9fQ0xJUCkge1xuICAgICAgICAgIGN0eC5jbGlwKFwiZXZlbm9kZFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHguY2xpcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICB9LFxuXG4gICAgZ2V0U2luZ2xlUGl4ZWxXaWR0aChzY2FsZSkge1xuICAgICAgaWYgKHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgaW52ZXJzZSA9IHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlO1xuICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gTWF0aC5zcXJ0KE1hdGgubWF4KGludmVyc2VbMF0gKiBpbnZlcnNlWzBdICsgaW52ZXJzZVsxXSAqIGludmVyc2VbMV0sIGludmVyc2VbMl0gKiBpbnZlcnNlWzJdICsgaW52ZXJzZVszXSAqIGludmVyc2VbM10pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg7XG4gICAgfSxcblxuICAgIGdldENhbnZhc1Bvc2l0aW9uOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19nZXRDYW52YXNQb3NpdGlvbih4LCB5KSB7XG4gICAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgIHJldHVybiBbdHJhbnNmb3JtWzBdICogeCArIHRyYW5zZm9ybVsyXSAqIHkgKyB0cmFuc2Zvcm1bNF0sIHRyYW5zZm9ybVsxXSAqIHggKyB0cmFuc2Zvcm1bM10gKiB5ICsgdHJhbnNmb3JtWzVdXTtcbiAgICB9XG4gIH07XG5cbiAgZm9yICh2YXIgb3AgaW4gX3V0aWwuT1BTKSB7XG4gICAgQ2FudmFzR3JhcGhpY3MucHJvdG90eXBlW191dGlsLk9QU1tvcF1dID0gQ2FudmFzR3JhcGhpY3MucHJvdG90eXBlW29wXTtcbiAgfVxuXG4gIHJldHVybiBDYW52YXNHcmFwaGljcztcbn0oKTtcblxuZXhwb3J0cy5DYW52YXNHcmFwaGljcyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0U2hhZGluZ1BhdHRlcm5Gcm9tSVIgPSBnZXRTaGFkaW5nUGF0dGVybkZyb21JUjtcbmV4cG9ydHMuVGlsaW5nUGF0dGVybiA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIFNoYWRpbmdJUnMgPSB7fTtcblxuZnVuY3Rpb24gYXBwbHlCb3VuZGluZ0JveChjdHgsIGJib3gpIHtcbiAgaWYgKCFiYm94IHx8IHR5cGVvZiBQYXRoMkQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3aWR0aCA9IGJib3hbMl0gLSBiYm94WzBdO1xuICBjb25zdCBoZWlnaHQgPSBiYm94WzNdIC0gYmJveFsxXTtcbiAgY29uc3QgcmVnaW9uID0gbmV3IFBhdGgyRCgpO1xuICByZWdpb24ucmVjdChiYm94WzBdLCBiYm94WzFdLCB3aWR0aCwgaGVpZ2h0KTtcbiAgY3R4LmNsaXAocmVnaW9uKTtcbn1cblxuU2hhZGluZ0lScy5SYWRpYWxBeGlhbCA9IHtcbiAgZnJvbUlSOiBmdW5jdGlvbiBSYWRpYWxBeGlhbF9mcm9tSVIocmF3KSB7XG4gICAgdmFyIHR5cGUgPSByYXdbMV07XG4gICAgdmFyIGJib3ggPSByYXdbMl07XG4gICAgdmFyIGNvbG9yU3RvcHMgPSByYXdbM107XG4gICAgdmFyIHAwID0gcmF3WzRdO1xuICAgIHZhciBwMSA9IHJhd1s1XTtcbiAgICB2YXIgcjAgPSByYXdbNl07XG4gICAgdmFyIHIxID0gcmF3WzddO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIlBhdHRlcm5cIixcbiAgICAgIGdldFBhdHRlcm46IGZ1bmN0aW9uIFJhZGlhbEF4aWFsX2dldFBhdHRlcm4oY3R4KSB7XG4gICAgICAgIGFwcGx5Qm91bmRpbmdCb3goY3R4LCBiYm94KTtcbiAgICAgICAgdmFyIGdyYWQ7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IFwiYXhpYWxcIikge1xuICAgICAgICAgIGdyYWQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQocDBbMF0sIHAwWzFdLCBwMVswXSwgcDFbMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwicmFkaWFsXCIpIHtcbiAgICAgICAgICBncmFkID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHAwWzBdLCBwMFsxXSwgcjAsIHAxWzBdLCBwMVsxXSwgcjEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY29sb3JTdG9wcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgdmFyIGMgPSBjb2xvclN0b3BzW2ldO1xuICAgICAgICAgIGdyYWQuYWRkQ29sb3JTdG9wKGNbMF0sIGNbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdyYWQ7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZU1lc2hDYW52YXMgPSBmdW5jdGlvbiBjcmVhdGVNZXNoQ2FudmFzQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKGRhdGEsIGNvbnRleHQsIHAxLCBwMiwgcDMsIGMxLCBjMiwgYzMpIHtcbiAgICB2YXIgY29vcmRzID0gY29udGV4dC5jb29yZHMsXG4gICAgICAgIGNvbG9ycyA9IGNvbnRleHQuY29sb3JzO1xuICAgIHZhciBieXRlcyA9IGRhdGEuZGF0YSxcbiAgICAgICAgcm93U2l6ZSA9IGRhdGEud2lkdGggKiA0O1xuICAgIHZhciB0bXA7XG5cbiAgICBpZiAoY29vcmRzW3AxICsgMV0gPiBjb29yZHNbcDIgKyAxXSkge1xuICAgICAgdG1wID0gcDE7XG4gICAgICBwMSA9IHAyO1xuICAgICAgcDIgPSB0bXA7XG4gICAgICB0bXAgPSBjMTtcbiAgICAgIGMxID0gYzI7XG4gICAgICBjMiA9IHRtcDtcbiAgICB9XG5cbiAgICBpZiAoY29vcmRzW3AyICsgMV0gPiBjb29yZHNbcDMgKyAxXSkge1xuICAgICAgdG1wID0gcDI7XG4gICAgICBwMiA9IHAzO1xuICAgICAgcDMgPSB0bXA7XG4gICAgICB0bXAgPSBjMjtcbiAgICAgIGMyID0gYzM7XG4gICAgICBjMyA9IHRtcDtcbiAgICB9XG5cbiAgICBpZiAoY29vcmRzW3AxICsgMV0gPiBjb29yZHNbcDIgKyAxXSkge1xuICAgICAgdG1wID0gcDE7XG4gICAgICBwMSA9IHAyO1xuICAgICAgcDIgPSB0bXA7XG4gICAgICB0bXAgPSBjMTtcbiAgICAgIGMxID0gYzI7XG4gICAgICBjMiA9IHRtcDtcbiAgICB9XG5cbiAgICB2YXIgeDEgPSAoY29vcmRzW3AxXSArIGNvbnRleHQub2Zmc2V0WCkgKiBjb250ZXh0LnNjYWxlWDtcbiAgICB2YXIgeTEgPSAoY29vcmRzW3AxICsgMV0gKyBjb250ZXh0Lm9mZnNldFkpICogY29udGV4dC5zY2FsZVk7XG4gICAgdmFyIHgyID0gKGNvb3Jkc1twMl0gKyBjb250ZXh0Lm9mZnNldFgpICogY29udGV4dC5zY2FsZVg7XG4gICAgdmFyIHkyID0gKGNvb3Jkc1twMiArIDFdICsgY29udGV4dC5vZmZzZXRZKSAqIGNvbnRleHQuc2NhbGVZO1xuICAgIHZhciB4MyA9IChjb29yZHNbcDNdICsgY29udGV4dC5vZmZzZXRYKSAqIGNvbnRleHQuc2NhbGVYO1xuICAgIHZhciB5MyA9IChjb29yZHNbcDMgKyAxXSArIGNvbnRleHQub2Zmc2V0WSkgKiBjb250ZXh0LnNjYWxlWTtcblxuICAgIGlmICh5MSA+PSB5Mykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjMXIgPSBjb2xvcnNbYzFdLFxuICAgICAgICBjMWcgPSBjb2xvcnNbYzEgKyAxXSxcbiAgICAgICAgYzFiID0gY29sb3JzW2MxICsgMl07XG4gICAgdmFyIGMyciA9IGNvbG9yc1tjMl0sXG4gICAgICAgIGMyZyA9IGNvbG9yc1tjMiArIDFdLFxuICAgICAgICBjMmIgPSBjb2xvcnNbYzIgKyAyXTtcbiAgICB2YXIgYzNyID0gY29sb3JzW2MzXSxcbiAgICAgICAgYzNnID0gY29sb3JzW2MzICsgMV0sXG4gICAgICAgIGMzYiA9IGNvbG9yc1tjMyArIDJdO1xuICAgIHZhciBtaW5ZID0gTWF0aC5yb3VuZCh5MSksXG4gICAgICAgIG1heFkgPSBNYXRoLnJvdW5kKHkzKTtcbiAgICB2YXIgeGEsIGNhciwgY2FnLCBjYWI7XG4gICAgdmFyIHhiLCBjYnIsIGNiZywgY2JiO1xuXG4gICAgZm9yICh2YXIgeSA9IG1pblk7IHkgPD0gbWF4WTsgeSsrKSB7XG4gICAgICBpZiAoeSA8IHkyKSB7XG4gICAgICAgIGxldCBrO1xuXG4gICAgICAgIGlmICh5IDwgeTEpIHtcbiAgICAgICAgICBrID0gMDtcbiAgICAgICAgfSBlbHNlIGlmICh5MSA9PT0geTIpIHtcbiAgICAgICAgICBrID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrID0gKHkxIC0geSkgLyAoeTEgLSB5Mik7XG4gICAgICAgIH1cblxuICAgICAgICB4YSA9IHgxIC0gKHgxIC0geDIpICogaztcbiAgICAgICAgY2FyID0gYzFyIC0gKGMxciAtIGMycikgKiBrO1xuICAgICAgICBjYWcgPSBjMWcgLSAoYzFnIC0gYzJnKSAqIGs7XG4gICAgICAgIGNhYiA9IGMxYiAtIChjMWIgLSBjMmIpICogaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBrO1xuXG4gICAgICAgIGlmICh5ID4geTMpIHtcbiAgICAgICAgICBrID0gMTtcbiAgICAgICAgfSBlbHNlIGlmICh5MiA9PT0geTMpIHtcbiAgICAgICAgICBrID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrID0gKHkyIC0geSkgLyAoeTIgLSB5Myk7XG4gICAgICAgIH1cblxuICAgICAgICB4YSA9IHgyIC0gKHgyIC0geDMpICogaztcbiAgICAgICAgY2FyID0gYzJyIC0gKGMyciAtIGMzcikgKiBrO1xuICAgICAgICBjYWcgPSBjMmcgLSAoYzJnIC0gYzNnKSAqIGs7XG4gICAgICAgIGNhYiA9IGMyYiAtIChjMmIgLSBjM2IpICogaztcbiAgICAgIH1cblxuICAgICAgbGV0IGs7XG5cbiAgICAgIGlmICh5IDwgeTEpIHtcbiAgICAgICAgayA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHkgPiB5Mykge1xuICAgICAgICBrID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGsgPSAoeTEgLSB5KSAvICh5MSAtIHkzKTtcbiAgICAgIH1cblxuICAgICAgeGIgPSB4MSAtICh4MSAtIHgzKSAqIGs7XG4gICAgICBjYnIgPSBjMXIgLSAoYzFyIC0gYzNyKSAqIGs7XG4gICAgICBjYmcgPSBjMWcgLSAoYzFnIC0gYzNnKSAqIGs7XG4gICAgICBjYmIgPSBjMWIgLSAoYzFiIC0gYzNiKSAqIGs7XG4gICAgICB2YXIgeDFfID0gTWF0aC5yb3VuZChNYXRoLm1pbih4YSwgeGIpKTtcbiAgICAgIHZhciB4Ml8gPSBNYXRoLnJvdW5kKE1hdGgubWF4KHhhLCB4YikpO1xuICAgICAgdmFyIGogPSByb3dTaXplICogeSArIHgxXyAqIDQ7XG5cbiAgICAgIGZvciAodmFyIHggPSB4MV87IHggPD0geDJfOyB4KyspIHtcbiAgICAgICAgayA9ICh4YSAtIHgpIC8gKHhhIC0geGIpO1xuXG4gICAgICAgIGlmIChrIDwgMCkge1xuICAgICAgICAgIGsgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGsgPiAxKSB7XG4gICAgICAgICAgayA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBieXRlc1tqKytdID0gY2FyIC0gKGNhciAtIGNicikgKiBrIHwgMDtcbiAgICAgICAgYnl0ZXNbaisrXSA9IGNhZyAtIChjYWcgLSBjYmcpICogayB8IDA7XG4gICAgICAgIGJ5dGVzW2orK10gPSBjYWIgLSAoY2FiIC0gY2JiKSAqIGsgfCAwO1xuICAgICAgICBieXRlc1tqKytdID0gMjU1O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdGaWd1cmUoZGF0YSwgZmlndXJlLCBjb250ZXh0KSB7XG4gICAgdmFyIHBzID0gZmlndXJlLmNvb3JkcztcbiAgICB2YXIgY3MgPSBmaWd1cmUuY29sb3JzO1xuICAgIHZhciBpLCBpaTtcblxuICAgIHN3aXRjaCAoZmlndXJlLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJsYXR0aWNlXCI6XG4gICAgICAgIHZhciB2ZXJ0aWNlc1BlclJvdyA9IGZpZ3VyZS52ZXJ0aWNlc1BlclJvdztcbiAgICAgICAgdmFyIHJvd3MgPSBNYXRoLmZsb29yKHBzLmxlbmd0aCAvIHZlcnRpY2VzUGVyUm93KSAtIDE7XG4gICAgICAgIHZhciBjb2xzID0gdmVydGljZXNQZXJSb3cgLSAxO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICB2YXIgcSA9IGkgKiB2ZXJ0aWNlc1BlclJvdztcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sczsgaisrLCBxKyspIHtcbiAgICAgICAgICAgIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwc1txXSwgcHNbcSArIDFdLCBwc1txICsgdmVydGljZXNQZXJSb3ddLCBjc1txXSwgY3NbcSArIDFdLCBjc1txICsgdmVydGljZXNQZXJSb3ddKTtcbiAgICAgICAgICAgIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwc1txICsgdmVydGljZXNQZXJSb3cgKyAxXSwgcHNbcSArIDFdLCBwc1txICsgdmVydGljZXNQZXJSb3ddLCBjc1txICsgdmVydGljZXNQZXJSb3cgKyAxXSwgY3NbcSArIDFdLCBjc1txICsgdmVydGljZXNQZXJSb3ddKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInRyaWFuZ2xlc1wiOlxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHBzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDMpIHtcbiAgICAgICAgICBkcmF3VHJpYW5nbGUoZGF0YSwgY29udGV4dCwgcHNbaV0sIHBzW2kgKyAxXSwgcHNbaSArIDJdLCBjc1tpXSwgY3NbaSArIDFdLCBjc1tpICsgMl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgZmlndXJlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU1lc2hDYW52YXMoYm91bmRzLCBjb21iaW5lc1NjYWxlLCBjb29yZHMsIGNvbG9ycywgZmlndXJlcywgYmFja2dyb3VuZENvbG9yLCBjYWNoZWRDYW52YXNlcywgd2ViR0xDb250ZXh0KSB7XG4gICAgdmFyIEVYUEVDVEVEX1NDQUxFID0gMS4xO1xuICAgIHZhciBNQVhfUEFUVEVSTl9TSVpFID0gMzAwMDtcbiAgICB2YXIgQk9SREVSX1NJWkUgPSAyO1xuICAgIHZhciBvZmZzZXRYID0gTWF0aC5mbG9vcihib3VuZHNbMF0pO1xuICAgIHZhciBvZmZzZXRZID0gTWF0aC5mbG9vcihib3VuZHNbMV0pO1xuICAgIHZhciBib3VuZHNXaWR0aCA9IE1hdGguY2VpbChib3VuZHNbMl0pIC0gb2Zmc2V0WDtcbiAgICB2YXIgYm91bmRzSGVpZ2h0ID0gTWF0aC5jZWlsKGJvdW5kc1szXSkgLSBvZmZzZXRZO1xuICAgIHZhciB3aWR0aCA9IE1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhib3VuZHNXaWR0aCAqIGNvbWJpbmVzU2NhbGVbMF0gKiBFWFBFQ1RFRF9TQ0FMRSkpLCBNQVhfUEFUVEVSTl9TSVpFKTtcbiAgICB2YXIgaGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGJvdW5kc0hlaWdodCAqIGNvbWJpbmVzU2NhbGVbMV0gKiBFWFBFQ1RFRF9TQ0FMRSkpLCBNQVhfUEFUVEVSTl9TSVpFKTtcbiAgICB2YXIgc2NhbGVYID0gYm91bmRzV2lkdGggLyB3aWR0aDtcbiAgICB2YXIgc2NhbGVZID0gYm91bmRzSGVpZ2h0IC8gaGVpZ2h0O1xuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgY29vcmRzLFxuICAgICAgY29sb3JzLFxuICAgICAgb2Zmc2V0WDogLW9mZnNldFgsXG4gICAgICBvZmZzZXRZOiAtb2Zmc2V0WSxcbiAgICAgIHNjYWxlWDogMSAvIHNjYWxlWCxcbiAgICAgIHNjYWxlWTogMSAvIHNjYWxlWVxuICAgIH07XG4gICAgdmFyIHBhZGRlZFdpZHRoID0gd2lkdGggKyBCT1JERVJfU0laRSAqIDI7XG4gICAgdmFyIHBhZGRlZEhlaWdodCA9IGhlaWdodCArIEJPUkRFUl9TSVpFICogMjtcbiAgICB2YXIgY2FudmFzLCB0bXBDYW52YXMsIGksIGlpO1xuXG4gICAgaWYgKHdlYkdMQ29udGV4dC5pc0VuYWJsZWQpIHtcbiAgICAgIGNhbnZhcyA9IHdlYkdMQ29udGV4dC5kcmF3RmlndXJlcyh7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcixcbiAgICAgICAgZmlndXJlcyxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSk7XG4gICAgICB0bXBDYW52YXMgPSBjYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJtZXNoXCIsIHBhZGRlZFdpZHRoLCBwYWRkZWRIZWlnaHQsIGZhbHNlKTtcbiAgICAgIHRtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShjYW52YXMsIEJPUkRFUl9TSVpFLCBCT1JERVJfU0laRSk7XG4gICAgICBjYW52YXMgPSB0bXBDYW52YXMuY2FudmFzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0bXBDYW52YXMgPSBjYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJtZXNoXCIsIHBhZGRlZFdpZHRoLCBwYWRkZWRIZWlnaHQsIGZhbHNlKTtcbiAgICAgIHZhciB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgIHZhciBkYXRhID0gdG1wQ3R4LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgICB2YXIgYnl0ZXMgPSBkYXRhLmRhdGE7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBieXRlcy5sZW5ndGg7IGkgPCBpaTsgaSArPSA0KSB7XG4gICAgICAgICAgYnl0ZXNbaV0gPSBiYWNrZ3JvdW5kQ29sb3JbMF07XG4gICAgICAgICAgYnl0ZXNbaSArIDFdID0gYmFja2dyb3VuZENvbG9yWzFdO1xuICAgICAgICAgIGJ5dGVzW2kgKyAyXSA9IGJhY2tncm91bmRDb2xvclsyXTtcbiAgICAgICAgICBieXRlc1tpICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IGZpZ3VyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHJhd0ZpZ3VyZShkYXRhLCBmaWd1cmVzW2ldLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgdG1wQ3R4LnB1dEltYWdlRGF0YShkYXRhLCBCT1JERVJfU0laRSwgQk9SREVSX1NJWkUpO1xuICAgICAgY2FudmFzID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2FudmFzLFxuICAgICAgb2Zmc2V0WDogb2Zmc2V0WCAtIEJPUkRFUl9TSVpFICogc2NhbGVYLFxuICAgICAgb2Zmc2V0WTogb2Zmc2V0WSAtIEJPUkRFUl9TSVpFICogc2NhbGVZLFxuICAgICAgc2NhbGVYLFxuICAgICAgc2NhbGVZXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVNZXNoQ2FudmFzO1xufSgpO1xuXG5TaGFkaW5nSVJzLk1lc2ggPSB7XG4gIGZyb21JUjogZnVuY3Rpb24gTWVzaF9mcm9tSVIocmF3KSB7XG4gICAgdmFyIGNvb3JkcyA9IHJhd1syXTtcbiAgICB2YXIgY29sb3JzID0gcmF3WzNdO1xuICAgIHZhciBmaWd1cmVzID0gcmF3WzRdO1xuICAgIHZhciBib3VuZHMgPSByYXdbNV07XG4gICAgdmFyIG1hdHJpeCA9IHJhd1s2XTtcbiAgICB2YXIgYmJveCA9IHJhd1s3XTtcbiAgICB2YXIgYmFja2dyb3VuZCA9IHJhd1s4XTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJQYXR0ZXJuXCIsXG4gICAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBNZXNoX2dldFBhdHRlcm4oY3R4LCBvd25lciwgc2hhZGluZ0ZpbGwpIHtcbiAgICAgICAgYXBwbHlCb3VuZGluZ0JveChjdHgsIGJib3gpO1xuICAgICAgICB2YXIgc2NhbGU7XG5cbiAgICAgICAgaWYgKHNoYWRpbmdGaWxsKSB7XG4gICAgICAgICAgc2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUob3duZXIuYmFzZVRyYW5zZm9ybSk7XG5cbiAgICAgICAgICBpZiAobWF0cml4KSB7XG4gICAgICAgICAgICB2YXIgbWF0cml4U2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG1hdHJpeCk7XG5cbiAgICAgICAgICAgIHNjYWxlID0gW3NjYWxlWzBdICogbWF0cml4U2NhbGVbMF0sIHNjYWxlWzFdICogbWF0cml4U2NhbGVbMV1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzID0gY3JlYXRlTWVzaENhbnZhcyhib3VuZHMsIHNjYWxlLCBjb29yZHMsIGNvbG9ycywgZmlndXJlcywgc2hhZGluZ0ZpbGwgPyBudWxsIDogYmFja2dyb3VuZCwgb3duZXIuY2FjaGVkQ2FudmFzZXMsIG93bmVyLndlYkdMQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKCFzaGFkaW5nRmlsbCkge1xuICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBvd25lci5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgICAgIGlmIChtYXRyaXgpIHtcbiAgICAgICAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBtYXRyaXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC50cmFuc2xhdGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5vZmZzZXRYLCB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLm9mZnNldFkpO1xuICAgICAgICBjdHguc2NhbGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5zY2FsZVgsIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuc2NhbGVZKTtcbiAgICAgICAgcmV0dXJuIGN0eC5jcmVhdGVQYXR0ZXJuKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuY2FudmFzLCBcIm5vLXJlcGVhdFwiKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59O1xuU2hhZGluZ0lScy5EdW1teSA9IHtcbiAgZnJvbUlSOiBmdW5jdGlvbiBEdW1teV9mcm9tSVIoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiUGF0dGVyblwiLFxuICAgICAgZ2V0UGF0dGVybjogZnVuY3Rpb24gRHVtbXlfZnJvbUlSX2dldFBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBcImhvdHBpbmtcIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXRTaGFkaW5nUGF0dGVybkZyb21JUihyYXcpIHtcbiAgdmFyIHNoYWRpbmdJUiA9IFNoYWRpbmdJUnNbcmF3WzBdXTtcblxuICBpZiAoIXNoYWRpbmdJUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBJUiB0eXBlOiAke3Jhd1swXX1gKTtcbiAgfVxuXG4gIHJldHVybiBzaGFkaW5nSVIuZnJvbUlSKHJhdyk7XG59XG5cbnZhciBUaWxpbmdQYXR0ZXJuID0gZnVuY3Rpb24gVGlsaW5nUGF0dGVybkNsb3N1cmUoKSB7XG4gIHZhciBQYWludFR5cGUgPSB7XG4gICAgQ09MT1JFRDogMSxcbiAgICBVTkNPTE9SRUQ6IDJcbiAgfTtcbiAgdmFyIE1BWF9QQVRURVJOX1NJWkUgPSAzMDAwO1xuXG4gIGZ1bmN0aW9uIFRpbGluZ1BhdHRlcm4oSVIsIGNvbG9yLCBjdHgsIGNhbnZhc0dyYXBoaWNzRmFjdG9yeSwgYmFzZVRyYW5zZm9ybSkge1xuICAgIHRoaXMub3BlcmF0b3JMaXN0ID0gSVJbMl07XG4gICAgdGhpcy5tYXRyaXggPSBJUlszXSB8fCBbMSwgMCwgMCwgMSwgMCwgMF07XG4gICAgdGhpcy5iYm94ID0gSVJbNF07XG4gICAgdGhpcy54c3RlcCA9IElSWzVdO1xuICAgIHRoaXMueXN0ZXAgPSBJUls2XTtcbiAgICB0aGlzLnBhaW50VHlwZSA9IElSWzddO1xuICAgIHRoaXMudGlsaW5nVHlwZSA9IElSWzhdO1xuICAgIHRoaXMuY29sb3IgPSBjb2xvcjtcbiAgICB0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeSA9IGNhbnZhc0dyYXBoaWNzRmFjdG9yeTtcbiAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSBiYXNlVHJhbnNmb3JtO1xuICAgIHRoaXMudHlwZSA9IFwiUGF0dGVyblwiO1xuICAgIHRoaXMuY3R4ID0gY3R4O1xuICB9XG5cbiAgVGlsaW5nUGF0dGVybi5wcm90b3R5cGUgPSB7XG4gICAgY3JlYXRlUGF0dGVybkNhbnZhczogZnVuY3Rpb24gVGlsaW5QYXR0ZXJuX2NyZWF0ZVBhdHRlcm5DYW52YXMob3duZXIpIHtcbiAgICAgIHZhciBvcGVyYXRvckxpc3QgPSB0aGlzLm9wZXJhdG9yTGlzdDtcbiAgICAgIHZhciBiYm94ID0gdGhpcy5iYm94O1xuICAgICAgdmFyIHhzdGVwID0gdGhpcy54c3RlcDtcbiAgICAgIHZhciB5c3RlcCA9IHRoaXMueXN0ZXA7XG4gICAgICB2YXIgcGFpbnRUeXBlID0gdGhpcy5wYWludFR5cGU7XG4gICAgICB2YXIgdGlsaW5nVHlwZSA9IHRoaXMudGlsaW5nVHlwZTtcbiAgICAgIHZhciBjb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICB2YXIgY2FudmFzR3JhcGhpY3NGYWN0b3J5ID0gdGhpcy5jYW52YXNHcmFwaGljc0ZhY3Rvcnk7XG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJUaWxpbmdUeXBlOiBcIiArIHRpbGluZ1R5cGUpO1xuICAgICAgdmFyIHgwID0gYmJveFswXSxcbiAgICAgICAgICB5MCA9IGJib3hbMV0sXG4gICAgICAgICAgeDEgPSBiYm94WzJdLFxuICAgICAgICAgIHkxID0gYmJveFszXTtcblxuICAgICAgdmFyIG1hdHJpeFNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7XG5cbiAgICAgIHZhciBjdXJNYXRyaXhTY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgdmFyIGNvbWJpbmVkU2NhbGUgPSBbbWF0cml4U2NhbGVbMF0gKiBjdXJNYXRyaXhTY2FsZVswXSwgbWF0cml4U2NhbGVbMV0gKiBjdXJNYXRyaXhTY2FsZVsxXV07XG4gICAgICB2YXIgZGlteCA9IHRoaXMuZ2V0U2l6ZUFuZFNjYWxlKHhzdGVwLCB0aGlzLmN0eC5jYW52YXMud2lkdGgsIGNvbWJpbmVkU2NhbGVbMF0pO1xuICAgICAgdmFyIGRpbXkgPSB0aGlzLmdldFNpemVBbmRTY2FsZSh5c3RlcCwgdGhpcy5jdHguY2FudmFzLmhlaWdodCwgY29tYmluZWRTY2FsZVsxXSk7XG4gICAgICB2YXIgdG1wQ2FudmFzID0gb3duZXIuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwicGF0dGVyblwiLCBkaW14LnNpemUsIGRpbXkuc2l6ZSwgdHJ1ZSk7XG4gICAgICB2YXIgdG1wQ3R4ID0gdG1wQ2FudmFzLmNvbnRleHQ7XG4gICAgICB2YXIgZ3JhcGhpY3MgPSBjYW52YXNHcmFwaGljc0ZhY3RvcnkuY3JlYXRlQ2FudmFzR3JhcGhpY3ModG1wQ3R4KTtcbiAgICAgIGdyYXBoaWNzLmdyb3VwTGV2ZWwgPSBvd25lci5ncm91cExldmVsO1xuICAgICAgdGhpcy5zZXRGaWxsQW5kU3Ryb2tlU3R5bGVUb0NvbnRleHQoZ3JhcGhpY3MsIHBhaW50VHlwZSwgY29sb3IpO1xuICAgICAgZ3JhcGhpY3MudHJhbnNmb3JtKGRpbXguc2NhbGUsIDAsIDAsIGRpbXkuc2NhbGUsIDAsIDApO1xuICAgICAgZ3JhcGhpY3MudHJhbnNmb3JtKDEsIDAsIDAsIDEsIC14MCwgLXkwKTtcbiAgICAgIHRoaXMuY2xpcEJib3goZ3JhcGhpY3MsIGJib3gsIHgwLCB5MCwgeDEsIHkxKTtcbiAgICAgIGdyYXBoaWNzLmV4ZWN1dGVPcGVyYXRvckxpc3Qob3BlcmF0b3JMaXN0KTtcbiAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybSgxLCAwLCAwLCAxLCB4MCwgeTApO1xuICAgICAgdGhpcy5jdHguc2NhbGUoMSAvIGRpbXguc2NhbGUsIDEgLyBkaW15LnNjYWxlKTtcbiAgICAgIHJldHVybiB0bXBDYW52YXMuY2FudmFzO1xuICAgIH0sXG4gICAgZ2V0U2l6ZUFuZFNjYWxlOiBmdW5jdGlvbiBUaWxpbmdQYXR0ZXJuX2dldFNpemVBbmRTY2FsZShzdGVwLCByZWFsT3V0cHV0U2l6ZSwgc2NhbGUpIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmFicyhzdGVwKTtcbiAgICAgIHZhciBtYXhTaXplID0gTWF0aC5tYXgoTUFYX1BBVFRFUk5fU0laRSwgcmVhbE91dHB1dFNpemUpO1xuICAgICAgdmFyIHNpemUgPSBNYXRoLmNlaWwoc3RlcCAqIHNjYWxlKTtcblxuICAgICAgaWYgKHNpemUgPj0gbWF4U2l6ZSkge1xuICAgICAgICBzaXplID0gbWF4U2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjYWxlID0gc2l6ZSAvIHN0ZXA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjYWxlLFxuICAgICAgICBzaXplXG4gICAgICB9O1xuICAgIH0sXG4gICAgY2xpcEJib3g6IGZ1bmN0aW9uIGNsaXBCYm94KGdyYXBoaWNzLCBiYm94LCB4MCwgeTAsIHgxLCB5MSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmJveCkgJiYgYmJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgdmFyIGJib3hXaWR0aCA9IHgxIC0geDA7XG4gICAgICAgIHZhciBiYm94SGVpZ2h0ID0geTEgLSB5MDtcbiAgICAgICAgZ3JhcGhpY3MuY3R4LnJlY3QoeDAsIHkwLCBiYm94V2lkdGgsIGJib3hIZWlnaHQpO1xuICAgICAgICBncmFwaGljcy5jbGlwKCk7XG4gICAgICAgIGdyYXBoaWNzLmVuZFBhdGgoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dDogZnVuY3Rpb24gc2V0RmlsbEFuZFN0cm9rZVN0eWxlVG9Db250ZXh0KGdyYXBoaWNzLCBwYWludFR5cGUsIGNvbG9yKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gZ3JhcGhpY3MuY3R4LFxuICAgICAgICAgICAgY3VycmVudCA9IGdyYXBoaWNzLmN1cnJlbnQ7XG5cbiAgICAgIHN3aXRjaCAocGFpbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgUGFpbnRUeXBlLkNPTE9SRUQ6XG4gICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgICAgICAgIGN1cnJlbnQuZmlsbENvbG9yID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgICBjdXJyZW50LnN0cm9rZUNvbG9yID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUGFpbnRUeXBlLlVOQ09MT1JFRDpcbiAgICAgICAgICB2YXIgY3NzQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG5cbiAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGNzc0NvbG9yO1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjc3NDb2xvcjtcbiAgICAgICAgICBjdXJyZW50LmZpbGxDb2xvciA9IGNzc0NvbG9yO1xuICAgICAgICAgIGN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5zdXBwb3J0ZWQgcGFpbnQgdHlwZTogJHtwYWludFR5cGV9YCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBUaWxpbmdQYXR0ZXJuX2dldFBhdHRlcm4oY3R4LCBvd25lcikge1xuICAgICAgY3R4ID0gdGhpcy5jdHg7XG4gICAgICBjdHguc2V0VHJhbnNmb3JtLmFwcGx5KGN0eCwgdGhpcy5iYXNlVHJhbnNmb3JtKTtcbiAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCB0aGlzLm1hdHJpeCk7XG4gICAgICB2YXIgdGVtcG9yYXJ5UGF0dGVybkNhbnZhcyA9IHRoaXMuY3JlYXRlUGF0dGVybkNhbnZhcyhvd25lcik7XG4gICAgICByZXR1cm4gY3R4LmNyZWF0ZVBhdHRlcm4odGVtcG9yYXJ5UGF0dGVybkNhbnZhcywgXCJyZXBlYXRcIik7XG4gICAgfVxuICB9O1xuICByZXR1cm4gVGlsaW5nUGF0dGVybjtcbn0oKTtcblxuZXhwb3J0cy5UaWxpbmdQYXR0ZXJuID0gVGlsaW5nUGF0dGVybjtcblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5HbG9iYWxXb3JrZXJPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgR2xvYmFsV29ya2VyT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5leHBvcnRzLkdsb2JhbFdvcmtlck9wdGlvbnMgPSBHbG9iYWxXb3JrZXJPcHRpb25zO1xuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0ID0gR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0ID09PSB1bmRlZmluZWQgPyBudWxsIDogR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0O1xuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IEdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjO1xuXG4vKioqLyB9KSxcbi8qIDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBDYWxsYmFja0tpbmQgPSB7XG4gIFVOS05PV046IDAsXG4gIERBVEE6IDEsXG4gIEVSUk9SOiAyXG59O1xuY29uc3QgU3RyZWFtS2luZCA9IHtcbiAgVU5LTk9XTjogMCxcbiAgQ0FOQ0VMOiAxLFxuICBDQU5DRUxfQ09NUExFVEU6IDIsXG4gIENMT1NFOiAzLFxuICBFTlFVRVVFOiA0LFxuICBFUlJPUjogNSxcbiAgUFVMTDogNixcbiAgUFVMTF9DT01QTEVURTogNyxcbiAgU1RBUlRfQ09NUExFVEU6IDhcbn07XG5cbmZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gIGlmICh0eXBlb2YgcmVhc29uICE9PSBcIm9iamVjdFwiIHx8IHJlYXNvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiByZWFzb247XG4gIH1cblxuICBzd2l0Y2ggKHJlYXNvbi5uYW1lKSB7XG4gICAgY2FzZSBcIkFib3J0RXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlKTtcblxuICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgY2FzZSBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiOlxuICAgICAgcmV0dXJuIG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UsIHJlYXNvbi5zdGF0dXMpO1xuXG4gICAgY2FzZSBcIlVua25vd25FcnJvckV4Y2VwdGlvblwiOlxuICAgICAgcmV0dXJuIG5ldyBfdXRpbC5Vbmtub3duRXJyb3JFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UsIHJlYXNvbi5kZXRhaWxzKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLnRvU3RyaW5nKCkpO1xuICB9XG59XG5cbmNsYXNzIE1lc3NhZ2VIYW5kbGVyIHtcbiAgY29uc3RydWN0b3Ioc291cmNlTmFtZSwgdGFyZ2V0TmFtZSwgY29tT2JqKSB7XG4gICAgdGhpcy5zb3VyY2VOYW1lID0gc291cmNlTmFtZTtcbiAgICB0aGlzLnRhcmdldE5hbWUgPSB0YXJnZXROYW1lO1xuICAgIHRoaXMuY29tT2JqID0gY29tT2JqO1xuICAgIHRoaXMuY2FsbGJhY2tJZCA9IDE7XG4gICAgdGhpcy5zdHJlYW1JZCA9IDE7XG4gICAgdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IHRydWU7XG4gICAgdGhpcy5zdHJlYW1TaW5rcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5zdHJlYW1Db250cm9sbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5hY3Rpb25IYW5kbGVyID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHRoaXMuX29uQ29tT2JqT25NZXNzYWdlID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGE7XG5cbiAgICAgIGlmIChkYXRhLnRhcmdldE5hbWUgIT09IHRoaXMuc291cmNlTmFtZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnN0cmVhbSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzU3RyZWFtTWVzc2FnZShkYXRhKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrSWQgPSBkYXRhLmNhbGxiYWNrSWQ7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2NhbGxiYWNrSWRdO1xuXG4gICAgICAgIGlmICghY2FwYWJpbGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgJHtjYWxsYmFja0lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF07XG5cbiAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2sgPT09IENhbGxiYWNrS2luZC5EQVRBKSB7XG4gICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKGRhdGEuZGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5jYWxsYmFjayA9PT0gQ2FsbGJhY2tLaW5kLkVSUk9SKSB7XG4gICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3Rpb25IYW5kbGVyW2RhdGEuYWN0aW9uXTtcblxuICAgICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogJHtkYXRhLmFjdGlvbn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY2FsbGJhY2tJZCkge1xuICAgICAgICBjb25zdCBjYlNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgICAgIGNvbnN0IGNiVGFyZ2V0TmFtZSA9IGRhdGEuc291cmNlTmFtZTtcbiAgICAgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKGFjdGlvbihkYXRhLmRhdGEpKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWU6IGNiU291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWU6IGNiVGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFja0tpbmQuREFUQSxcbiAgICAgICAgICAgIGNhbGxiYWNrSWQ6IGRhdGEuY2FsbGJhY2tJZCxcbiAgICAgICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWU6IGNiU291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWU6IGNiVGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFja0tpbmQuRVJST1IsXG4gICAgICAgICAgICBjYWxsYmFja0lkOiBkYXRhLmNhbGxiYWNrSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zdHJlYW1JZCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYWN0aW9uKGRhdGEuZGF0YSk7XG4gICAgfTtcblxuICAgIGNvbU9iai5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gIH1cblxuICBvbihhY3Rpb25OYW1lLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgYWggPSB0aGlzLmFjdGlvbkhhbmRsZXI7XG5cbiAgICBpZiAoYWhbYWN0aW9uTmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCBcIiR7YWN0aW9uTmFtZX1cImApO1xuICAgIH1cblxuICAgIGFoW2FjdGlvbk5hbWVdID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNlbmQoYWN0aW9uTmFtZSwgZGF0YSwgdHJhbnNmZXJzKSB7XG4gICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe1xuICAgICAgc291cmNlTmFtZTogdGhpcy5zb3VyY2VOYW1lLFxuICAgICAgdGFyZ2V0TmFtZTogdGhpcy50YXJnZXROYW1lLFxuICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgZGF0YVxuICAgIH0sIHRyYW5zZmVycyk7XG4gIH1cblxuICBzZW5kV2l0aFByb21pc2UoYWN0aW9uTmFtZSwgZGF0YSwgdHJhbnNmZXJzKSB7XG4gICAgY29uc3QgY2FsbGJhY2tJZCA9IHRoaXMuY2FsbGJhY2tJZCsrO1xuICAgIGNvbnN0IGNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXSA9IGNhcGFiaWxpdHk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBzb3VyY2VOYW1lOiB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICAgIHRhcmdldE5hbWU6IHRoaXMudGFyZ2V0TmFtZSxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICBjYWxsYmFja0lkLFxuICAgICAgICBkYXRhXG4gICAgICB9LCB0cmFuc2ZlcnMpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjYXBhYmlsaXR5LnJlamVjdChleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHNlbmRXaXRoU3RyZWFtKGFjdGlvbk5hbWUsIGRhdGEsIHF1ZXVlaW5nU3RyYXRlZ3ksIHRyYW5zZmVycykge1xuICAgIGNvbnN0IHN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZCsrO1xuICAgIGNvbnN0IHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHRoaXMudGFyZ2V0TmFtZTtcbiAgICBjb25zdCBjb21PYmogPSB0aGlzLmNvbU9iajtcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIHN0YXJ0OiBjb250cm9sbGVyID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSA9IHtcbiAgICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICAgIHN0YXJ0Q2FsbDogc3RhcnRDYXBhYmlsaXR5LFxuICAgICAgICAgIHB1bGxDYWxsOiBudWxsLFxuICAgICAgICAgIGNhbmNlbENhbGw6IG51bGwsXG4gICAgICAgICAgaXNDbG9zZWQ6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBkZXNpcmVkU2l6ZTogY29udHJvbGxlci5kZXNpcmVkU2l6ZVxuICAgICAgICB9LCB0cmFuc2ZlcnMpO1xuXG4gICAgICAgIHJldHVybiBzdGFydENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgIH0sXG4gICAgICBwdWxsOiBjb250cm9sbGVyID0+IHtcbiAgICAgICAgY29uc3QgcHVsbENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsID0gcHVsbENhcGFiaWxpdHk7XG4gICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHVsbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgIH0sXG4gICAgICBjYW5jZWw6IHJlYXNvbiA9PiB7XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yLCBcImNhbmNlbCBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG4gICAgICAgIGNvbnN0IGNhbmNlbENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwgPSBjYW5jZWxDYXBhYmlsaXR5O1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5DQU5DRUwsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYW5jZWxDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICB9XG4gICAgfSwgcXVldWVpbmdTdHJhdGVneSk7XG4gIH1cblxuICBfY3JlYXRlU3RyZWFtU2luayhkYXRhKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3Rpb25IYW5kbGVyW2RhdGEuYWN0aW9uXTtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQ7XG4gICAgY29uc3Qgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICBjb25zdCB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgIGNvbnN0IGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHN0cmVhbVNpbmsgPSB7XG4gICAgICBlbnF1ZXVlKGNodW5rLCBzaXplID0gMSwgdHJhbnNmZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdERlc2lyZWRTaXplID0gdGhpcy5kZXNpcmVkU2l6ZTtcbiAgICAgICAgdGhpcy5kZXNpcmVkU2l6ZSAtPSBzaXplO1xuXG4gICAgICAgIGlmIChsYXN0RGVzaXJlZFNpemUgPiAwICYmIHRoaXMuZGVzaXJlZFNpemUgPD0gMCkge1xuICAgICAgICAgIHRoaXMuc2lua0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgdGhpcy5yZWFkeSA9IHRoaXMuc2lua0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuX3Bvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVOUVVFVUUsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgY2h1bmtcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0xPU0UsXG4gICAgICAgICAgc3RyZWFtSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKHJlYXNvbikge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShyZWFzb24gaW5zdGFuY2VvZiBFcnJvciwgXCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVSUk9SLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgc2lua0NhcGFiaWxpdHk6ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxcbiAgICAgIG9uUHVsbDogbnVsbCxcbiAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgaXNDYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgZGVzaXJlZFNpemU6IGRhdGEuZGVzaXJlZFNpemUsXG4gICAgICByZWFkeTogbnVsbFxuICAgIH07XG4gICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgc3RyZWFtU2luay5yZWFkeSA9IHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSwgc3RyZWFtU2luaykpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQ7XG4gICAgY29uc3Qgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICBjb25zdCB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgIGNvbnN0IGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuXG4gICAgc3dpdGNoIChkYXRhLnN0cmVhbSkge1xuICAgICAgY2FzZSBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFOlxuICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uc3RhcnRDYWxsLnJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsLnJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5wdWxsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5QVUxMOlxuICAgICAgICBpZiAoIXRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsXG4gICAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXS5kZXNpcmVkU2l6ZSA8PSAwICYmIGRhdGEuZGVzaXJlZFNpemUgPiAwKSB7XG4gICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgb25QdWxsXG4gICAgICAgIH0gPSB0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUob25QdWxsICYmIG9uUHVsbCgpKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsXG4gICAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5FTlFVRVVFOlxuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSwgXCJlbnF1ZXVlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyXCIpO1xuXG4gICAgICAgIGlmICh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5pc0Nsb3NlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY29udHJvbGxlci5lbnF1ZXVlKGRhdGEuY2h1bmspO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdHJlYW1LaW5kLkNMT1NFOlxuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSwgXCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlclwiKTtcblxuICAgICAgICBpZiAodGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uaXNDbG9zZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY29udHJvbGxlci5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtSWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRVJST1I6XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLCBcImVycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyXCIpO1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5jb250cm9sbGVyLmVycm9yKHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcblxuICAgICAgICB0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUlkKTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdHJlYW1LaW5kLkNBTkNFTF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtSWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuQ0FOQ0VMOlxuICAgICAgICBpZiAoIXRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgb25DYW5jZWxcbiAgICAgICAgfSA9IHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF07XG4gICAgICAgIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgcmVzb2x2ZShvbkNhbmNlbCAmJiBvbkNhbmNlbCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBkZWxldGUgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9kZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUlkKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5zdGFydENhbGwsIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsLCB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5jYW5jZWxDYWxsXS5tYXAoZnVuY3Rpb24gKGNhcGFiaWxpdHkpIHtcbiAgICAgIHJldHVybiBjYXBhYmlsaXR5ICYmIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9KSk7XG4gICAgZGVsZXRlIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdO1xuICB9XG5cbiAgX3Bvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVycykge1xuICAgIGlmICh0cmFuc2ZlcnMgJiYgdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycykge1xuICAgICAgdGhpcy5jb21PYmoucG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb21PYmoucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNvbU9iai5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gIH1cblxufVxuXG5leHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gTWVzc2FnZUhhbmRsZXI7XG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTWV0YWRhdGEgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfeG1sX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMTMpO1xuXG5jbGFzcyBNZXRhZGF0YSB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiwgXCJNZXRhZGF0YTogaW5wdXQgaXMgbm90IGEgc3RyaW5nXCIpO1xuICAgIGRhdGEgPSB0aGlzLl9yZXBhaXIoZGF0YSk7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IF94bWxfcGFyc2VyLlNpbXBsZVhNTFBhcnNlcigpO1xuICAgIGNvbnN0IHhtbERvY3VtZW50ID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhkYXRhKTtcbiAgICB0aGlzLl9tZXRhZGF0YU1hcCA9IG5ldyBNYXAoKTtcblxuICAgIGlmICh4bWxEb2N1bWVudCkge1xuICAgICAgdGhpcy5fcGFyc2UoeG1sRG9jdW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIF9yZXBhaXIoZGF0YSkge1xuICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL15bXjxdKy8sIFwiXCIpLnJlcGxhY2UoLz5cXFxcMzc2XFxcXDM3NyhbXjxdKykvZywgZnVuY3Rpb24gKGFsbCwgY29kZXMpIHtcbiAgICAgIGNvbnN0IGJ5dGVzID0gY29kZXMucmVwbGFjZSgvXFxcXChbMC0zXSkoWzAtN10pKFswLTddKS9nLCBmdW5jdGlvbiAoY29kZSwgZDEsIGQyLCBkMykge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShkMSAqIDY0ICsgZDIgKiA4ICsgZDMgKiAxKTtcbiAgICAgIH0pLnJlcGxhY2UoLyYoYW1wfGFwb3N8Z3R8bHR8cXVvdCk7L2csIGZ1bmN0aW9uIChzdHIsIG5hbWUpIHtcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgY2FzZSBcImFtcFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiJlwiO1xuXG4gICAgICAgICAgY2FzZSBcImFwb3NcIjpcbiAgICAgICAgICAgIHJldHVybiBcIidcIjtcblxuICAgICAgICAgIGNhc2UgXCJndFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiPlwiO1xuXG4gICAgICAgICAgY2FzZSBcImx0XCI6XG4gICAgICAgICAgICByZXR1cm4gXCI8XCI7XG5cbiAgICAgICAgICBjYXNlIFwicXVvdFwiOlxuICAgICAgICAgICAgcmV0dXJuICdcIic7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYF9yZXBhaXI6ICR7bmFtZX0gaXNuJ3QgZGVmaW5lZC5gKTtcbiAgICAgIH0pO1xuICAgICAgbGV0IGNoYXJzID0gXCJcIjtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYnl0ZXMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgICBjb25zdCBjb2RlID0gYnl0ZXMuY2hhckNvZGVBdChpKSAqIDI1NiArIGJ5dGVzLmNoYXJDb2RlQXQoaSArIDEpO1xuXG4gICAgICAgIGlmIChjb2RlID49IDMyICYmIGNvZGUgPCAxMjcgJiYgY29kZSAhPT0gNjAgJiYgY29kZSAhPT0gNjIgJiYgY29kZSAhPT0gMzgpIHtcbiAgICAgICAgICBjaGFycyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYXJzICs9IFwiJiN4XCIgKyAoMHgxMDAwMCArIGNvZGUpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gXCI+XCIgKyBjaGFycztcbiAgICB9KTtcbiAgfVxuXG4gIF9wYXJzZSh4bWxEb2N1bWVudCkge1xuICAgIGxldCByZGYgPSB4bWxEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICBpZiAocmRmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwicmRmOnJkZlwiKSB7XG4gICAgICByZGYgPSByZGYuZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKHJkZiAmJiByZGYubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJyZGY6cmRmXCIpIHtcbiAgICAgICAgcmRmID0gcmRmLm5leHRTaWJsaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5vZGVOYW1lID0gcmRmID8gcmRmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuXG4gICAgaWYgKCFyZGYgfHwgbm9kZU5hbWUgIT09IFwicmRmOnJkZlwiIHx8ICFyZGYuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRyZW4gPSByZGYuY2hpbGROb2RlcztcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGRlc2MgPSBjaGlsZHJlbltpXTtcblxuICAgICAgaWYgKGRlc2Mubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJyZGY6ZGVzY3JpcHRpb25cIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gZGVzYy5jaGlsZE5vZGVzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgaWYgKGRlc2MuY2hpbGROb2Rlc1tqXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIiN0ZXh0XCIpIHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IGRlc2MuY2hpbGROb2Rlc1tqXTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gZW50cnkubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIHRoaXMuX21ldGFkYXRhTWFwLnNldChuYW1lLCBlbnRyeS50ZXh0Q29udGVudC50cmltKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0KG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFNYXAuaGFzKG5hbWUpID8gdGhpcy5fbWV0YWRhdGFNYXAuZ2V0KG5hbWUpIDogbnVsbDtcbiAgfVxuXG4gIGdldEFsbCgpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5fbWV0YWRhdGFNYXApIHtcbiAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGhhcyhuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhTWFwLmhhcyhuYW1lKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTWV0YWRhdGEgPSBNZXRhZGF0YTtcblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TaW1wbGVYTUxQYXJzZXIgPSB2b2lkIDA7XG5jb25zdCBYTUxQYXJzZXJFcnJvckNvZGUgPSB7XG4gIE5vRXJyb3I6IDAsXG4gIEVuZE9mRG9jdW1lbnQ6IC0xLFxuICBVbnRlcm1pbmF0ZWRDZGF0OiAtMixcbiAgVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb246IC0zLFxuICBVbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb246IC00LFxuICBVbnRlcm1pbmF0ZWRDb21tZW50OiAtNSxcbiAgTWFsZm9ybWVkRWxlbWVudDogLTYsXG4gIE91dE9mTWVtb3J5OiAtNyxcbiAgVW50ZXJtaW5hdGVkQXR0cmlidXRlVmFsdWU6IC04LFxuICBVbnRlcm1pbmF0ZWRFbGVtZW50OiAtOSxcbiAgRWxlbWVudE5ldmVyQmVndW46IC0xMFxufTtcblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKHMsIGluZGV4KSB7XG4gIGNvbnN0IGNoID0gc1tpbmRleF07XG4gIHJldHVybiBjaCA9PT0gXCIgXCIgfHwgY2ggPT09IFwiXFxuXCIgfHwgY2ggPT09IFwiXFxyXCIgfHwgY2ggPT09IFwiXFx0XCI7XG59XG5cbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZVN0cmluZyhzKSB7XG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGlmICghaXNXaGl0ZXNwYWNlKHMsIGkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmNsYXNzIFhNTFBhcnNlckJhc2Uge1xuICBfcmVzb2x2ZUVudGl0aWVzKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKC8mKFteO10rKTsvZywgKGFsbCwgZW50aXR5KSA9PiB7XG4gICAgICBpZiAoZW50aXR5LnN1YnN0cmluZygwLCAyKSA9PT0gXCIjeFwiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGVudGl0eS5zdWJzdHJpbmcoMiksIDE2KSk7XG4gICAgICB9IGVsc2UgaWYgKGVudGl0eS5zdWJzdHJpbmcoMCwgMSkgPT09IFwiI1wiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGVudGl0eS5zdWJzdHJpbmcoMSksIDEwKSk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZW50aXR5KSB7XG4gICAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICAgIHJldHVybiBcIjxcIjtcblxuICAgICAgICBjYXNlIFwiZ3RcIjpcbiAgICAgICAgICByZXR1cm4gXCI+XCI7XG5cbiAgICAgICAgY2FzZSBcImFtcFwiOlxuICAgICAgICAgIHJldHVybiBcIiZcIjtcblxuICAgICAgICBjYXNlIFwicXVvdFwiOlxuICAgICAgICAgIHJldHVybiAnXCInO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vblJlc29sdmVFbnRpdHkoZW50aXR5KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9wYXJzZUNvbnRlbnQocywgc3RhcnQpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gW107XG4gICAgbGV0IHBvcyA9IHN0YXJ0O1xuXG4gICAgZnVuY3Rpb24gc2tpcFdzKCkge1xuICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmIGlzV2hpdGVzcGFjZShzLCBwb3MpKSB7XG4gICAgICAgICsrcG9zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiAhaXNXaGl0ZXNwYWNlKHMsIHBvcykgJiYgc1twb3NdICE9PSBcIj5cIiAmJiBzW3Bvc10gIT09IFwiL1wiKSB7XG4gICAgICArK3BvcztcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gcy5zdWJzdHJpbmcoc3RhcnQsIHBvcyk7XG4gICAgc2tpcFdzKCk7XG5cbiAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgc1twb3NdICE9PSBcIj5cIiAmJiBzW3Bvc10gIT09IFwiL1wiICYmIHNbcG9zXSAhPT0gXCI/XCIpIHtcbiAgICAgIHNraXBXcygpO1xuICAgICAgbGV0IGF0dHJOYW1lID0gXCJcIixcbiAgICAgICAgICBhdHRyVmFsdWUgPSBcIlwiO1xuXG4gICAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgIWlzV2hpdGVzcGFjZShzLCBwb3MpICYmIHNbcG9zXSAhPT0gXCI9XCIpIHtcbiAgICAgICAgYXR0ck5hbWUgKz0gc1twb3NdO1xuICAgICAgICArK3BvcztcbiAgICAgIH1cblxuICAgICAgc2tpcFdzKCk7XG5cbiAgICAgIGlmIChzW3Bvc10gIT09IFwiPVwiKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICArK3BvcztcbiAgICAgIHNraXBXcygpO1xuICAgICAgY29uc3QgYXR0ckVuZENoYXIgPSBzW3Bvc107XG5cbiAgICAgIGlmIChhdHRyRW5kQ2hhciAhPT0gJ1wiJyAmJiBhdHRyRW5kQ2hhciAhPT0gXCInXCIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGF0dHJFbmRJbmRleCA9IHMuaW5kZXhPZihhdHRyRW5kQ2hhciwgKytwb3MpO1xuXG4gICAgICBpZiAoYXR0ckVuZEluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXR0clZhbHVlID0gcy5zdWJzdHJpbmcocG9zLCBhdHRyRW5kSW5kZXgpO1xuICAgICAgYXR0cmlidXRlcy5wdXNoKHtcbiAgICAgICAgbmFtZTogYXR0ck5hbWUsXG4gICAgICAgIHZhbHVlOiB0aGlzLl9yZXNvbHZlRW50aXRpZXMoYXR0clZhbHVlKVxuICAgICAgfSk7XG4gICAgICBwb3MgPSBhdHRyRW5kSW5kZXggKyAxO1xuICAgICAgc2tpcFdzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgcGFyc2VkOiBwb3MgLSBzdGFydFxuICAgIH07XG4gIH1cblxuICBfcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocywgc3RhcnQpIHtcbiAgICBsZXQgcG9zID0gc3RhcnQ7XG5cbiAgICBmdW5jdGlvbiBza2lwV3MoKSB7XG4gICAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgaXNXaGl0ZXNwYWNlKHMsIHBvcykpIHtcbiAgICAgICAgKytwb3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmICFpc1doaXRlc3BhY2UocywgcG9zKSAmJiBzW3Bvc10gIT09IFwiPlwiICYmIHNbcG9zXSAhPT0gXCIvXCIpIHtcbiAgICAgICsrcG9zO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBzLnN1YnN0cmluZyhzdGFydCwgcG9zKTtcbiAgICBza2lwV3MoKTtcbiAgICBjb25zdCBhdHRyU3RhcnQgPSBwb3M7XG5cbiAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgKHNbcG9zXSAhPT0gXCI/XCIgfHwgc1twb3MgKyAxXSAhPT0gXCI+XCIpKSB7XG4gICAgICArK3BvcztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHMuc3Vic3RyaW5nKGF0dHJTdGFydCwgcG9zKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgcGFyc2VkOiBwb3MgLSBzdGFydFxuICAgIH07XG4gIH1cblxuICBwYXJzZVhtbChzKSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBzLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2ggPSBzW2ldO1xuICAgICAgbGV0IGogPSBpO1xuXG4gICAgICBpZiAoY2ggPT09IFwiPFwiKSB7XG4gICAgICAgICsrajtcbiAgICAgICAgY29uc3QgY2gyID0gc1tqXTtcbiAgICAgICAgbGV0IHE7XG5cbiAgICAgICAgc3dpdGNoIChjaDIpIHtcbiAgICAgICAgICBjYXNlIFwiL1wiOlxuICAgICAgICAgICAgKytqO1xuICAgICAgICAgICAgcSA9IHMuaW5kZXhPZihcIj5cIiwgaik7XG5cbiAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25FbmRFbGVtZW50KHMuc3Vic3RyaW5nKGosIHEpKTtcbiAgICAgICAgICAgIGogPSBxICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIj9cIjpcbiAgICAgICAgICAgICsrajtcblxuICAgICAgICAgICAgY29uc3QgcGkgPSB0aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihzLCBqKTtcblxuICAgICAgICAgICAgaWYgKHMuc3Vic3RyaW5nKGogKyBwaS5wYXJzZWQsIGogKyBwaS5wYXJzZWQgKyAyKSAhPT0gXCI/PlwiKSB7XG4gICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25QaShwaS5uYW1lLCBwaS52YWx1ZSk7XG4gICAgICAgICAgICBqICs9IHBpLnBhcnNlZCArIDI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCIhXCI6XG4gICAgICAgICAgICBpZiAocy5zdWJzdHJpbmcoaiArIDEsIGogKyAzKSA9PT0gXCItLVwiKSB7XG4gICAgICAgICAgICAgIHEgPSBzLmluZGV4T2YoXCItLT5cIiwgaiArIDMpO1xuXG4gICAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5vbkNvbW1lbnQocy5zdWJzdHJpbmcoaiArIDMsIHEpKTtcbiAgICAgICAgICAgICAgaiA9IHEgKyAzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN1YnN0cmluZyhqICsgMSwgaiArIDgpID09PSBcIltDREFUQVtcIikge1xuICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKFwiXV0+XCIsIGogKyA4KTtcblxuICAgICAgICAgICAgICBpZiAocSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZENkYXQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMub25DZGF0YShzLnN1YnN0cmluZyhqICsgOCwgcSkpO1xuICAgICAgICAgICAgICBqID0gcSArIDM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMuc3Vic3RyaW5nKGogKyAxLCBqICsgOCkgPT09IFwiRE9DVFlQRVwiKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHEyID0gcy5pbmRleE9mKFwiW1wiLCBqICsgOCk7XG4gICAgICAgICAgICAgIGxldCBjb21wbGV4RG9jdHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKFwiPlwiLCBqICsgOCk7XG5cbiAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxMiA+IDAgJiYgcSA+IHEyKSB7XG4gICAgICAgICAgICAgICAgcSA9IHMuaW5kZXhPZihcIl0+XCIsIGogKyA4KTtcblxuICAgICAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbXBsZXhEb2N0eXBlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3R5cGVDb250ZW50ID0gcy5zdWJzdHJpbmcoaiArIDgsIHEgKyAoY29tcGxleERvY3R5cGUgPyAxIDogMCkpO1xuICAgICAgICAgICAgICB0aGlzLm9uRG9jdHlwZShkb2N0eXBlQ29udGVudCk7XG4gICAgICAgICAgICAgIGogPSBxICsgKGNvbXBsZXhEb2N0eXBlID8gMiA6IDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5NYWxmb3JtZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fcGFyc2VDb250ZW50KHMsIGopO1xuXG4gICAgICAgICAgICBpZiAoY29udGVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLk1hbGZvcm1lZEVsZW1lbnQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpc0Nsb3NlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAocy5zdWJzdHJpbmcoaiArIGNvbnRlbnQucGFyc2VkLCBqICsgY29udGVudC5wYXJzZWQgKyAyKSA9PT0gXCIvPlwiKSB7XG4gICAgICAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdWJzdHJpbmcoaiArIGNvbnRlbnQucGFyc2VkLCBqICsgY29udGVudC5wYXJzZWQgKyAxKSAhPT0gXCI+XCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9uQmVnaW5FbGVtZW50KGNvbnRlbnQubmFtZSwgY29udGVudC5hdHRyaWJ1dGVzLCBpc0Nsb3NlZCk7XG4gICAgICAgICAgICBqICs9IGNvbnRlbnQucGFyc2VkICsgKGlzQ2xvc2VkID8gMiA6IDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChqIDwgcy5sZW5ndGggJiYgc1tqXSAhPT0gXCI8XCIpIHtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gcy5zdWJzdHJpbmcoaSwgaik7XG4gICAgICAgIHRoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyh0ZXh0KSk7XG4gICAgICB9XG5cbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVzb2x2ZUVudGl0eShuYW1lKSB7XG4gICAgcmV0dXJuIGAmJHtuYW1lfTtgO1xuICB9XG5cbiAgb25QaShuYW1lLCB2YWx1ZSkge31cblxuICBvbkNvbW1lbnQodGV4dCkge31cblxuICBvbkNkYXRhKHRleHQpIHt9XG5cbiAgb25Eb2N0eXBlKGRvY3R5cGVDb250ZW50KSB7fVxuXG4gIG9uVGV4dCh0ZXh0KSB7fVxuXG4gIG9uQmVnaW5FbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGlzRW1wdHkpIHt9XG5cbiAgb25FbmRFbGVtZW50KG5hbWUpIHt9XG5cbiAgb25FcnJvcihjb2RlKSB7fVxuXG59XG5cbmNsYXNzIFNpbXBsZURPTU5vZGUge1xuICBjb25zdHJ1Y3Rvcihub2RlTmFtZSwgbm9kZVZhbHVlKSB7XG4gICAgdGhpcy5ub2RlTmFtZSA9IG5vZGVOYW1lO1xuICAgIHRoaXMubm9kZVZhbHVlID0gbm9kZVZhbHVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInBhcmVudE5vZGVcIiwge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcyAmJiB0aGlzLmNoaWxkTm9kZXNbMF07XG4gIH1cblxuICBnZXQgbmV4dFNpYmxpbmcoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgaWYgKCFjaGlsZE5vZGVzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKHRoaXMpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGROb2Rlc1tpbmRleCArIDFdO1xuICB9XG5cbiAgZ2V0IHRleHRDb250ZW50KCkge1xuICAgIGlmICghdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlVmFsdWUgfHwgXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC50ZXh0Q29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9XG5cbiAgaGFzQ2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzICYmIHRoaXMuY2hpbGROb2Rlcy5sZW5ndGggPiAwO1xuICB9XG5cbn1cblxuY2xhc3MgU2ltcGxlWE1MUGFyc2VyIGV4dGVuZHMgWE1MUGFyc2VyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY3VycmVudEZyYWdtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9zdGFjayA9IG51bGw7XG4gICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7XG4gIH1cblxuICBwYXJzZUZyb21TdHJpbmcoZGF0YSkge1xuICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudCA9IFtdO1xuICAgIHRoaXMuX3N0YWNrID0gW107XG4gICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7XG4gICAgdGhpcy5wYXJzZVhtbChkYXRhKTtcblxuICAgIGlmICh0aGlzLl9lcnJvckNvZGUgIT09IFhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IFtkb2N1bWVudEVsZW1lbnRdID0gdGhpcy5fY3VycmVudEZyYWdtZW50O1xuXG4gICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvY3VtZW50RWxlbWVudFxuICAgIH07XG4gIH1cblxuICBvblJlc29sdmVFbnRpdHkobmFtZSkge1xuICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgY2FzZSBcImFwb3NcIjpcbiAgICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5vblJlc29sdmVFbnRpdHkobmFtZSk7XG4gIH1cblxuICBvblRleHQodGV4dCkge1xuICAgIGlmIChpc1doaXRlc3BhY2VTdHJpbmcodGV4dCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUoXCIjdGV4dFwiLCB0ZXh0KTtcblxuICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG5vZGUpO1xuICB9XG5cbiAgb25DZGF0YSh0ZXh0KSB7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBTaW1wbGVET01Ob2RlKFwiI3RleHRcIiwgdGV4dCk7XG5cbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTtcbiAgfVxuXG4gIG9uQmVnaW5FbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGlzRW1wdHkpIHtcbiAgICBjb25zdCBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUobmFtZSk7XG4gICAgbm9kZS5jaGlsZE5vZGVzID0gW107XG5cbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTtcblxuICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50RnJhZ21lbnQpO1xuXG4gICAgdGhpcy5fY3VycmVudEZyYWdtZW50ID0gbm9kZS5jaGlsZE5vZGVzO1xuICB9XG5cbiAgb25FbmRFbGVtZW50KG5hbWUpIHtcbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQgPSB0aGlzLl9zdGFjay5wb3AoKSB8fCBbXTtcbiAgICBjb25zdCBsYXN0RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRGcmFnbWVudFt0aGlzLl9jdXJyZW50RnJhZ21lbnQubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoIWxhc3RFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGFzdEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBsYXN0RWxlbWVudC5jaGlsZE5vZGVzW2ldLnBhcmVudE5vZGUgPSBsYXN0RWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBvbkVycm9yKGNvZGUpIHtcbiAgICB0aGlzLl9lcnJvckNvZGUgPSBjb2RlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5TaW1wbGVYTUxQYXJzZXIgPSBTaW1wbGVYTUxQYXJzZXI7XG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUERGRGF0YVRyYW5zcG9ydFN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgUERGRGF0YVRyYW5zcG9ydFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcywgcGRmRGF0YVJhbmdlVHJhbnNwb3J0KSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkocGRmRGF0YVJhbmdlVHJhbnNwb3J0LCAnUERGRGF0YVRyYW5zcG9ydFN0cmVhbSAtIG1pc3NpbmcgcmVxdWlyZWQgXCJwZGZEYXRhUmFuZ2VUcmFuc3BvcnRcIiBhcmd1bWVudC4nKTtcbiAgICB0aGlzLl9xdWV1ZWRDaHVua3MgPSBbXTtcbiAgICB0aGlzLl9wcm9ncmVzc2l2ZURvbmUgPSBwYXJhbXMucHJvZ3Jlc3NpdmVEb25lIHx8IGZhbHNlO1xuICAgIGNvbnN0IGluaXRpYWxEYXRhID0gcGFyYW1zLmluaXRpYWxEYXRhO1xuXG4gICAgaWYgKGluaXRpYWxEYXRhICYmIGluaXRpYWxEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGluaXRpYWxEYXRhKS5idWZmZXI7XG5cbiAgICAgIHRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0ID0gcGRmRGF0YVJhbmdlVHJhbnNwb3J0O1xuICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gIXBhcmFtcy5kaXNhYmxlU3RyZWFtO1xuICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSAhcGFyYW1zLmRpc2FibGVSYW5nZTtcbiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gcGFyYW1zLmxlbmd0aDtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fcmFuZ2VSZWFkZXJzID0gW107XG5cbiAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUmFuZ2VMaXN0ZW5lcigoYmVnaW4sIGNodW5rKSA9PiB7XG4gICAgICB0aGlzLl9vblJlY2VpdmVEYXRhKHtcbiAgICAgICAgYmVnaW4sXG4gICAgICAgIGNodW5rXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRQcm9ncmVzc0xpc3RlbmVyKChsb2FkZWQsIHRvdGFsKSA9PiB7XG4gICAgICB0aGlzLl9vblByb2dyZXNzKHtcbiAgICAgICAgbG9hZGVkLFxuICAgICAgICB0b3RhbFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIoY2h1bmsgPT4ge1xuICAgICAgdGhpcy5fb25SZWNlaXZlRGF0YSh7XG4gICAgICAgIGNodW5rXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRQcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcigoKSA9PiB7XG4gICAgICB0aGlzLl9vblByb2dyZXNzaXZlRG9uZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LnRyYW5zcG9ydFJlYWR5KCk7XG4gIH1cblxuICBfb25SZWNlaXZlRGF0YShhcmdzKSB7XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYXJncy5jaHVuaykuYnVmZmVyO1xuXG4gICAgaWYgKGFyZ3MuYmVnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKSB7XG4gICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKGJ1ZmZlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9xdWV1ZWRDaHVua3MucHVzaChidWZmZXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuX3JhbmdlUmVhZGVycy5zb21lKGZ1bmN0aW9uIChyYW5nZVJlYWRlcikge1xuICAgICAgICBpZiAocmFuZ2VSZWFkZXIuX2JlZ2luICE9PSBhcmdzLmJlZ2luKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmFuZ2VSZWFkZXIuX2VucXVldWUoYnVmZmVyKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICAoMCwgX3V0aWwuYXNzZXJ0KShmb3VuZCwgXCJfb25SZWNlaXZlRGF0YSAtIG5vIGBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmFuZ2VSZWFkZXJgIGluc3RhbmNlIGZvdW5kLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPyB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5fbG9hZGVkIDogMDtcbiAgfVxuXG4gIF9vblByb2dyZXNzKGV2dCkge1xuICAgIGlmIChldnQudG90YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmlyc3RSZWFkZXIgPSB0aGlzLl9yYW5nZVJlYWRlcnNbMF07XG5cbiAgICAgIGlmIChmaXJzdFJlYWRlciAmJiBmaXJzdFJlYWRlci5vblByb2dyZXNzKSB7XG4gICAgICAgIGZpcnN0UmVhZGVyLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZnVsbFJlYWRlciA9IHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuXG4gICAgICBpZiAoZnVsbFJlYWRlciAmJiBmdWxsUmVhZGVyLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgZnVsbFJlYWRlci5vblByb2dyZXNzKHtcbiAgICAgICAgICBsb2FkZWQ6IGV2dC5sb2FkZWQsXG4gICAgICAgICAgdG90YWw6IGV2dC50b3RhbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25Qcm9ncmVzc2l2ZURvbmUoKSB7XG4gICAgaWYgKHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKSB7XG4gICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5wcm9ncmVzc2l2ZURvbmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wcm9ncmVzc2l2ZURvbmUgPSB0cnVlO1xuICB9XG5cbiAgX3JlbW92ZVJhbmdlUmVhZGVyKHJlYWRlcikge1xuICAgIGNvbnN0IGkgPSB0aGlzLl9yYW5nZVJlYWRlcnMuaW5kZXhPZihyZWFkZXIpO1xuXG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fcmFuZ2VSZWFkZXJzLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH1cblxuICBnZXRGdWxsUmVhZGVyKCkge1xuICAgICgwLCBfdXRpbC5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwgXCJQREZEYXRhVHJhbnNwb3J0U3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuXCIpO1xuICAgIGNvbnN0IHF1ZXVlZENodW5rcyA9IHRoaXMuX3F1ZXVlZENodW5rcztcbiAgICB0aGlzLl9xdWV1ZWRDaHVua3MgPSBudWxsO1xuICAgIHJldHVybiBuZXcgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJlYWRlcih0aGlzLCBxdWV1ZWRDaHVua3MsIHRoaXMuX3Byb2dyZXNzaXZlRG9uZSk7XG4gIH1cblxuICBnZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKSB7XG4gICAgaWYgKGVuZCA8PSB0aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmFuZ2VSZWFkZXIodGhpcywgYmVnaW4sIGVuZCk7XG5cbiAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZShiZWdpbiwgZW5kKTtcblxuICAgIHRoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHJlYWRlcik7XG5cbiAgICByZXR1cm4gcmVhZGVyO1xuICB9XG5cbiAgY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKSB7XG4gICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWFkZXJzID0gdGhpcy5fcmFuZ2VSZWFkZXJzLnNsaWNlKDApO1xuXG4gICAgcmVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChyYW5nZVJlYWRlcikge1xuICAgICAgcmFuZ2VSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWJvcnQoKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGRGF0YVRyYW5zcG9ydFN0cmVhbSA9IFBERkRhdGFUcmFuc3BvcnRTdHJlYW07XG5cbmNsYXNzIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SZWFkZXIge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0sIHF1ZXVlZENodW5rcywgcHJvZ3Jlc3NpdmVEb25lID0gZmFsc2UpIHtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fZG9uZSA9IHByb2dyZXNzaXZlRG9uZSB8fCBmYWxzZTtcbiAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gcXVldWVkQ2h1bmtzIHx8IFtdO1xuICAgIHRoaXMuX2xvYWRlZCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIHRoaXMuX3F1ZXVlZENodW5rcykge1xuICAgICAgdGhpcy5fbG9hZGVkICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICB0aGlzLl9oZWFkZXJzUmVhZHkgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBzdHJlYW0uX2Z1bGxSZXF1ZXN0UmVhZGVyID0gdGhpcztcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICB9XG5cbiAgX2VucXVldWUoY2h1bmspIHtcbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSA9IHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCk7XG5cbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCArPSBjaHVuay5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5O1xuICB9XG5cbiAgZ2V0IGZpbGVuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgfVxuXG4gIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdHJlYW0uX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cmVhbS5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RyZWFtLl9jb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fcXVldWVkQ2h1bmtzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHJlcXVlc3RDYXBhYmlsaXR5KTtcblxuICAgIHJldHVybiByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gIH1cblxuICBwcm9ncmVzc2l2ZURvbmUoKSB7XG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgfVxuXG59XG5cbmNsYXNzIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgYmVnaW4sIGVuZCkge1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9iZWdpbiA9IGJlZ2luO1xuICAgIHRoaXMuX2VuZCA9IGVuZDtcbiAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgfVxuXG4gIF9lbnF1ZXVlKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVxdWVzdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IGNodW5rO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXF1ZXN0c0NhcGFiaWxpdHkgPSB0aGlzLl9yZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICByZXF1ZXN0c0NhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcyk7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fcXVldWVkQ2h1bmspIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcXVldWVkQ2h1bms7XG4gICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7XG5cbiAgICByZXR1cm4gcmVxdWVzdENhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNhbmNlbChyZWFzb24pIHtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIHRoaXMuX3JlcXVlc3RzLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3RDYXBhYmlsaXR5KSB7XG4gICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuXG4gICAgdGhpcy5fc3RyZWFtLl9yZW1vdmVSYW5nZVJlYWRlcih0aGlzKTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuV2ViR0xDb250ZXh0ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBXZWJHTENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW5hYmxlID0gZmFsc2VcbiAgfSkge1xuICAgIHRoaXMuX2VuYWJsZWQgPSBlbmFibGUgPT09IHRydWU7XG4gIH1cblxuICBnZXQgaXNFbmFibGVkKCkge1xuICAgIGxldCBlbmFibGVkID0gdGhpcy5fZW5hYmxlZDtcblxuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBlbmFibGVkID0gV2ViR0xVdGlscy50cnlJbml0R0woKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJpc0VuYWJsZWRcIiwgZW5hYmxlZCk7XG4gIH1cblxuICBjb21wb3NlU01hc2soe1xuICAgIGxheWVyLFxuICAgIG1hc2ssXG4gICAgcHJvcGVydGllc1xuICB9KSB7XG4gICAgcmV0dXJuIFdlYkdMVXRpbHMuY29tcG9zZVNNYXNrKGxheWVyLCBtYXNrLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIGRyYXdGaWd1cmVzKHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgYmFja2dyb3VuZENvbG9yLFxuICAgIGZpZ3VyZXMsXG4gICAgY29udGV4dFxuICB9KSB7XG4gICAgcmV0dXJuIFdlYkdMVXRpbHMuZHJhd0ZpZ3VyZXMod2lkdGgsIGhlaWdodCwgYmFja2dyb3VuZENvbG9yLCBmaWd1cmVzLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIFdlYkdMVXRpbHMuY2xlYW51cCgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5XZWJHTENvbnRleHQgPSBXZWJHTENvbnRleHQ7XG5cbnZhciBXZWJHTFV0aWxzID0gZnVuY3Rpb24gV2ViR0xVdGlsc0Nsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGxvYWRTaGFkZXIoZ2wsIGNvZGUsIHNoYWRlclR5cGUpIHtcbiAgICB2YXIgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKHNoYWRlclR5cGUpO1xuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIGNvZGUpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcbiAgICB2YXIgY29tcGlsZWQgPSBnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUyk7XG5cbiAgICBpZiAoIWNvbXBpbGVkKSB7XG4gICAgICB2YXIgZXJyb3JNc2cgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBkdXJpbmcgc2hhZGVyIGNvbXBpbGF0aW9uOiBcIiArIGVycm9yTXNnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVmVydGV4U2hhZGVyKGdsLCBjb2RlKSB7XG4gICAgcmV0dXJuIGxvYWRTaGFkZXIoZ2wsIGNvZGUsIGdsLlZFUlRFWF9TSEFERVIpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRnJhZ21lbnRTaGFkZXIoZ2wsIGNvZGUpIHtcbiAgICByZXR1cm4gbG9hZFNoYWRlcihnbCwgY29kZSwgZ2wuRlJBR01FTlRfU0hBREVSKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByb2dyYW0oZ2wsIHNoYWRlcnMpIHtcbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHNoYWRlcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcnNbaV0pO1xuICAgIH1cblxuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuICAgIHZhciBsaW5rZWQgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKTtcblxuICAgIGlmICghbGlua2VkKSB7XG4gICAgICB2YXIgZXJyb3JNc2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGR1cmluZyBwcm9ncmFtIGxpbmtpbmc6IFwiICsgZXJyb3JNc2cpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9ncmFtO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVGV4dHVyZShnbCwgaW1hZ2UsIHRleHR1cmVJZCkge1xuICAgIGdsLmFjdGl2ZVRleHR1cmUodGV4dHVyZUlkKTtcbiAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgaW1hZ2UpO1xuICAgIHJldHVybiB0ZXh0dXJlO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRHTCwgY3VycmVudENhbnZhcztcblxuICBmdW5jdGlvbiBnZW5lcmF0ZUdMKCkge1xuICAgIGlmIChjdXJyZW50R0wpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjdXJyZW50Q2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjdXJyZW50R0wgPSBjdXJyZW50Q2FudmFzLmdldENvbnRleHQoXCJ3ZWJnbFwiLCB7XG4gICAgICBwcmVtdWx0aXBsaWVkYWxwaGE6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICB2YXIgc21hc2tWZXJ0ZXhTaGFkZXJDb2RlID0gXCJcXFxuICBhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIGF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB1bmlmb3JtIHZlYzIgdV9yZXNvbHV0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHZvaWQgbWFpbigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICB2ZWMyIGNsaXBTcGFjZSA9IChhX3Bvc2l0aW9uIC8gdV9yZXNvbHV0aW9uKSAqIDIuMCAtIDEuMDsgICBcXFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChjbGlwU3BhY2UgKiB2ZWMyKDEsIC0xKSwgMCwgMSk7ICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICB2X3RleENvb3JkID0gYV90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiO1xuICB2YXIgc21hc2tGcmFnbWVudFNoYWRlckNvZGUgPSBcIlxcXG4gIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB1bmlmb3JtIHZlYzQgdV9iYWNrZHJvcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gaW50IHVfc3VidHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB1bmlmb3JtIHNhbXBsZXIyRCB1X21hc2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHZvaWQgbWFpbigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICB2ZWM0IGltYWdlQ29sb3IgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl90ZXhDb29yZCk7ICAgICAgICAgICBcXFxuICAgIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHVfbWFzaywgdl90ZXhDb29yZCk7ICAgICAgICAgICAgIFxcXG4gICAgaWYgKHVfYmFja2Ryb3AuYSA+IDAuMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgIG1hc2tDb2xvci5yZ2IgPSBtYXNrQ29sb3IucmdiICogbWFza0NvbG9yLmEgKyAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgIHVfYmFja2Ryb3AucmdiICogKDEuMCAtIG1hc2tDb2xvci5hKTsgICAgIFxcXG4gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICBmbG9hdCBsdW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGlmICh1X3N1YnR5cGUgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICBsdW0gPSBtYXNrQ29sb3IuYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgbHVtID0gbWFza0NvbG9yLnIgKiAwLjMgKyBtYXNrQ29sb3IuZyAqIDAuNTkgKyAgICAgICAgICAgIFxcXG4gICAgICAgICAgICBtYXNrQ29sb3IuYiAqIDAuMTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGltYWdlQ29sb3IuYSAqPSBsdW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgaW1hZ2VDb2xvci5yZ2IgKj0gaW1hZ2VDb2xvci5hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICBnbF9GcmFnQ29sb3IgPSBpbWFnZUNvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiO1xuICB2YXIgc21hc2tDYWNoZSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gaW5pdFNtYXNrR0woKSB7XG4gICAgdmFyIGNhbnZhcywgZ2w7XG4gICAgZ2VuZXJhdGVHTCgpO1xuICAgIGNhbnZhcyA9IGN1cnJlbnRDYW52YXM7XG4gICAgY3VycmVudENhbnZhcyA9IG51bGw7XG4gICAgZ2wgPSBjdXJyZW50R0w7XG4gICAgY3VycmVudEdMID0gbnVsbDtcbiAgICB2YXIgdmVydGV4U2hhZGVyID0gY3JlYXRlVmVydGV4U2hhZGVyKGdsLCBzbWFza1ZlcnRleFNoYWRlckNvZGUpO1xuICAgIHZhciBmcmFnbWVudFNoYWRlciA9IGNyZWF0ZUZyYWdtZW50U2hhZGVyKGdsLCBzbWFza0ZyYWdtZW50U2hhZGVyQ29kZSk7XG4gICAgdmFyIHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKGdsLCBbdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcl0pO1xuICAgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgdmFyIGNhY2hlID0ge307XG4gICAgY2FjaGUuZ2wgPSBnbDtcbiAgICBjYWNoZS5jYW52YXMgPSBjYW52YXM7XG4gICAgY2FjaGUucmVzb2x1dGlvbkxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIFwidV9yZXNvbHV0aW9uXCIpO1xuICAgIGNhY2hlLnBvc2l0aW9uTG9jYXRpb24gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBcImFfcG9zaXRpb25cIik7XG4gICAgY2FjaGUuYmFja2Ryb3BMb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBcInVfYmFja2Ryb3BcIik7XG4gICAgY2FjaGUuc3VidHlwZUxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIFwidV9zdWJ0eXBlXCIpO1xuICAgIHZhciB0ZXhDb29yZExvY2F0aW9uID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgXCJhX3RleENvb3JkXCIpO1xuICAgIHZhciB0ZXhMYXllckxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIFwidV9pbWFnZVwiKTtcbiAgICB2YXIgdGV4TWFza0xvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIFwidV9tYXNrXCIpO1xuICAgIHZhciB0ZXhDb29yZEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0ZXhDb29yZEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWzAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMS4wLCAxLjAsIDAuMCwgMS4wLCAxLjBdKSwgZ2wuU1RBVElDX0RSQVcpO1xuICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHRleENvb3JkTG9jYXRpb24pO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGV4Q29vcmRMb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC51bmlmb3JtMWkodGV4TGF5ZXJMb2NhdGlvbiwgMCk7XG4gICAgZ2wudW5pZm9ybTFpKHRleE1hc2tMb2NhdGlvbiwgMSk7XG4gICAgc21hc2tDYWNoZSA9IGNhY2hlO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcG9zZVNNYXNrKGxheWVyLCBtYXNrLCBwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIHdpZHRoID0gbGF5ZXIud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IGxheWVyLmhlaWdodDtcblxuICAgIGlmICghc21hc2tDYWNoZSkge1xuICAgICAgaW5pdFNtYXNrR0woKTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGUgPSBzbWFza0NhY2hlLFxuICAgICAgICBjYW52YXMgPSBjYWNoZS5jYW52YXMsXG4gICAgICAgIGdsID0gY2FjaGUuZ2w7XG4gICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICBnbC52aWV3cG9ydCgwLCAwLCBnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHQpO1xuICAgIGdsLnVuaWZvcm0yZihjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24sIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYgKHByb3BlcnRpZXMuYmFja2Ryb3ApIHtcbiAgICAgIGdsLnVuaWZvcm00ZihjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24sIHByb3BlcnRpZXMuYmFja2Ryb3BbMF0sIHByb3BlcnRpZXMuYmFja2Ryb3BbMV0sIHByb3BlcnRpZXMuYmFja2Ryb3BbMl0sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnbC51bmlmb3JtNGYoY2FjaGUucmVzb2x1dGlvbkxvY2F0aW9uLCAwLCAwLCAwLCAwKTtcbiAgICB9XG5cbiAgICBnbC51bmlmb3JtMWkoY2FjaGUuc3VidHlwZUxvY2F0aW9uLCBwcm9wZXJ0aWVzLnN1YnR5cGUgPT09IFwiTHVtaW5vc2l0eVwiID8gMSA6IDApO1xuICAgIHZhciB0ZXh0dXJlID0gY3JlYXRlVGV4dHVyZShnbCwgbGF5ZXIsIGdsLlRFWFRVUkUwKTtcbiAgICB2YXIgbWFza1RleHR1cmUgPSBjcmVhdGVUZXh0dXJlKGdsLCBtYXNrLCBnbC5URVhUVVJFMSk7XG4gICAgdmFyIGJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCB3aWR0aCwgMCwgMCwgaGVpZ2h0LCAwLCBoZWlnaHQsIHdpZHRoLCAwLCB3aWR0aCwgaGVpZ2h0XSksIGdsLlNUQVRJQ19EUkFXKTtcbiAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShjYWNoZS5wb3NpdGlvbkxvY2F0aW9uKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGNhY2hlLnBvc2l0aW9uTG9jYXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTtcbiAgICBnbC5lbmFibGUoZ2wuQkxFTkQpO1xuICAgIGdsLmJsZW5kRnVuYyhnbC5PTkUsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xuICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTtcbiAgICBnbC5mbHVzaCgpO1xuICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgZ2wuZGVsZXRlVGV4dHVyZShtYXNrVGV4dHVyZSk7XG4gICAgZ2wuZGVsZXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgcmV0dXJuIGNhbnZhcztcbiAgfVxuXG4gIHZhciBmaWd1cmVzVmVydGV4U2hhZGVyQ29kZSA9IFwiXFxcbiAgYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICBhdHRyaWJ1dGUgdmVjMyBhX2NvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdW5pZm9ybSB2ZWMyIHVfcmVzb2x1dGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB1bmlmb3JtIHZlYzIgdV9zY2FsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gdmVjMiB1X29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2YXJ5aW5nIHZlYzQgdl9jb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdm9pZCBtYWluKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIHZlYzIgcG9zaXRpb24gPSAoYV9wb3NpdGlvbiArIHVfb2Zmc2V0KSAqIHVfc2NhbGU7ICAgICAgICAgIFxcXG4gICAgdmVjMiBjbGlwU3BhY2UgPSAocG9zaXRpb24gLyB1X3Jlc29sdXRpb24pICogMi4wIC0gMS4wOyAgICAgXFxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoY2xpcFNwYWNlICogdmVjMigxLCAtMSksIDAsIDEpOyAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgdl9jb2xvciA9IHZlYzQoYV9jb2xvciAvIDI1NS4wLCAxLjApOyAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjtcbiAgdmFyIGZpZ3VyZXNGcmFnbWVudFNoYWRlckNvZGUgPSBcIlxcXG4gIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2YXJ5aW5nIHZlYzQgdl9jb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdm9pZCBtYWluKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZfY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI7XG4gIHZhciBmaWd1cmVzQ2FjaGUgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGluaXRGaWd1cmVzR0woKSB7XG4gICAgdmFyIGNhbnZhcywgZ2w7XG4gICAgZ2VuZXJhdGVHTCgpO1xuICAgIGNhbnZhcyA9IGN1cnJlbnRDYW52YXM7XG4gICAgY3VycmVudENhbnZhcyA9IG51bGw7XG4gICAgZ2wgPSBjdXJyZW50R0w7XG4gICAgY3VycmVudEdMID0gbnVsbDtcbiAgICB2YXIgdmVydGV4U2hhZGVyID0gY3JlYXRlVmVydGV4U2hhZGVyKGdsLCBmaWd1cmVzVmVydGV4U2hhZGVyQ29kZSk7XG4gICAgdmFyIGZyYWdtZW50U2hhZGVyID0gY3JlYXRlRnJhZ21lbnRTaGFkZXIoZ2wsIGZpZ3VyZXNGcmFnbWVudFNoYWRlckNvZGUpO1xuICAgIHZhciBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbShnbCwgW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXJdKTtcbiAgICBnbC51c2VQcm9ncmFtKHByb2dyYW0pO1xuICAgIHZhciBjYWNoZSA9IHt9O1xuICAgIGNhY2hlLmdsID0gZ2w7XG4gICAgY2FjaGUuY2FudmFzID0gY2FudmFzO1xuICAgIGNhY2hlLnJlc29sdXRpb25Mb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBcInVfcmVzb2x1dGlvblwiKTtcbiAgICBjYWNoZS5zY2FsZUxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIFwidV9zY2FsZVwiKTtcbiAgICBjYWNoZS5vZmZzZXRMb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBcInVfb2Zmc2V0XCIpO1xuICAgIGNhY2hlLnBvc2l0aW9uTG9jYXRpb24gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBcImFfcG9zaXRpb25cIik7XG4gICAgY2FjaGUuY29sb3JMb2NhdGlvbiA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIFwiYV9jb2xvclwiKTtcbiAgICBmaWd1cmVzQ2FjaGUgPSBjYWNoZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdGaWd1cmVzKHdpZHRoLCBoZWlnaHQsIGJhY2tncm91bmRDb2xvciwgZmlndXJlcywgY29udGV4dCkge1xuICAgIGlmICghZmlndXJlc0NhY2hlKSB7XG4gICAgICBpbml0RmlndXJlc0dMKCk7XG4gICAgfVxuXG4gICAgdmFyIGNhY2hlID0gZmlndXJlc0NhY2hlLFxuICAgICAgICBjYW52YXMgPSBjYWNoZS5jYW52YXMsXG4gICAgICAgIGdsID0gY2FjaGUuZ2w7XG4gICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICBnbC52aWV3cG9ydCgwLCAwLCBnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHQpO1xuICAgIGdsLnVuaWZvcm0yZihjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24sIHdpZHRoLCBoZWlnaHQpO1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIGksIGlpLCByb3dzO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBmaWd1cmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHN3aXRjaCAoZmlndXJlc1tpXS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJsYXR0aWNlXCI6XG4gICAgICAgICAgcm93cyA9IGZpZ3VyZXNbaV0uY29vcmRzLmxlbmd0aCAvIGZpZ3VyZXNbaV0udmVydGljZXNQZXJSb3cgfCAwO1xuICAgICAgICAgIGNvdW50ICs9IChyb3dzIC0gMSkgKiAoZmlndXJlc1tpXS52ZXJ0aWNlc1BlclJvdyAtIDEpICogNjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwidHJpYW5nbGVzXCI6XG4gICAgICAgICAgY291bnQgKz0gZmlndXJlc1tpXS5jb29yZHMubGVuZ3RoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjb29yZHMgPSBuZXcgRmxvYXQzMkFycmF5KGNvdW50ICogMik7XG4gICAgdmFyIGNvbG9ycyA9IG5ldyBVaW50OEFycmF5KGNvdW50ICogMyk7XG4gICAgdmFyIGNvb3Jkc01hcCA9IGNvbnRleHQuY29vcmRzLFxuICAgICAgICBjb2xvcnNNYXAgPSBjb250ZXh0LmNvbG9ycztcbiAgICB2YXIgcEluZGV4ID0gMCxcbiAgICAgICAgY0luZGV4ID0gMDtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gZmlndXJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZmlndXJlID0gZmlndXJlc1tpXSxcbiAgICAgICAgICBwcyA9IGZpZ3VyZS5jb29yZHMsXG4gICAgICAgICAgY3MgPSBmaWd1cmUuY29sb3JzO1xuXG4gICAgICBzd2l0Y2ggKGZpZ3VyZS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJsYXR0aWNlXCI6XG4gICAgICAgICAgdmFyIGNvbHMgPSBmaWd1cmUudmVydGljZXNQZXJSb3c7XG4gICAgICAgICAgcm93cyA9IHBzLmxlbmd0aCAvIGNvbHMgfCAwO1xuXG4gICAgICAgICAgZm9yICh2YXIgcm93ID0gMTsgcm93IDwgcm93czsgcm93KyspIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSByb3cgKiBjb2xzICsgMTtcblxuICAgICAgICAgICAgZm9yICh2YXIgY29sID0gMTsgY29sIDwgY29sczsgY29sKyssIG9mZnNldCsrKSB7XG4gICAgICAgICAgICAgIGNvb3Jkc1twSW5kZXhdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIGNvbHMgLSAxXV07XG4gICAgICAgICAgICAgIGNvb3Jkc1twSW5kZXggKyAxXSA9IGNvb3Jkc01hcFtwc1tvZmZzZXQgLSBjb2xzIC0gMV0gKyAxXTtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDJdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIGNvbHNdXTtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDNdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIGNvbHNdICsgMV07XG4gICAgICAgICAgICAgIGNvb3Jkc1twSW5kZXggKyA0XSA9IGNvb3Jkc01hcFtwc1tvZmZzZXQgLSAxXV07XG4gICAgICAgICAgICAgIGNvb3Jkc1twSW5kZXggKyA1XSA9IGNvb3Jkc01hcFtwc1tvZmZzZXQgLSAxXSArIDFdO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4XSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSBjb2xzIC0gMV1dO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMV0gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gY29scyAtIDFdICsgMV07XG4gICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAyXSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSBjb2xzIC0gMV0gKyAyXTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDNdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHNdXTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDRdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHNdICsgMV07XG4gICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyA1XSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSBjb2xzXSArIDJdO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgNl0gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gMV1dO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgN10gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gMV0gKyAxXTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDhdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIDFdICsgMl07XG4gICAgICAgICAgICAgIGNvb3Jkc1twSW5kZXggKyA2XSA9IGNvb3Jkc1twSW5kZXggKyAyXTtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDddID0gY29vcmRzW3BJbmRleCArIDNdO1xuICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgOF0gPSBjb29yZHNbcEluZGV4ICsgNF07XG4gICAgICAgICAgICAgIGNvb3Jkc1twSW5kZXggKyA5XSA9IGNvb3Jkc1twSW5kZXggKyA1XTtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDEwXSA9IGNvb3Jkc01hcFtwc1tvZmZzZXRdXTtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDExXSA9IGNvb3Jkc01hcFtwc1tvZmZzZXRdICsgMV07XG4gICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyA5XSA9IGNvbG9yc1tjSW5kZXggKyAzXTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDEwXSA9IGNvbG9yc1tjSW5kZXggKyA0XTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDExXSA9IGNvbG9yc1tjSW5kZXggKyA1XTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDEyXSA9IGNvbG9yc1tjSW5kZXggKyA2XTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDEzXSA9IGNvbG9yc1tjSW5kZXggKyA3XTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDE0XSA9IGNvbG9yc1tjSW5kZXggKyA4XTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDE1XSA9IGNvbG9yc01hcFtjc1tvZmZzZXRdXTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDE2XSA9IGNvbG9yc01hcFtjc1tvZmZzZXRdICsgMV07XG4gICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAxN10gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0XSArIDJdO1xuICAgICAgICAgICAgICBwSW5kZXggKz0gMTI7XG4gICAgICAgICAgICAgIGNJbmRleCArPSAxODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwidHJpYW5nbGVzXCI6XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcHMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgY29vcmRzW3BJbmRleF0gPSBjb29yZHNNYXBbcHNbal1dO1xuICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDFdID0gY29vcmRzTWFwW3BzW2pdICsgMV07XG4gICAgICAgICAgICBjb2xvcnNbY0luZGV4XSA9IGNvbG9yc01hcFtjc1tqXV07XG4gICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMV0gPSBjb2xvcnNNYXBbY3Nbal0gKyAxXTtcbiAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAyXSA9IGNvbG9yc01hcFtjc1tqXSArIDJdO1xuICAgICAgICAgICAgcEluZGV4ICs9IDI7XG4gICAgICAgICAgICBjSW5kZXggKz0gMztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICBnbC5jbGVhckNvbG9yKGJhY2tncm91bmRDb2xvclswXSAvIDI1NSwgYmFja2dyb3VuZENvbG9yWzFdIC8gMjU1LCBiYWNrZ3JvdW5kQ29sb3JbMl0gLyAyNTUsIDEuMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XG4gICAgfVxuXG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG4gICAgdmFyIGNvb3Jkc0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb29yZHNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb29yZHMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShjYWNoZS5wb3NpdGlvbkxvY2F0aW9uKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGNhY2hlLnBvc2l0aW9uTG9jYXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgdmFyIGNvbG9yc0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvcnNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShjYWNoZS5jb2xvckxvY2F0aW9uKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGNhY2hlLmNvbG9yTG9jYXRpb24sIDMsIGdsLlVOU0lHTkVEX0JZVEUsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC51bmlmb3JtMmYoY2FjaGUuc2NhbGVMb2NhdGlvbiwgY29udGV4dC5zY2FsZVgsIGNvbnRleHQuc2NhbGVZKTtcbiAgICBnbC51bmlmb3JtMmYoY2FjaGUub2Zmc2V0TG9jYXRpb24sIGNvbnRleHQub2Zmc2V0WCwgY29udGV4dC5vZmZzZXRZKTtcbiAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgY291bnQpO1xuICAgIGdsLmZsdXNoKCk7XG4gICAgZ2wuZGVsZXRlQnVmZmVyKGNvb3Jkc0J1ZmZlcik7XG4gICAgZ2wuZGVsZXRlQnVmZmVyKGNvbG9yc0J1ZmZlcik7XG4gICAgcmV0dXJuIGNhbnZhcztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHJ5SW5pdEdMKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZ2VuZXJhdGVHTCgpO1xuICAgICAgICByZXR1cm4gISFjdXJyZW50R0w7XG4gICAgICB9IGNhdGNoIChleCkge31cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICBjb21wb3NlU01hc2ssXG4gICAgZHJhd0ZpZ3VyZXMsXG5cbiAgICBjbGVhbnVwKCkge1xuICAgICAgaWYgKHNtYXNrQ2FjaGUgJiYgc21hc2tDYWNoZS5jYW52YXMpIHtcbiAgICAgICAgc21hc2tDYWNoZS5jYW52YXMud2lkdGggPSAwO1xuICAgICAgICBzbWFza0NhY2hlLmNhbnZhcy5oZWlnaHQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlndXJlc0NhY2hlICYmIGZpZ3VyZXNDYWNoZS5jYW52YXMpIHtcbiAgICAgICAgZmlndXJlc0NhY2hlLmNhbnZhcy53aWR0aCA9IDA7XG4gICAgICAgIGZpZ3VyZXNDYWNoZS5jYW52YXMuaGVpZ2h0ID0gMDtcbiAgICAgIH1cblxuICAgICAgc21hc2tDYWNoZSA9IG51bGw7XG4gICAgICBmaWd1cmVzQ2FjaGUgPSBudWxsO1xuICAgIH1cblxuICB9O1xufSgpO1xuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFubm90YXRpb25MYXllciA9IHZvaWQgMDtcblxudmFyIF9kaXNwbGF5X3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxKTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5IHtcbiAgc3RhdGljIGNyZWF0ZShwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3Qgc3VidHlwZSA9IHBhcmFtZXRlcnMuZGF0YS5hbm5vdGF0aW9uVHlwZTtcblxuICAgIHN3aXRjaCAoc3VidHlwZSkge1xuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5MSU5LOlxuICAgICAgICByZXR1cm4gbmV3IExpbmtBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5URVhUOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5XSURHRVQ6XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHBhcmFtZXRlcnMuZGF0YS5maWVsZFR5cGU7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiVHhcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dFdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgY2FzZSBcIkJ0blwiOlxuICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuZGF0YS5yYWRpb0J1dHRvbikge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlcnMuZGF0YS5jaGVja0JveCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrYm94V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgY2FzZSBcIkNoXCI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IENob2ljZVdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT1BVUDpcbiAgICAgICAgcmV0dXJuIG5ldyBQb3B1cEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkZSRUVURVhUOlxuICAgICAgICByZXR1cm4gbmV3IEZyZWVUZXh0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuTElORTpcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5lQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuU1FVQVJFOlxuICAgICAgICByZXR1cm4gbmV3IFNxdWFyZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkNJUkNMRTpcbiAgICAgICAgcmV0dXJuIG5ldyBDaXJjbGVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTpcbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5bGluZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkNBUkVUOlxuICAgICAgICByZXR1cm4gbmV3IENhcmV0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuSU5LOlxuICAgICAgICByZXR1cm4gbmV3IElua0Fubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlBPTFlHT046XG4gICAgICAgIHJldHVybiBuZXcgUG9seWdvbkFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVDpcbiAgICAgICAgcmV0dXJuIG5ldyBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU6XG4gICAgICAgIHJldHVybiBuZXcgVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuU1FVSUdHTFk6XG4gICAgICAgIHJldHVybiBuZXcgU3F1aWdnbHlBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TVFJJS0VPVVQ6XG4gICAgICAgIHJldHVybiBuZXcgU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RBTVA6XG4gICAgICAgIHJldHVybiBuZXcgU3RhbXBBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVDpcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxlQXR0YWNobWVudEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbmV3IEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycywgaXNSZW5kZXJhYmxlID0gZmFsc2UsIGlnbm9yZUJvcmRlciA9IGZhbHNlKSB7XG4gICAgdGhpcy5pc1JlbmRlcmFibGUgPSBpc1JlbmRlcmFibGU7XG4gICAgdGhpcy5kYXRhID0gcGFyYW1ldGVycy5kYXRhO1xuICAgIHRoaXMubGF5ZXIgPSBwYXJhbWV0ZXJzLmxheWVyO1xuICAgIHRoaXMucGFnZSA9IHBhcmFtZXRlcnMucGFnZTtcbiAgICB0aGlzLnZpZXdwb3J0ID0gcGFyYW1ldGVycy52aWV3cG9ydDtcbiAgICB0aGlzLmxpbmtTZXJ2aWNlID0gcGFyYW1ldGVycy5saW5rU2VydmljZTtcbiAgICB0aGlzLmRvd25sb2FkTWFuYWdlciA9IHBhcmFtZXRlcnMuZG93bmxvYWRNYW5hZ2VyO1xuICAgIHRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoID0gcGFyYW1ldGVycy5pbWFnZVJlc291cmNlc1BhdGg7XG4gICAgdGhpcy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zID0gcGFyYW1ldGVycy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zO1xuICAgIHRoaXMuc3ZnRmFjdG9yeSA9IHBhcmFtZXRlcnMuc3ZnRmFjdG9yeTtcblxuICAgIGlmIChpc1JlbmRlcmFibGUpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5fY3JlYXRlQ29udGFpbmVyKGlnbm9yZUJvcmRlcik7XG4gICAgfVxuICB9XG5cbiAgX2NyZWF0ZUNvbnRhaW5lcihpZ25vcmVCb3JkZXIgPSBmYWxzZSkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgcGFnZSA9IHRoaXMucGFnZSxcbiAgICAgICAgICB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlY3Rpb25cIik7XG4gICAgbGV0IHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgIGxldCBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtYW5ub3RhdGlvbi1pZFwiLCBkYXRhLmlkKTtcblxuICAgIGNvbnN0IHJlY3QgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoW2RhdGEucmVjdFswXSwgcGFnZS52aWV3WzNdIC0gZGF0YS5yZWN0WzFdICsgcGFnZS52aWV3WzFdLCBkYXRhLnJlY3RbMl0sIHBhZ2Uudmlld1szXSAtIGRhdGEucmVjdFszXSArIHBhZ2Uudmlld1sxXV0pO1xuXG4gICAgY29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9IGBtYXRyaXgoJHt2aWV3cG9ydC50cmFuc2Zvcm0uam9pbihcIixcIil9KWA7XG4gICAgY29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGAtJHtyZWN0WzBdfXB4IC0ke3JlY3RbMV19cHhgO1xuXG4gICAgaWYgKCFpZ25vcmVCb3JkZXIgJiYgZGF0YS5ib3JkZXJTdHlsZS53aWR0aCA+IDApIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJXaWR0aCA9IGAke2RhdGEuYm9yZGVyU3R5bGUud2lkdGh9cHhgO1xuXG4gICAgICBpZiAoZGF0YS5ib3JkZXJTdHlsZS5zdHlsZSAhPT0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkUpIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCAtIDIgKiBkYXRhLmJvcmRlclN0eWxlLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgLSAyICogZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaG9yaXpvbnRhbFJhZGl1cyA9IGRhdGEuYm9yZGVyU3R5bGUuaG9yaXpvbnRhbENvcm5lclJhZGl1cztcbiAgICAgIGNvbnN0IHZlcnRpY2FsUmFkaXVzID0gZGF0YS5ib3JkZXJTdHlsZS52ZXJ0aWNhbENvcm5lclJhZGl1cztcblxuICAgICAgaWYgKGhvcml6b250YWxSYWRpdXMgPiAwIHx8IHZlcnRpY2FsUmFkaXVzID4gMCkge1xuICAgICAgICBjb25zdCByYWRpdXMgPSBgJHtob3Jpem9udGFsUmFkaXVzfXB4IC8gJHt2ZXJ0aWNhbFJhZGl1c31weGA7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJSYWRpdXMgPSByYWRpdXM7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YS5ib3JkZXJTdHlsZS5zdHlsZSkge1xuICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ6XG4gICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlclN0eWxlID0gXCJzb2xpZFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ6XG4gICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlclN0eWxlID0gXCJkYXNoZWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuQkVWRUxFRDpcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbmltcGxlbWVudGVkIGJvcmRlciBzdHlsZTogYmV2ZWxlZFwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ6XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGluc2V0XCIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkU6XG4gICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlckJvdHRvbVN0eWxlID0gXCJzb2xpZFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNvbG9yKSB7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJDb2xvciA9IF91dGlsLlV0aWwubWFrZUNzc1JnYihkYXRhLmNvbG9yWzBdIHwgMCwgZGF0YS5jb2xvclsxXSB8IDAsIGRhdGEuY29sb3JbMl0gfCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJXaWR0aCA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSBgJHtyZWN0WzBdfXB4YDtcbiAgICBjb250YWluZXIuc3R5bGUudG9wID0gYCR7cmVjdFsxXX1weGA7XG4gICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICBfY3JlYXRlUG9wdXAoY29udGFpbmVyLCB0cmlnZ2VyLCBkYXRhKSB7XG4gICAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgICB0cmlnZ2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRyaWdnZXIuc3R5bGUuaGVpZ2h0ID0gY29udGFpbmVyLnN0eWxlLmhlaWdodDtcbiAgICAgIHRyaWdnZXIuc3R5bGUud2lkdGggPSBjb250YWluZXIuc3R5bGUud2lkdGg7XG4gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodHJpZ2dlcik7XG4gICAgfVxuXG4gICAgY29uc3QgcG9wdXBFbGVtZW50ID0gbmV3IFBvcHVwRWxlbWVudCh7XG4gICAgICBjb250YWluZXIsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgY29sb3I6IGRhdGEuY29sb3IsXG4gICAgICB0aXRsZTogZGF0YS50aXRsZSxcbiAgICAgIG1vZGlmaWNhdGlvbkRhdGU6IGRhdGEubW9kaWZpY2F0aW9uRGF0ZSxcbiAgICAgIGNvbnRlbnRzOiBkYXRhLmNvbnRlbnRzLFxuICAgICAgaGlkZVdyYXBwZXI6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCBwb3B1cCA9IHBvcHVwRWxlbWVudC5yZW5kZXIoKTtcbiAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gY29udGFpbmVyLnN0eWxlLndpZHRoO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwb3B1cCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgQW5ub3RhdGlvbkVsZW1lbnQucmVuZGVyYCBjYWxsZWRcIik7XG4gIH1cblxufVxuXG5jbGFzcyBMaW5rQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEudXJsIHx8IHBhcmFtZXRlcnMuZGF0YS5kZXN0IHx8IHBhcmFtZXRlcnMuZGF0YS5hY3Rpb24pO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJsaW5rQW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBsaW5rU2VydmljZVxuICAgIH0gPSB0aGlzO1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcblxuICAgIGlmIChkYXRhLnVybCkge1xuICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmFkZExpbmtBdHRyaWJ1dGVzKShsaW5rLCB7XG4gICAgICAgIHVybDogZGF0YS51cmwsXG4gICAgICAgIHRhcmdldDogZGF0YS5uZXdXaW5kb3cgPyBfZGlzcGxheV91dGlscy5MaW5rVGFyZ2V0LkJMQU5LIDogbGlua1NlcnZpY2UuZXh0ZXJuYWxMaW5rVGFyZ2V0LFxuICAgICAgICByZWw6IGxpbmtTZXJ2aWNlLmV4dGVybmFsTGlua1JlbCxcbiAgICAgICAgZW5hYmxlZDogbGlua1NlcnZpY2UuZXh0ZXJuYWxMaW5rRW5hYmxlZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChkYXRhLmFjdGlvbikge1xuICAgICAgdGhpcy5fYmluZE5hbWVkQWN0aW9uKGxpbmssIGRhdGEuYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYmluZExpbmsobGluaywgZGF0YS5kZXN0KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxuICBfYmluZExpbmsobGluaywgZGVzdGluYXRpb24pIHtcbiAgICBsaW5rLmhyZWYgPSB0aGlzLmxpbmtTZXJ2aWNlLmdldERlc3RpbmF0aW9uSGFzaChkZXN0aW5hdGlvbik7XG5cbiAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdGhpcy5saW5rU2VydmljZS5uYXZpZ2F0ZVRvKGRlc3RpbmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgIGxpbmsuY2xhc3NOYW1lID0gXCJpbnRlcm5hbExpbmtcIjtcbiAgICB9XG4gIH1cblxuICBfYmluZE5hbWVkQWN0aW9uKGxpbmssIGFjdGlvbikge1xuICAgIGxpbmsuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKFwiXCIpO1xuXG4gICAgbGluay5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5saW5rU2VydmljZS5leGVjdXRlTmFtZWRBY3Rpb24oYWN0aW9uKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgbGluay5jbGFzc05hbWUgPSBcImludGVybmFsTGlua1wiO1xuICB9XG5cbn1cblxuY2xhc3MgVGV4dEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJ0ZXh0QW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IGltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICBpbWFnZS5zdHlsZS5oZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQ7XG4gICAgaW1hZ2Uuc3R5bGUud2lkdGggPSB0aGlzLmNvbnRhaW5lci5zdHlsZS53aWR0aDtcbiAgICBpbWFnZS5zcmMgPSB0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCArIFwiYW5ub3RhdGlvbi1cIiArIHRoaXMuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgKyBcIi5zdmdcIjtcbiAgICBpbWFnZS5hbHQgPSBcIlt7e3R5cGV9fSBBbm5vdGF0aW9uXVwiO1xuICAgIGltYWdlLmRhdGFzZXQubDEwbklkID0gXCJ0ZXh0X2Fubm90YXRpb25fdHlwZVwiO1xuICAgIGltYWdlLmRhdGFzZXQubDEwbkFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICB0eXBlOiB0aGlzLmRhdGEubmFtZVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBpbWFnZSwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChpbWFnZSk7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXMgfHwgIXBhcmFtZXRlcnMuZGF0YS5oYXNBcHBlYXJhbmNlICYmICEhcGFyYW1ldGVycy5kYXRhLmZpZWxkVmFsdWU7XG4gICAgc3VwZXIocGFyYW1ldGVycywgaXNSZW5kZXJhYmxlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBURVhUX0FMSUdOTUVOVCA9IFtcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiXTtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcInRleHRXaWRnZXRBbm5vdGF0aW9uXCI7XG4gICAgbGV0IGVsZW1lbnQgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucmVuZGVySW50ZXJhY3RpdmVGb3Jtcykge1xuICAgICAgaWYgKHRoaXMuZGF0YS5tdWx0aUxpbmUpIHtcbiAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuZGF0YS5maWVsZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgZWxlbWVudC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgdGhpcy5kYXRhLmZpZWxkVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50LmRpc2FibGVkID0gdGhpcy5kYXRhLnJlYWRPbmx5O1xuICAgICAgZWxlbWVudC5uYW1lID0gdGhpcy5kYXRhLmZpZWxkTmFtZTtcblxuICAgICAgaWYgKHRoaXMuZGF0YS5tYXhMZW4gIT09IG51bGwpIHtcbiAgICAgICAgZWxlbWVudC5tYXhMZW5ndGggPSB0aGlzLmRhdGEubWF4TGVuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kYXRhLmNvbWIpIHtcbiAgICAgICAgY29uc3QgZmllbGRXaWR0aCA9IHRoaXMuZGF0YS5yZWN0WzJdIC0gdGhpcy5kYXRhLnJlY3RbMF07XG4gICAgICAgIGNvbnN0IGNvbWJXaWR0aCA9IGZpZWxkV2lkdGggLyB0aGlzLmRhdGEubWF4TGVuO1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjb21iXCIpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxldHRlclNwYWNpbmcgPSBgY2FsYygke2NvbWJXaWR0aH1weCAtIDFjaClgO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZTtcbiAgICAgIGVsZW1lbnQuc3R5bGUudmVydGljYWxBbGlnbiA9IFwibWlkZGxlXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcInRhYmxlLWNlbGxcIjtcbiAgICAgIGxldCBmb250ID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuZGF0YS5mb250UmVmTmFtZSAmJiB0aGlzLnBhZ2UuY29tbW9uT2Jqcy5oYXModGhpcy5kYXRhLmZvbnRSZWZOYW1lKSkge1xuICAgICAgICBmb250ID0gdGhpcy5wYWdlLmNvbW1vbk9ianMuZ2V0KHRoaXMuZGF0YS5mb250UmVmTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldFRleHRTdHlsZShlbGVtZW50LCBmb250KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhLnRleHRBbGlnbm1lbnQgIT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUudGV4dEFsaWduID0gVEVYVF9BTElHTk1FTlRbdGhpcy5kYXRhLnRleHRBbGlnbm1lbnRdO1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG4gIF9zZXRUZXh0U3R5bGUoZWxlbWVudCwgZm9udCkge1xuICAgIGNvbnN0IHN0eWxlID0gZWxlbWVudC5zdHlsZTtcbiAgICBzdHlsZS5mb250U2l6ZSA9IGAke3RoaXMuZGF0YS5mb250U2l6ZX1weGA7XG4gICAgc3R5bGUuZGlyZWN0aW9uID0gdGhpcy5kYXRhLmZvbnREaXJlY3Rpb24gPCAwID8gXCJydGxcIiA6IFwibHRyXCI7XG5cbiAgICBpZiAoIWZvbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgYm9sZCA9IFwibm9ybWFsXCI7XG5cbiAgICBpZiAoZm9udC5ibGFjaykge1xuICAgICAgYm9sZCA9IFwiOTAwXCI7XG4gICAgfSBlbHNlIGlmIChmb250LmJvbGQpIHtcbiAgICAgIGJvbGQgPSBcImJvbGRcIjtcbiAgICB9XG5cbiAgICBzdHlsZS5mb250V2VpZ2h0ID0gYm9sZDtcbiAgICBzdHlsZS5mb250U3R5bGUgPSBmb250Lml0YWxpYyA/IFwiaXRhbGljXCIgOiBcIm5vcm1hbFwiO1xuICAgIGNvbnN0IGZvbnRGYW1pbHkgPSBmb250LmxvYWRlZE5hbWUgPyBgXCIke2ZvbnQubG9hZGVkTmFtZX1cIiwgYCA6IFwiXCI7XG4gICAgY29uc3QgZmFsbGJhY2tOYW1lID0gZm9udC5mYWxsYmFja05hbWUgfHwgXCJIZWx2ZXRpY2EsIHNhbnMtc2VyaWZcIjtcbiAgICBzdHlsZS5mb250RmFtaWx5ID0gZm9udEZhbWlseSArIGZhbGxiYWNrTmFtZTtcbiAgfVxuXG59XG5cbmNsYXNzIENoZWNrYm94V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXMpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBjaGVja0JveFwiO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgZWxlbWVudC5kaXNhYmxlZCA9IHRoaXMuZGF0YS5yZWFkT25seTtcbiAgICBlbGVtZW50LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgZWxlbWVudC5uYW1lID0gdGhpcy5kYXRhLmZpZWxkTmFtZTtcblxuICAgIGlmICh0aGlzLmRhdGEuZmllbGRWYWx1ZSAmJiB0aGlzLmRhdGEuZmllbGRWYWx1ZSAhPT0gXCJPZmZcIikge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXMpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiByYWRpb0J1dHRvblwiO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgZWxlbWVudC5kaXNhYmxlZCA9IHRoaXMuZGF0YS5yZWFkT25seTtcbiAgICBlbGVtZW50LnR5cGUgPSBcInJhZGlvXCI7XG4gICAgZWxlbWVudC5uYW1lID0gdGhpcy5kYXRhLmZpZWxkTmFtZTtcblxuICAgIGlmICh0aGlzLmRhdGEuZmllbGRWYWx1ZSA9PT0gdGhpcy5kYXRhLmJ1dHRvblZhbHVlKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImNoZWNrZWRcIiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgTGlua0Fubm90YXRpb25FbGVtZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHN1cGVyLnJlbmRlcigpO1xuICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSBcImJ1dHRvbldpZGdldEFubm90YXRpb24gcHVzaEJ1dHRvblwiO1xuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHBhcmFtZXRlcnMucmVuZGVySW50ZXJhY3RpdmVGb3Jtcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJjaG9pY2VXaWRnZXRBbm5vdGF0aW9uXCI7XG4gICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIik7XG4gICAgc2VsZWN0RWxlbWVudC5kaXNhYmxlZCA9IHRoaXMuZGF0YS5yZWFkT25seTtcbiAgICBzZWxlY3RFbGVtZW50Lm5hbWUgPSB0aGlzLmRhdGEuZmllbGROYW1lO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuY29tYm8pIHtcbiAgICAgIHNlbGVjdEVsZW1lbnQuc2l6ZSA9IHRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aDtcblxuICAgICAgaWYgKHRoaXMuZGF0YS5tdWx0aVNlbGVjdCkge1xuICAgICAgICBzZWxlY3RFbGVtZW50Lm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB0aGlzLmRhdGEub3B0aW9ucykge1xuICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XG4gICAgICBvcHRpb25FbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9uLmRpc3BsYXlWYWx1ZTtcbiAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBvcHRpb24uZXhwb3J0VmFsdWU7XG5cbiAgICAgIGlmICh0aGlzLmRhdGEuZmllbGRWYWx1ZS5pbmNsdWRlcyhvcHRpb24uZGlzcGxheVZhbHVlKSkge1xuICAgICAgICBvcHRpb25FbGVtZW50LnNldEF0dHJpYnV0ZShcInNlbGVjdGVkXCIsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3RFbGVtZW50LmFwcGVuZENoaWxkKG9wdGlvbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGVjdEVsZW1lbnQpO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IElHTk9SRV9UWVBFUyA9IFtcIkxpbmVcIiwgXCJTcXVhcmVcIiwgXCJDaXJjbGVcIiwgXCJQb2x5TGluZVwiLCBcIlBvbHlnb25cIiwgXCJJbmtcIl07XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJwb3B1cEFubm90YXRpb25cIjtcblxuICAgIGlmIChJR05PUkVfVFlQRVMuaW5jbHVkZXModGhpcy5kYXRhLnBhcmVudFR5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgW2RhdGEtYW5ub3RhdGlvbi1pZD1cIiR7dGhpcy5kYXRhLnBhcmVudElkfVwiXWA7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMubGF5ZXIucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoIXBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3B1cCA9IG5ldyBQb3B1cEVsZW1lbnQoe1xuICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgIHRyaWdnZXI6IHBhcmVudEVsZW1lbnQsXG4gICAgICBjb2xvcjogdGhpcy5kYXRhLmNvbG9yLFxuICAgICAgdGl0bGU6IHRoaXMuZGF0YS50aXRsZSxcbiAgICAgIG1vZGlmaWNhdGlvbkRhdGU6IHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlLFxuICAgICAgY29udGVudHM6IHRoaXMuZGF0YS5jb250ZW50c1xuICAgIH0pO1xuICAgIGNvbnN0IHBhcmVudExlZnQgPSBwYXJzZUZsb2F0KHBhcmVudEVsZW1lbnQuc3R5bGUubGVmdCk7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBwYXJzZUZsb2F0KHBhcmVudEVsZW1lbnQuc3R5bGUud2lkdGgpO1xuICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGAtJHtwYXJlbnRMZWZ0ICsgcGFyZW50V2lkdGh9cHggLSR7cGFyZW50RWxlbWVudC5zdHlsZS50b3B9YDtcbiAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gYCR7cGFyZW50TGVmdCArIHBhcmVudFdpZHRofXB4YDtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChwb3B1cC5yZW5kZXIoKSk7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUG9wdXBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHRoaXMuY29udGFpbmVyID0gcGFyYW1ldGVycy5jb250YWluZXI7XG4gICAgdGhpcy50cmlnZ2VyID0gcGFyYW1ldGVycy50cmlnZ2VyO1xuICAgIHRoaXMuY29sb3IgPSBwYXJhbWV0ZXJzLmNvbG9yO1xuICAgIHRoaXMudGl0bGUgPSBwYXJhbWV0ZXJzLnRpdGxlO1xuICAgIHRoaXMubW9kaWZpY2F0aW9uRGF0ZSA9IHBhcmFtZXRlcnMubW9kaWZpY2F0aW9uRGF0ZTtcbiAgICB0aGlzLmNvbnRlbnRzID0gcGFyYW1ldGVycy5jb250ZW50cztcbiAgICB0aGlzLmhpZGVXcmFwcGVyID0gcGFyYW1ldGVycy5oaWRlV3JhcHBlciB8fCBmYWxzZTtcbiAgICB0aGlzLnBpbm5lZCA9IGZhbHNlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IEJBQ0tHUk9VTkRfRU5MSUdIVCA9IDAuNztcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB3cmFwcGVyLmNsYXNzTmFtZSA9IFwicG9wdXBXcmFwcGVyXCI7XG4gICAgdGhpcy5oaWRlRWxlbWVudCA9IHRoaXMuaGlkZVdyYXBwZXIgPyB3cmFwcGVyIDogdGhpcy5jb250YWluZXI7XG4gICAgdGhpcy5oaWRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJoaWRkZW5cIiwgdHJ1ZSk7XG4gICAgY29uc3QgcG9wdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHBvcHVwLmNsYXNzTmFtZSA9IFwicG9wdXBcIjtcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuY29sb3I7XG5cbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIGNvbnN0IHIgPSBCQUNLR1JPVU5EX0VOTElHSFQgKiAoMjU1IC0gY29sb3JbMF0pICsgY29sb3JbMF07XG4gICAgICBjb25zdCBnID0gQkFDS0dST1VORF9FTkxJR0hUICogKDI1NSAtIGNvbG9yWzFdKSArIGNvbG9yWzFdO1xuICAgICAgY29uc3QgYiA9IEJBQ0tHUk9VTkRfRU5MSUdIVCAqICgyNTUgLSBjb2xvclsyXSkgKyBjb2xvclsyXTtcbiAgICAgIHBvcHVwLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IF91dGlsLlV0aWwubWFrZUNzc1JnYihyIHwgMCwgZyB8IDAsIGIgfCAwKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoMVwiKTtcbiAgICB0aXRsZS50ZXh0Q29udGVudCA9IHRoaXMudGl0bGU7XG4gICAgcG9wdXAuYXBwZW5kQ2hpbGQodGl0bGUpO1xuXG4gICAgY29uc3QgZGF0ZU9iamVjdCA9IF9kaXNwbGF5X3V0aWxzLlBERkRhdGVTdHJpbmcudG9EYXRlT2JqZWN0KHRoaXMubW9kaWZpY2F0aW9uRGF0ZSk7XG5cbiAgICBpZiAoZGF0ZU9iamVjdCkge1xuICAgICAgY29uc3QgbW9kaWZpY2F0aW9uRGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgbW9kaWZpY2F0aW9uRGF0ZS50ZXh0Q29udGVudCA9IFwie3tkYXRlfX0sIHt7dGltZX19XCI7XG4gICAgICBtb2RpZmljYXRpb25EYXRlLmRhdGFzZXQubDEwbklkID0gXCJhbm5vdGF0aW9uX2RhdGVfc3RyaW5nXCI7XG4gICAgICBtb2RpZmljYXRpb25EYXRlLmRhdGFzZXQubDEwbkFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRhdGU6IGRhdGVPYmplY3QudG9Mb2NhbGVEYXRlU3RyaW5nKCksXG4gICAgICAgIHRpbWU6IGRhdGVPYmplY3QudG9Mb2NhbGVUaW1lU3RyaW5nKClcbiAgICAgIH0pO1xuICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQobW9kaWZpY2F0aW9uRGF0ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudHMgPSB0aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzKTtcblxuICAgIHBvcHVwLmFwcGVuZENoaWxkKGNvbnRlbnRzKTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX3RvZ2dsZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCB0aGlzLl9zaG93LmJpbmQodGhpcywgZmFsc2UpKTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsIHRoaXMuX2hpZGUuYmluZCh0aGlzLCBmYWxzZSkpO1xuICAgIHBvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oaWRlLmJpbmQodGhpcywgdHJ1ZSkpO1xuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQocG9wdXApO1xuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG5cbiAgX2Zvcm1hdENvbnRlbnRzKGNvbnRlbnRzKSB7XG4gICAgY29uc3QgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudHMuc3BsaXQoLyg/Olxcclxcbj98XFxuKS8pO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGluZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2ldO1xuICAgICAgcC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lKSk7XG5cbiAgICAgIGlmIChpIDwgaWkgLSAxKSB7XG4gICAgICAgIHAuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIF90b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMucGlubmVkKSB7XG4gICAgICB0aGlzLl9oaWRlKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zaG93KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIF9zaG93KHBpbiA9IGZhbHNlKSB7XG4gICAgaWYgKHBpbikge1xuICAgICAgdGhpcy5waW5uZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVFbGVtZW50Lmhhc0F0dHJpYnV0ZShcImhpZGRlblwiKSkge1xuICAgICAgdGhpcy5oaWRlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XG4gICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXggKz0gMTtcbiAgICB9XG4gIH1cblxuICBfaGlkZSh1bnBpbiA9IHRydWUpIHtcbiAgICBpZiAodW5waW4pIHtcbiAgICAgIHRoaXMucGlubmVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhpZGVFbGVtZW50Lmhhc0F0dHJpYnV0ZShcImhpZGRlblwiKSAmJiAhdGhpcy5waW5uZWQpIHtcbiAgICAgIHRoaXMuaGlkZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIHRydWUpO1xuICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4IC09IDE7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiZnJlZVRleHRBbm5vdGF0aW9uXCI7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgTGluZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJsaW5lQW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3Qgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgY29uc3QgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgY29uc3QgbGluZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmxpbmVcIik7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoXCJ4MVwiLCBkYXRhLnJlY3RbMl0gLSBkYXRhLmxpbmVDb29yZGluYXRlc1swXSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBkYXRhLnJlY3RbM10gLSBkYXRhLmxpbmVDb29yZGluYXRlc1sxXSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoXCJ4MlwiLCBkYXRhLnJlY3RbMl0gLSBkYXRhLmxpbmVDb29yZGluYXRlc1syXSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBkYXRhLnJlY3RbM10gLSBkYXRhLmxpbmVDb29yZGluYXRlc1szXSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgZGF0YS5ib3JkZXJTdHlsZS53aWR0aCB8fCAxKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgIHN2Zy5hcHBlbmRDaGlsZChsaW5lKTtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcblxuICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBsaW5lLCBkYXRhKTtcblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIFNxdWFyZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJzcXVhcmVBbm5vdGF0aW9uXCI7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICBjb25zdCBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgY29uc3Qgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7XG4gICAgY29uc3Qgc3F1YXJlID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICBzcXVhcmUuc2V0QXR0cmlidXRlKFwieFwiLCBib3JkZXJXaWR0aCAvIDIpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJ5XCIsIGJvcmRlcldpZHRoIC8gMik7XG4gICAgc3F1YXJlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHdpZHRoIC0gYm9yZGVyV2lkdGgpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgaGVpZ2h0IC0gYm9yZGVyV2lkdGgpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgYm9yZGVyV2lkdGggfHwgMSk7XG4gICAgc3F1YXJlLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgICBzdmcuYXBwZW5kQ2hpbGQoc3F1YXJlKTtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcblxuICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBzcXVhcmUsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50cyk7XG4gICAgc3VwZXIocGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImNpcmNsZUFubm90YXRpb25cIjtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGNvbnN0IHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgIGNvbnN0IGhlaWdodCA9IGRhdGEucmVjdFszXSAtIGRhdGEucmVjdFsxXTtcbiAgICBjb25zdCBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICBjb25zdCBjaXJjbGUgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzplbGxpcHNlXCIpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoXCJjeFwiLCB3aWR0aCAvIDIpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoXCJjeVwiLCBoZWlnaHQgLyAyKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKFwicnhcIiwgd2lkdGggLyAyIC0gYm9yZGVyV2lkdGggLyAyKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKFwicnlcIiwgaGVpZ2h0IC8gMiAtIGJvcmRlcldpZHRoIC8gMik7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBib3JkZXJXaWR0aCB8fCAxKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJub25lXCIpO1xuICAgIHN2Zy5hcHBlbmRDaGlsZChjaXJjbGUpO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpO1xuXG4gICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIGNpcmNsZSwgZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBQb2x5bGluZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSk7XG4gICAgdGhpcy5jb250YWluZXJDbGFzc05hbWUgPSBcInBvbHlsaW5lQW5ub3RhdGlvblwiO1xuICAgIHRoaXMuc3ZnRWxlbWVudE5hbWUgPSBcInN2Zzpwb2x5bGluZVwiO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3Qgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgY29uc3QgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgbGV0IHBvaW50cyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjb29yZGluYXRlIG9mIGRhdGEudmVydGljZXMpIHtcbiAgICAgIGNvbnN0IHggPSBjb29yZGluYXRlLnggLSBkYXRhLnJlY3RbMF07XG4gICAgICBjb25zdCB5ID0gZGF0YS5yZWN0WzNdIC0gY29vcmRpbmF0ZS55O1xuICAgICAgcG9pbnRzLnB1c2goeCArIFwiLFwiICsgeSk7XG4gICAgfVxuXG4gICAgcG9pbnRzID0gcG9pbnRzLmpvaW4oXCIgXCIpO1xuICAgIGNvbnN0IHBvbHlsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7XG4gICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKFwicG9pbnRzXCIsIHBvaW50cyk7XG4gICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIGRhdGEuYm9yZGVyU3R5bGUud2lkdGggfHwgMSk7XG4gICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgc3ZnLmFwcGVuZENoaWxkKHBvbHlsaW5lKTtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcblxuICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBwb2x5bGluZSwgZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBQb2x5Z29uQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBQb2x5bGluZUFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lID0gXCJwb2x5Z29uQW5ub3RhdGlvblwiO1xuICAgIHRoaXMuc3ZnRWxlbWVudE5hbWUgPSBcInN2Zzpwb2x5Z29uXCI7XG4gIH1cblxufVxuXG5jbGFzcyBDYXJldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJjYXJldEFubm90YXRpb25cIjtcblxuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgbnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBJbmtBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpO1xuICAgIHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lID0gXCJpbmtBbm5vdGF0aW9uXCI7XG4gICAgdGhpcy5zdmdFbGVtZW50TmFtZSA9IFwic3ZnOnBvbHlsaW5lXCI7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gdGhpcy5jb250YWluZXJDbGFzc05hbWU7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICBjb25zdCBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgY29uc3Qgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGZvciAoY29uc3QgaW5rTGlzdCBvZiBkYXRhLmlua0xpc3RzKSB7XG4gICAgICBsZXQgcG9pbnRzID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgY29vcmRpbmF0ZSBvZiBpbmtMaXN0KSB7XG4gICAgICAgIGNvbnN0IHggPSBjb29yZGluYXRlLnggLSBkYXRhLnJlY3RbMF07XG4gICAgICAgIGNvbnN0IHkgPSBkYXRhLnJlY3RbM10gLSBjb29yZGluYXRlLnk7XG4gICAgICAgIHBvaW50cy5wdXNoKGAke3h9LCR7eX1gKTtcbiAgICAgIH1cblxuICAgICAgcG9pbnRzID0gcG9pbnRzLmpvaW4oXCIgXCIpO1xuICAgICAgY29uc3QgcG9seWxpbmUgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCh0aGlzLnN2Z0VsZW1lbnROYW1lKTtcbiAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInBvaW50c1wiLCBwb2ludHMpO1xuICAgICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIGRhdGEuYm9yZGVyU3R5bGUud2lkdGggfHwgMSk7XG4gICAgICBwb2x5bGluZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKTtcbiAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJub25lXCIpO1xuXG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgcG9seWxpbmUsIGRhdGEpO1xuXG4gICAgICBzdmcuYXBwZW5kQ2hpbGQocG9seWxpbmUpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIEhpZ2hsaWdodEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJoaWdobGlnaHRBbm5vdGF0aW9uXCI7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50cyk7XG4gICAgc3VwZXIocGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcInVuZGVybGluZUFubm90YXRpb25cIjtcblxuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgbnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTcXVpZ2dseUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJzcXVpZ2dseUFubm90YXRpb25cIjtcblxuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgbnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTdHJpa2VPdXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwic3RyaWtlb3V0QW5ub3RhdGlvblwiO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBudWxsLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50cyk7XG4gICAgc3VwZXIocGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcInN0YW1wQW5ub3RhdGlvblwiO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBudWxsLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB0cnVlKTtcbiAgICBjb25zdCB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGNvbnRlbnRcbiAgICB9ID0gdGhpcy5kYXRhLmZpbGU7XG4gICAgdGhpcy5maWxlbmFtZSA9ICgwLCBfZGlzcGxheV91dGlscy5nZXRGaWxlbmFtZUZyb21VcmwpKGZpbGVuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuXG4gICAgaWYgKHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXMpIHtcbiAgICAgIHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXMuZGlzcGF0Y2goXCJmaWxlYXR0YWNobWVudGFubm90YXRpb25cIiwge1xuICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgIGlkOiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGZpbGVuYW1lKSxcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIGNvbnRlbnRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImZpbGVBdHRhY2htZW50QW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IHRyaWdnZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRyaWdnZXIuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jb250YWluZXIuc3R5bGUuaGVpZ2h0O1xuICAgIHRyaWdnZXIuc3R5bGUud2lkdGggPSB0aGlzLmNvbnRhaW5lci5zdHlsZS53aWR0aDtcbiAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJkYmxjbGlja1wiLCB0aGlzLl9kb3dubG9hZC5iaW5kKHRoaXMpKTtcblxuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwICYmICh0aGlzLmRhdGEudGl0bGUgfHwgdGhpcy5kYXRhLmNvbnRlbnRzKSkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIHRyaWdnZXIsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodHJpZ2dlcik7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbiAgX2Rvd25sb2FkKCkge1xuICAgIGlmICghdGhpcy5kb3dubG9hZE1hbmFnZXIpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIkRvd25sb2FkIGNhbm5vdCBiZSBzdGFydGVkIGR1ZSB0byB1bmF2YWlsYWJsZSBkb3dubG9hZCBtYW5hZ2VyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRGF0YSh0aGlzLmNvbnRlbnQsIHRoaXMuZmlsZW5hbWUsIFwiXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQW5ub3RhdGlvbkxheWVyIHtcbiAgc3RhdGljIHJlbmRlcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3Qgc29ydGVkQW5ub3RhdGlvbnMgPSBbXSxcbiAgICAgICAgICBwb3B1cEFubm90YXRpb25zID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgcGFyYW1ldGVycy5hbm5vdGF0aW9ucykge1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5hbm5vdGF0aW9uVHlwZSA9PT0gX3V0aWwuQW5ub3RhdGlvblR5cGUuUE9QVVApIHtcbiAgICAgICAgcG9wdXBBbm5vdGF0aW9ucy5wdXNoKGRhdGEpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgc29ydGVkQW5ub3RhdGlvbnMucHVzaChkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAocG9wdXBBbm5vdGF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHNvcnRlZEFubm90YXRpb25zLnB1c2goLi4ucG9wdXBBbm5vdGF0aW9ucyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIHNvcnRlZEFubm90YXRpb25zKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGxheWVyOiBwYXJhbWV0ZXJzLmRpdixcbiAgICAgICAgcGFnZTogcGFyYW1ldGVycy5wYWdlLFxuICAgICAgICB2aWV3cG9ydDogcGFyYW1ldGVycy52aWV3cG9ydCxcbiAgICAgICAgbGlua1NlcnZpY2U6IHBhcmFtZXRlcnMubGlua1NlcnZpY2UsXG4gICAgICAgIGRvd25sb2FkTWFuYWdlcjogcGFyYW1ldGVycy5kb3dubG9hZE1hbmFnZXIsXG4gICAgICAgIGltYWdlUmVzb3VyY2VzUGF0aDogcGFyYW1ldGVycy5pbWFnZVJlc291cmNlc1BhdGggfHwgXCJcIixcbiAgICAgICAgcmVuZGVySW50ZXJhY3RpdmVGb3JtczogcGFyYW1ldGVycy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zIHx8IGZhbHNlLFxuICAgICAgICBzdmdGYWN0b3J5OiBuZXcgX2Rpc3BsYXlfdXRpbHMuRE9NU1ZHRmFjdG9yeSgpXG4gICAgICB9KTtcblxuICAgICAgaWYgKGVsZW1lbnQuaXNSZW5kZXJhYmxlKSB7XG4gICAgICAgIHBhcmFtZXRlcnMuZGl2LmFwcGVuZENoaWxkKGVsZW1lbnQucmVuZGVyKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGUocGFyYW1ldGVycykge1xuICAgIGZvciAoY29uc3QgZGF0YSBvZiBwYXJhbWV0ZXJzLmFubm90YXRpb25zKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gcGFyYW1ldGVycy5kaXYucXVlcnlTZWxlY3RvcihgW2RhdGEtYW5ub3RhdGlvbi1pZD1cIiR7ZGF0YS5pZH1cIl1gKTtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgbWF0cml4KCR7cGFyYW1ldGVycy52aWV3cG9ydC50cmFuc2Zvcm0uam9pbihcIixcIil9KWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyYW1ldGVycy5kaXYucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Bbm5vdGF0aW9uTGF5ZXIgPSBBbm5vdGF0aW9uTGF5ZXI7XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVuZGVyVGV4dExheWVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgcmVuZGVyVGV4dExheWVyID0gZnVuY3Rpb24gcmVuZGVyVGV4dExheWVyQ2xvc3VyZSgpIHtcbiAgdmFyIE1BWF9URVhUX0RJVlNfVE9fUkVOREVSID0gMTAwMDAwO1xuICB2YXIgTm9uV2hpdGVzcGFjZVJlZ2V4cCA9IC9cXFMvO1xuXG4gIGZ1bmN0aW9uIGlzQWxsV2hpdGVzcGFjZShzdHIpIHtcbiAgICByZXR1cm4gIU5vbldoaXRlc3BhY2VSZWdleHAudGVzdChzdHIpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kVGV4dCh0YXNrLCBnZW9tLCBzdHlsZXMpIHtcbiAgICB2YXIgdGV4dERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIHZhciB0ZXh0RGl2UHJvcGVydGllcyA9IHtcbiAgICAgIGFuZ2xlOiAwLFxuICAgICAgY2FudmFzV2lkdGg6IDAsXG4gICAgICBpc1doaXRlc3BhY2U6IGZhbHNlLFxuICAgICAgb3JpZ2luYWxUcmFuc2Zvcm06IG51bGwsXG4gICAgICBwYWRkaW5nQm90dG9tOiAwLFxuICAgICAgcGFkZGluZ0xlZnQ6IDAsXG4gICAgICBwYWRkaW5nUmlnaHQ6IDAsXG4gICAgICBwYWRkaW5nVG9wOiAwLFxuICAgICAgc2NhbGU6IDFcbiAgICB9O1xuXG4gICAgdGFzay5fdGV4dERpdnMucHVzaCh0ZXh0RGl2KTtcblxuICAgIGlmIChpc0FsbFdoaXRlc3BhY2UoZ2VvbS5zdHIpKSB7XG4gICAgICB0ZXh0RGl2UHJvcGVydGllcy5pc1doaXRlc3BhY2UgPSB0cnVlO1xuXG4gICAgICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQodGV4dERpdiwgdGV4dERpdlByb3BlcnRpZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHR4ID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0odGFzay5fdmlld3BvcnQudHJhbnNmb3JtLCBnZW9tLnRyYW5zZm9ybSk7XG5cbiAgICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKHR4WzFdLCB0eFswXSk7XG4gICAgdmFyIHN0eWxlID0gc3R5bGVzW2dlb20uZm9udE5hbWVdO1xuXG4gICAgaWYgKHN0eWxlLnZlcnRpY2FsKSB7XG4gICAgICBhbmdsZSArPSBNYXRoLlBJIC8gMjtcbiAgICB9XG5cbiAgICB2YXIgZm9udEhlaWdodCA9IE1hdGguc3FydCh0eFsyXSAqIHR4WzJdICsgdHhbM10gKiB0eFszXSk7XG4gICAgdmFyIGZvbnRBc2NlbnQgPSBmb250SGVpZ2h0O1xuXG4gICAgaWYgKHN0eWxlLmFzY2VudCkge1xuICAgICAgZm9udEFzY2VudCA9IHN0eWxlLmFzY2VudCAqIGZvbnRBc2NlbnQ7XG4gICAgfSBlbHNlIGlmIChzdHlsZS5kZXNjZW50KSB7XG4gICAgICBmb250QXNjZW50ID0gKDEgKyBzdHlsZS5kZXNjZW50KSAqIGZvbnRBc2NlbnQ7XG4gICAgfVxuXG4gICAgbGV0IGxlZnQsIHRvcDtcblxuICAgIGlmIChhbmdsZSA9PT0gMCkge1xuICAgICAgbGVmdCA9IHR4WzRdO1xuICAgICAgdG9wID0gdHhbNV0gLSBmb250QXNjZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZWZ0ID0gdHhbNF0gKyBmb250QXNjZW50ICogTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgdG9wID0gdHhbNV0gLSBmb250QXNjZW50ICogTWF0aC5jb3MoYW5nbGUpO1xuICAgIH1cblxuICAgIHRleHREaXYuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xuICAgIHRleHREaXYuc3R5bGUudG9wID0gYCR7dG9wfXB4YDtcbiAgICB0ZXh0RGl2LnN0eWxlLmZvbnRTaXplID0gYCR7Zm9udEhlaWdodH1weGA7XG4gICAgdGV4dERpdi5zdHlsZS5mb250RmFtaWx5ID0gc3R5bGUuZm9udEZhbWlseTtcbiAgICB0ZXh0RGl2LnRleHRDb250ZW50ID0gZ2VvbS5zdHI7XG5cbiAgICBpZiAodGFzay5fZm9udEluc3BlY3RvckVuYWJsZWQpIHtcbiAgICAgIHRleHREaXYuZGF0YXNldC5mb250TmFtZSA9IGdlb20uZm9udE5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGFuZ2xlICE9PSAwKSB7XG4gICAgICB0ZXh0RGl2UHJvcGVydGllcy5hbmdsZSA9IGFuZ2xlICogKDE4MCAvIE1hdGguUEkpO1xuICAgIH1cblxuICAgIGxldCBzaG91bGRTY2FsZVRleHQgPSBmYWxzZTtcblxuICAgIGlmIChnZW9tLnN0ci5sZW5ndGggPiAxKSB7XG4gICAgICBzaG91bGRTY2FsZVRleHQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZ2VvbS50cmFuc2Zvcm1bMF0gIT09IGdlb20udHJhbnNmb3JtWzNdKSB7XG4gICAgICBjb25zdCBhYnNTY2FsZVggPSBNYXRoLmFicyhnZW9tLnRyYW5zZm9ybVswXSksXG4gICAgICAgICAgICBhYnNTY2FsZVkgPSBNYXRoLmFicyhnZW9tLnRyYW5zZm9ybVszXSk7XG5cbiAgICAgIGlmIChhYnNTY2FsZVggIT09IGFic1NjYWxlWSAmJiBNYXRoLm1heChhYnNTY2FsZVgsIGFic1NjYWxlWSkgLyBNYXRoLm1pbihhYnNTY2FsZVgsIGFic1NjYWxlWSkgPiAxLjUpIHtcbiAgICAgICAgc2hvdWxkU2NhbGVUZXh0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkU2NhbGVUZXh0KSB7XG4gICAgICBpZiAoc3R5bGUudmVydGljYWwpIHtcbiAgICAgICAgdGV4dERpdlByb3BlcnRpZXMuY2FudmFzV2lkdGggPSBnZW9tLmhlaWdodCAqIHRhc2suX3ZpZXdwb3J0LnNjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dERpdlByb3BlcnRpZXMuY2FudmFzV2lkdGggPSBnZW9tLndpZHRoICogdGFzay5fdmlld3BvcnQuc2NhbGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGFzay5fdGV4dERpdlByb3BlcnRpZXMuc2V0KHRleHREaXYsIHRleHREaXZQcm9wZXJ0aWVzKTtcblxuICAgIGlmICh0YXNrLl90ZXh0Q29udGVudFN0cmVhbSkge1xuICAgICAgdGFzay5fbGF5b3V0VGV4dCh0ZXh0RGl2KTtcbiAgICB9XG5cbiAgICBpZiAodGFzay5fZW5oYW5jZVRleHRTZWxlY3Rpb24pIHtcbiAgICAgIHZhciBhbmdsZUNvcyA9IDEsXG4gICAgICAgICAgYW5nbGVTaW4gPSAwO1xuXG4gICAgICBpZiAoYW5nbGUgIT09IDApIHtcbiAgICAgICAgYW5nbGVDb3MgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIGFuZ2xlU2luID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGl2V2lkdGggPSAoc3R5bGUudmVydGljYWwgPyBnZW9tLmhlaWdodCA6IGdlb20ud2lkdGgpICogdGFzay5fdmlld3BvcnQuc2NhbGU7XG4gICAgICB2YXIgZGl2SGVpZ2h0ID0gZm9udEhlaWdodDtcbiAgICAgIHZhciBtLCBiO1xuXG4gICAgICBpZiAoYW5nbGUgIT09IDApIHtcbiAgICAgICAgbSA9IFthbmdsZUNvcywgYW5nbGVTaW4sIC1hbmdsZVNpbiwgYW5nbGVDb3MsIGxlZnQsIHRvcF07XG4gICAgICAgIGIgPSBfdXRpbC5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLCAwLCBkaXZXaWR0aCwgZGl2SGVpZ2h0XSwgbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiID0gW2xlZnQsIHRvcCwgbGVmdCArIGRpdldpZHRoLCB0b3AgKyBkaXZIZWlnaHRdO1xuICAgICAgfVxuXG4gICAgICB0YXNrLl9ib3VuZHMucHVzaCh7XG4gICAgICAgIGxlZnQ6IGJbMF0sXG4gICAgICAgIHRvcDogYlsxXSxcbiAgICAgICAgcmlnaHQ6IGJbMl0sXG4gICAgICAgIGJvdHRvbTogYlszXSxcbiAgICAgICAgZGl2OiB0ZXh0RGl2LFxuICAgICAgICBzaXplOiBbZGl2V2lkdGgsIGRpdkhlaWdodF0sXG4gICAgICAgIG1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlcih0YXNrKSB7XG4gICAgaWYgKHRhc2suX2NhbmNlbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRleHREaXZzID0gdGFzay5fdGV4dERpdnM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSB0YXNrLl9jYXBhYmlsaXR5O1xuICAgIHZhciB0ZXh0RGl2c0xlbmd0aCA9IHRleHREaXZzLmxlbmd0aDtcblxuICAgIGlmICh0ZXh0RGl2c0xlbmd0aCA+IE1BWF9URVhUX0RJVlNfVE9fUkVOREVSKSB7XG4gICAgICB0YXNrLl9yZW5kZXJpbmdEb25lID0gdHJ1ZTtcbiAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGFzay5fdGV4dENvbnRlbnRTdHJlYW0pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dERpdnNMZW5ndGg7IGkrKykge1xuICAgICAgICB0YXNrLl9sYXlvdXRUZXh0KHRleHREaXZzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YXNrLl9yZW5kZXJpbmdEb25lID0gdHJ1ZTtcbiAgICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRQb3NpdGl2ZU1pbih0cywgb2Zmc2V0LCBjb3VudCkge1xuICAgIGxldCByZXN1bHQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gdHNbb2Zmc2V0KytdO1xuXG4gICAgICBpZiAodCA+IDApIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ID8gTWF0aC5taW4odCwgcmVzdWx0KSA6IHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGFuZCh0YXNrKSB7XG4gICAgdmFyIGJvdW5kcyA9IHRhc2suX2JvdW5kcztcbiAgICB2YXIgdmlld3BvcnQgPSB0YXNrLl92aWV3cG9ydDtcbiAgICB2YXIgZXhwYW5kZWQgPSBleHBhbmRCb3VuZHModmlld3BvcnQud2lkdGgsIHZpZXdwb3J0LmhlaWdodCwgYm91bmRzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwYW5kZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkaXYgPSBib3VuZHNbaV0uZGl2O1xuXG4gICAgICB2YXIgZGl2UHJvcGVydGllcyA9IHRhc2suX3RleHREaXZQcm9wZXJ0aWVzLmdldChkaXYpO1xuXG4gICAgICBpZiAoZGl2UHJvcGVydGllcy5hbmdsZSA9PT0gMCkge1xuICAgICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdMZWZ0ID0gYm91bmRzW2ldLmxlZnQgLSBleHBhbmRlZFtpXS5sZWZ0O1xuICAgICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdUb3AgPSBib3VuZHNbaV0udG9wIC0gZXhwYW5kZWRbaV0udG9wO1xuICAgICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdSaWdodCA9IGV4cGFuZGVkW2ldLnJpZ2h0IC0gYm91bmRzW2ldLnJpZ2h0O1xuICAgICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdCb3R0b20gPSBleHBhbmRlZFtpXS5ib3R0b20gLSBib3VuZHNbaV0uYm90dG9tO1xuXG4gICAgICAgIHRhc2suX3RleHREaXZQcm9wZXJ0aWVzLnNldChkaXYsIGRpdlByb3BlcnRpZXMpO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZSA9IGV4cGFuZGVkW2ldLFxuICAgICAgICAgIGIgPSBib3VuZHNbaV07XG4gICAgICB2YXIgbSA9IGIubSxcbiAgICAgICAgICBjID0gbVswXSxcbiAgICAgICAgICBzID0gbVsxXTtcbiAgICAgIHZhciBwb2ludHMgPSBbWzAsIDBdLCBbMCwgYi5zaXplWzFdXSwgW2Iuc2l6ZVswXSwgMF0sIGIuc2l6ZV07XG4gICAgICB2YXIgdHMgPSBuZXcgRmxvYXQ2NEFycmF5KDY0KTtcbiAgICAgIHBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChwLCBqKSB7XG4gICAgICAgIHZhciB0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShwLCBtKTtcblxuICAgICAgICB0c1tqICsgMF0gPSBjICYmIChlLmxlZnQgLSB0WzBdKSAvIGM7XG4gICAgICAgIHRzW2ogKyA0XSA9IHMgJiYgKGUudG9wIC0gdFsxXSkgLyBzO1xuICAgICAgICB0c1tqICsgOF0gPSBjICYmIChlLnJpZ2h0IC0gdFswXSkgLyBjO1xuICAgICAgICB0c1tqICsgMTJdID0gcyAmJiAoZS5ib3R0b20gLSB0WzFdKSAvIHM7XG4gICAgICAgIHRzW2ogKyAxNl0gPSBzICYmIChlLmxlZnQgLSB0WzBdKSAvIC1zO1xuICAgICAgICB0c1tqICsgMjBdID0gYyAmJiAoZS50b3AgLSB0WzFdKSAvIGM7XG4gICAgICAgIHRzW2ogKyAyNF0gPSBzICYmIChlLnJpZ2h0IC0gdFswXSkgLyAtcztcbiAgICAgICAgdHNbaiArIDI4XSA9IGMgJiYgKGUuYm90dG9tIC0gdFsxXSkgLyBjO1xuICAgICAgICB0c1tqICsgMzJdID0gYyAmJiAoZS5sZWZ0IC0gdFswXSkgLyAtYztcbiAgICAgICAgdHNbaiArIDM2XSA9IHMgJiYgKGUudG9wIC0gdFsxXSkgLyAtcztcbiAgICAgICAgdHNbaiArIDQwXSA9IGMgJiYgKGUucmlnaHQgLSB0WzBdKSAvIC1jO1xuICAgICAgICB0c1tqICsgNDRdID0gcyAmJiAoZS5ib3R0b20gLSB0WzFdKSAvIC1zO1xuICAgICAgICB0c1tqICsgNDhdID0gcyAmJiAoZS5sZWZ0IC0gdFswXSkgLyBzO1xuICAgICAgICB0c1tqICsgNTJdID0gYyAmJiAoZS50b3AgLSB0WzFdKSAvIC1jO1xuICAgICAgICB0c1tqICsgNTZdID0gcyAmJiAoZS5yaWdodCAtIHRbMF0pIC8gcztcbiAgICAgICAgdHNbaiArIDYwXSA9IGMgJiYgKGUuYm90dG9tIC0gdFsxXSkgLyAtYztcbiAgICAgIH0pO1xuICAgICAgdmFyIGJveFNjYWxlID0gMSArIE1hdGgubWluKE1hdGguYWJzKGMpLCBNYXRoLmFicyhzKSk7XG4gICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdMZWZ0ID0gZmluZFBvc2l0aXZlTWluKHRzLCAzMiwgMTYpIC8gYm94U2NhbGU7XG4gICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdUb3AgPSBmaW5kUG9zaXRpdmVNaW4odHMsIDQ4LCAxNikgLyBib3hTY2FsZTtcbiAgICAgIGRpdlByb3BlcnRpZXMucGFkZGluZ1JpZ2h0ID0gZmluZFBvc2l0aXZlTWluKHRzLCAwLCAxNikgLyBib3hTY2FsZTtcbiAgICAgIGRpdlByb3BlcnRpZXMucGFkZGluZ0JvdHRvbSA9IGZpbmRQb3NpdGl2ZU1pbih0cywgMTYsIDE2KSAvIGJveFNjYWxlO1xuXG4gICAgICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQoZGl2LCBkaXZQcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHBhbmRCb3VuZHMod2lkdGgsIGhlaWdodCwgYm94ZXMpIHtcbiAgICB2YXIgYm91bmRzID0gYm94ZXMubWFwKGZ1bmN0aW9uIChib3gsIGkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgxOiBib3gubGVmdCxcbiAgICAgICAgeTE6IGJveC50b3AsXG4gICAgICAgIHgyOiBib3gucmlnaHQsXG4gICAgICAgIHkyOiBib3guYm90dG9tLFxuICAgICAgICBpbmRleDogaSxcbiAgICAgICAgeDFOZXc6IHVuZGVmaW5lZCxcbiAgICAgICAgeDJOZXc6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBleHBhbmRCb3VuZHNMVFIod2lkdGgsIGJvdW5kcyk7XG4gICAgdmFyIGV4cGFuZGVkID0gbmV3IEFycmF5KGJveGVzLmxlbmd0aCk7XG4gICAgYm91bmRzLmZvckVhY2goZnVuY3Rpb24gKGIpIHtcbiAgICAgIHZhciBpID0gYi5pbmRleDtcbiAgICAgIGV4cGFuZGVkW2ldID0ge1xuICAgICAgICBsZWZ0OiBiLngxTmV3LFxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIHJpZ2h0OiBiLngyTmV3LFxuICAgICAgICBib3R0b206IDBcbiAgICAgIH07XG4gICAgfSk7XG4gICAgYm94ZXMubWFwKGZ1bmN0aW9uIChib3gsIGkpIHtcbiAgICAgIHZhciBlID0gZXhwYW5kZWRbaV0sXG4gICAgICAgICAgYiA9IGJvdW5kc1tpXTtcbiAgICAgIGIueDEgPSBib3gudG9wO1xuICAgICAgYi55MSA9IHdpZHRoIC0gZS5yaWdodDtcbiAgICAgIGIueDIgPSBib3guYm90dG9tO1xuICAgICAgYi55MiA9IHdpZHRoIC0gZS5sZWZ0O1xuICAgICAgYi5pbmRleCA9IGk7XG4gICAgICBiLngxTmV3ID0gdW5kZWZpbmVkO1xuICAgICAgYi54Mk5ldyA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBleHBhbmRCb3VuZHNMVFIoaGVpZ2h0LCBib3VuZHMpO1xuICAgIGJvdW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7XG4gICAgICB2YXIgaSA9IGIuaW5kZXg7XG4gICAgICBleHBhbmRlZFtpXS50b3AgPSBiLngxTmV3O1xuICAgICAgZXhwYW5kZWRbaV0uYm90dG9tID0gYi54Mk5ldztcbiAgICB9KTtcbiAgICByZXR1cm4gZXhwYW5kZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBleHBhbmRCb3VuZHNMVFIod2lkdGgsIGJvdW5kcykge1xuICAgIGJvdW5kcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS54MSAtIGIueDEgfHwgYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgfSk7XG4gICAgdmFyIGZha2VCb3VuZGFyeSA9IHtcbiAgICAgIHgxOiAtSW5maW5pdHksXG4gICAgICB5MTogLUluZmluaXR5LFxuICAgICAgeDI6IDAsXG4gICAgICB5MjogSW5maW5pdHksXG4gICAgICBpbmRleDogLTEsXG4gICAgICB4MU5ldzogMCxcbiAgICAgIHgyTmV3OiAwXG4gICAgfTtcbiAgICB2YXIgaG9yaXpvbiA9IFt7XG4gICAgICBzdGFydDogLUluZmluaXR5LFxuICAgICAgZW5kOiBJbmZpbml0eSxcbiAgICAgIGJvdW5kYXJ5OiBmYWtlQm91bmRhcnlcbiAgICB9XTtcbiAgICBib3VuZHMuZm9yRWFjaChmdW5jdGlvbiAoYm91bmRhcnkpIHtcbiAgICAgIHZhciBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCBob3Jpem9uLmxlbmd0aCAmJiBob3Jpem9uW2ldLmVuZCA8PSBib3VuZGFyeS55MSkge1xuICAgICAgICBpKys7XG4gICAgICB9XG5cbiAgICAgIHZhciBqID0gaG9yaXpvbi5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAoaiA+PSAwICYmIGhvcml6b25bal0uc3RhcnQgPj0gYm91bmRhcnkueTIpIHtcbiAgICAgICAgai0tO1xuICAgICAgfVxuXG4gICAgICB2YXIgaG9yaXpvblBhcnQsIGFmZmVjdGVkQm91bmRhcnk7XG4gICAgICB2YXIgcSxcbiAgICAgICAgICBrLFxuICAgICAgICAgIG1heFhOZXcgPSAtSW5maW5pdHk7XG5cbiAgICAgIGZvciAocSA9IGk7IHEgPD0gajsgcSsrKSB7XG4gICAgICAgIGhvcml6b25QYXJ0ID0gaG9yaXpvbltxXTtcbiAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuICAgICAgICB2YXIgeE5ldztcblxuICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54MiA+IGJvdW5kYXJ5LngxKSB7XG4gICAgICAgICAgeE5ldyA9IGFmZmVjdGVkQm91bmRhcnkuaW5kZXggPiBib3VuZGFyeS5pbmRleCA/IGFmZmVjdGVkQm91bmRhcnkueDFOZXcgOiBib3VuZGFyeS54MTtcbiAgICAgICAgfSBlbHNlIGlmIChhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB4TmV3ID0gKGFmZmVjdGVkQm91bmRhcnkueDIgKyBib3VuZGFyeS54MSkgLyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHhOZXcgPSBhZmZlY3RlZEJvdW5kYXJ5LngyTmV3O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHhOZXcgPiBtYXhYTmV3KSB7XG4gICAgICAgICAgbWF4WE5ldyA9IHhOZXc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYm91bmRhcnkueDFOZXcgPSBtYXhYTmV3O1xuXG4gICAgICBmb3IgKHEgPSBpOyBxIDw9IGo7IHErKykge1xuICAgICAgICBob3Jpem9uUGFydCA9IGhvcml6b25bcV07XG4gICAgICAgIGFmZmVjdGVkQm91bmRhcnkgPSBob3Jpem9uUGFydC5ib3VuZGFyeTtcblxuICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGFmZmVjdGVkQm91bmRhcnkueDIgPiBib3VuZGFyeS54MSkge1xuICAgICAgICAgICAgaWYgKGFmZmVjdGVkQm91bmRhcnkuaW5kZXggPiBib3VuZGFyeS5pbmRleCkge1xuICAgICAgICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID0gYWZmZWN0ZWRCb3VuZGFyeS54MjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IG1heFhOZXc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPiBtYXhYTmV3KSB7XG4gICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IE1hdGgubWF4KG1heFhOZXcsIGFmZmVjdGVkQm91bmRhcnkueDIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGFuZ2VkSG9yaXpvbiA9IFtdLFxuICAgICAgICAgIGxhc3RCb3VuZGFyeSA9IG51bGw7XG5cbiAgICAgIGZvciAocSA9IGk7IHEgPD0gajsgcSsrKSB7XG4gICAgICAgIGhvcml6b25QYXJ0ID0gaG9yaXpvbltxXTtcbiAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuICAgICAgICB2YXIgdXNlQm91bmRhcnkgPSBhZmZlY3RlZEJvdW5kYXJ5LngyID4gYm91bmRhcnkueDIgPyBhZmZlY3RlZEJvdW5kYXJ5IDogYm91bmRhcnk7XG5cbiAgICAgICAgaWYgKGxhc3RCb3VuZGFyeSA9PT0gdXNlQm91bmRhcnkpIHtcbiAgICAgICAgICBjaGFuZ2VkSG9yaXpvbltjaGFuZ2VkSG9yaXpvbi5sZW5ndGggLSAxXS5lbmQgPSBob3Jpem9uUGFydC5lbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhbmdlZEhvcml6b24ucHVzaCh7XG4gICAgICAgICAgICBzdGFydDogaG9yaXpvblBhcnQuc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGhvcml6b25QYXJ0LmVuZCxcbiAgICAgICAgICAgIGJvdW5kYXJ5OiB1c2VCb3VuZGFyeVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxhc3RCb3VuZGFyeSA9IHVzZUJvdW5kYXJ5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChob3Jpem9uW2ldLnN0YXJ0IDwgYm91bmRhcnkueTEpIHtcbiAgICAgICAgY2hhbmdlZEhvcml6b25bMF0uc3RhcnQgPSBib3VuZGFyeS55MTtcbiAgICAgICAgY2hhbmdlZEhvcml6b24udW5zaGlmdCh7XG4gICAgICAgICAgc3RhcnQ6IGhvcml6b25baV0uc3RhcnQsXG4gICAgICAgICAgZW5kOiBib3VuZGFyeS55MSxcbiAgICAgICAgICBib3VuZGFyeTogaG9yaXpvbltpXS5ib3VuZGFyeVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJvdW5kYXJ5LnkyIDwgaG9yaXpvbltqXS5lbmQpIHtcbiAgICAgICAgY2hhbmdlZEhvcml6b25bY2hhbmdlZEhvcml6b24ubGVuZ3RoIC0gMV0uZW5kID0gYm91bmRhcnkueTI7XG4gICAgICAgIGNoYW5nZWRIb3Jpem9uLnB1c2goe1xuICAgICAgICAgIHN0YXJ0OiBib3VuZGFyeS55MixcbiAgICAgICAgICBlbmQ6IGhvcml6b25bal0uZW5kLFxuICAgICAgICAgIGJvdW5kYXJ5OiBob3Jpem9uW2pdLmJvdW5kYXJ5XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHEgPSBpOyBxIDw9IGo7IHErKykge1xuICAgICAgICBob3Jpem9uUGFydCA9IGhvcml6b25bcV07XG4gICAgICAgIGFmZmVjdGVkQm91bmRhcnkgPSBob3Jpem9uUGFydC5ib3VuZGFyeTtcblxuICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdXNlZCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoayA9IGkgLSAxOyAhdXNlZCAmJiBrID49IDAgJiYgaG9yaXpvbltrXS5zdGFydCA+PSBhZmZlY3RlZEJvdW5kYXJ5LnkxOyBrLS0pIHtcbiAgICAgICAgICB1c2VkID0gaG9yaXpvbltrXS5ib3VuZGFyeSA9PT0gYWZmZWN0ZWRCb3VuZGFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoayA9IGogKyAxOyAhdXNlZCAmJiBrIDwgaG9yaXpvbi5sZW5ndGggJiYgaG9yaXpvbltrXS5lbmQgPD0gYWZmZWN0ZWRCb3VuZGFyeS55MjsgaysrKSB7XG4gICAgICAgICAgdXNlZCA9IGhvcml6b25ba10uYm91bmRhcnkgPT09IGFmZmVjdGVkQm91bmRhcnk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGsgPSAwOyAhdXNlZCAmJiBrIDwgY2hhbmdlZEhvcml6b24ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICB1c2VkID0gY2hhbmdlZEhvcml6b25ba10uYm91bmRhcnkgPT09IGFmZmVjdGVkQm91bmRhcnk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXVzZWQpIHtcbiAgICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID0gbWF4WE5ldztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGhvcml6b24sIFtpLCBqIC0gaSArIDFdLmNvbmNhdChjaGFuZ2VkSG9yaXpvbikpO1xuICAgIH0pO1xuICAgIGhvcml6b24uZm9yRWFjaChmdW5jdGlvbiAoaG9yaXpvblBhcnQpIHtcbiAgICAgIHZhciBhZmZlY3RlZEJvdW5kYXJ5ID0gaG9yaXpvblBhcnQuYm91bmRhcnk7XG5cbiAgICAgIGlmIChhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IE1hdGgubWF4KHdpZHRoLCBhZmZlY3RlZEJvdW5kYXJ5LngyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFRleHRMYXllclJlbmRlclRhc2soe1xuICAgIHRleHRDb250ZW50LFxuICAgIHRleHRDb250ZW50U3RyZWFtLFxuICAgIGNvbnRhaW5lcixcbiAgICB2aWV3cG9ydCxcbiAgICB0ZXh0RGl2cyxcbiAgICB0ZXh0Q29udGVudEl0ZW1zU3RyLFxuICAgIGVuaGFuY2VUZXh0U2VsZWN0aW9uXG4gIH0pIHtcbiAgICB0aGlzLl90ZXh0Q29udGVudCA9IHRleHRDb250ZW50O1xuICAgIHRoaXMuX3RleHRDb250ZW50U3RyZWFtID0gdGV4dENvbnRlbnRTdHJlYW07XG4gICAgdGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMuX3ZpZXdwb3J0ID0gdmlld3BvcnQ7XG4gICAgdGhpcy5fdGV4dERpdnMgPSB0ZXh0RGl2cyB8fCBbXTtcbiAgICB0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyID0gdGV4dENvbnRlbnRJdGVtc1N0ciB8fCBbXTtcbiAgICB0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbiA9ICEhZW5oYW5jZVRleHRTZWxlY3Rpb247XG4gICAgdGhpcy5fZm9udEluc3BlY3RvckVuYWJsZWQgPSAhIShnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IgJiYgZ2xvYmFsVGhpcy5Gb250SW5zcGVjdG9yLmVuYWJsZWQpO1xuICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSA9IG51bGw7XG4gICAgdGhpcy5fbGF5b3V0VGV4dExhc3RGb250RmFtaWx5ID0gbnVsbDtcbiAgICB0aGlzLl9sYXlvdXRUZXh0Q3R4ID0gbnVsbDtcbiAgICB0aGlzLl90ZXh0RGl2UHJvcGVydGllcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgdGhpcy5fcmVuZGVyaW5nRG9uZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NhbmNlbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLl9yZW5kZXJUaW1lciA9IG51bGw7XG4gICAgdGhpcy5fYm91bmRzID0gW107XG5cbiAgICB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2UuZmluYWxseSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fbGF5b3V0VGV4dEN0eCkge1xuICAgICAgICB0aGlzLl9sYXlvdXRUZXh0Q3R4LmNhbnZhcy53aWR0aCA9IDA7XG4gICAgICAgIHRoaXMuX2xheW91dFRleHRDdHguY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuX2xheW91dFRleHRDdHggPSBudWxsO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIFRleHRMYXllclJlbmRlclRhc2sucHJvdG90eXBlID0ge1xuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9LFxuXG4gICAgY2FuY2VsOiBmdW5jdGlvbiBUZXh0TGF5ZXJfY2FuY2VsKCkge1xuICAgICAgdGhpcy5fY2FuY2VsZWQgPSB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5fcmVhZGVyKSB7XG4gICAgICAgIHRoaXMuX3JlYWRlci5jYW5jZWwobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKFwiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLlwiKSk7XG5cbiAgICAgICAgdGhpcy5fcmVhZGVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3JlbmRlclRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZW5kZXJUaW1lcik7XG4gICAgICAgIHRoaXMuX3JlbmRlclRpbWVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKFwiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLlwiKSk7XG4gICAgfSxcblxuICAgIF9wcm9jZXNzSXRlbXMoaXRlbXMsIHN0eWxlQ2FjaGUpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyLnB1c2goaXRlbXNbaV0uc3RyKTtcblxuICAgICAgICBhcHBlbmRUZXh0KHRoaXMsIGl0ZW1zW2ldLCBzdHlsZUNhY2hlKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xheW91dFRleHQodGV4dERpdikge1xuICAgICAgY29uc3QgdGV4dERpdlByb3BlcnRpZXMgPSB0aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQodGV4dERpdik7XG5cbiAgICAgIGlmICh0ZXh0RGl2UHJvcGVydGllcy5pc1doaXRlc3BhY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgdHJhbnNmb3JtID0gXCJcIjtcblxuICAgICAgaWYgKHRleHREaXZQcm9wZXJ0aWVzLmNhbnZhc1dpZHRoICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICBmb250RmFtaWx5XG4gICAgICAgIH0gPSB0ZXh0RGl2LnN0eWxlO1xuXG4gICAgICAgIGlmIChmb250U2l6ZSAhPT0gdGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSB8fCBmb250RmFtaWx5ICE9PSB0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRGYW1pbHkpIHtcbiAgICAgICAgICB0aGlzLl9sYXlvdXRUZXh0Q3R4LmZvbnQgPSBgJHtmb250U2l6ZX0gJHtmb250RmFtaWx5fWA7XG4gICAgICAgICAgdGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSA9IGZvbnRTaXplO1xuICAgICAgICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseSA9IGZvbnRGYW1pbHk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgd2lkdGhcbiAgICAgICAgfSA9IHRoaXMuX2xheW91dFRleHRDdHgubWVhc3VyZVRleHQodGV4dERpdi50ZXh0Q29udGVudCk7XG5cbiAgICAgICAgaWYgKHdpZHRoID4gMCkge1xuICAgICAgICAgIHRleHREaXZQcm9wZXJ0aWVzLnNjYWxlID0gdGV4dERpdlByb3BlcnRpZXMuY2FudmFzV2lkdGggLyB3aWR0aDtcbiAgICAgICAgICB0cmFuc2Zvcm0gPSBgc2NhbGVYKCR7dGV4dERpdlByb3BlcnRpZXMuc2NhbGV9KWA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRleHREaXZQcm9wZXJ0aWVzLmFuZ2xlICE9PSAwKSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IGByb3RhdGUoJHt0ZXh0RGl2UHJvcGVydGllcy5hbmdsZX1kZWcpICR7dHJhbnNmb3JtfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFuc2Zvcm0ubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodGhpcy5fZW5oYW5jZVRleHRTZWxlY3Rpb24pIHtcbiAgICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5vcmlnaW5hbFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRleHREaXYuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl90ZXh0RGl2UHJvcGVydGllcy5zZXQodGV4dERpdiwgdGV4dERpdlByb3BlcnRpZXMpO1xuXG4gICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGV4dERpdik7XG4gICAgfSxcblxuICAgIF9yZW5kZXI6IGZ1bmN0aW9uIFRleHRMYXllcl9yZW5kZXIodGltZW91dCkge1xuICAgICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIGxldCBzdHlsZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICBjYW52YXMubW96T3BhcXVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2xheW91dFRleHRDdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIsIHtcbiAgICAgICAgYWxwaGE6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuX3RleHRDb250ZW50KSB7XG4gICAgICAgIGNvbnN0IHRleHRJdGVtcyA9IHRoaXMuX3RleHRDb250ZW50Lml0ZW1zO1xuICAgICAgICBjb25zdCB0ZXh0U3R5bGVzID0gdGhpcy5fdGV4dENvbnRlbnQuc3R5bGVzO1xuXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NJdGVtcyh0ZXh0SXRlbXMsIHRleHRTdHlsZXMpO1xuXG4gICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl90ZXh0Q29udGVudFN0cmVhbSkge1xuICAgICAgICBjb25zdCBwdW1wID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlYWRlci5yZWFkKCkudGhlbigoe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkb25lXG4gICAgICAgICAgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZUNhY2hlLCB2YWx1ZS5zdHlsZXMpO1xuXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzSXRlbXModmFsdWUuaXRlbXMsIHN0eWxlQ2FjaGUpO1xuXG4gICAgICAgICAgICBwdW1wKCk7XG4gICAgICAgICAgfSwgY2FwYWJpbGl0eS5yZWplY3QpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX3JlYWRlciA9IHRoaXMuX3RleHRDb250ZW50U3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICBwdW1wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05laXRoZXIgXCJ0ZXh0Q29udGVudFwiIG5vciBcInRleHRDb250ZW50U3RyZWFtXCInICsgXCIgcGFyYW1ldGVycyBzcGVjaWZpZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICBjYXBhYmlsaXR5LnByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgIHN0eWxlQ2FjaGUgPSBudWxsO1xuXG4gICAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICAgIHJlbmRlcih0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVuZGVyKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGltZXIgPSBudWxsO1xuICAgICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzLl9jYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgfSxcbiAgICBleHBhbmRUZXh0RGl2czogZnVuY3Rpb24gVGV4dExheWVyX2V4cGFuZFRleHREaXZzKGV4cGFuZERpdnMpIHtcbiAgICAgIGlmICghdGhpcy5fZW5oYW5jZVRleHRTZWxlY3Rpb24gfHwgIXRoaXMuX3JlbmRlcmluZ0RvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm91bmRzICE9PSBudWxsKSB7XG4gICAgICAgIGV4cGFuZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJhbnNmb3JtQnVmID0gW10sXG4gICAgICAgICAgICBwYWRkaW5nQnVmID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuX3RleHREaXZzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGl2ID0gdGhpcy5fdGV4dERpdnNbaV07XG5cbiAgICAgICAgY29uc3QgZGl2UHJvcHMgPSB0aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQoZGl2KTtcblxuICAgICAgICBpZiAoZGl2UHJvcHMuaXNXaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXhwYW5kRGl2cykge1xuICAgICAgICAgIHRyYW5zZm9ybUJ1Zi5sZW5ndGggPSAwO1xuICAgICAgICAgIHBhZGRpbmdCdWYubGVuZ3RoID0gMDtcblxuICAgICAgICAgIGlmIChkaXZQcm9wcy5vcmlnaW5hbFRyYW5zZm9ybSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtQnVmLnB1c2goZGl2UHJvcHMub3JpZ2luYWxUcmFuc2Zvcm0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaXZQcm9wcy5wYWRkaW5nVG9wID4gMCkge1xuICAgICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdUb3B9cHhgKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybUJ1Zi5wdXNoKGB0cmFuc2xhdGVZKCR7LWRpdlByb3BzLnBhZGRpbmdUb3B9cHgpYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhZGRpbmdCdWYucHVzaCgwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGl2UHJvcHMucGFkZGluZ1JpZ2h0ID4gMCkge1xuICAgICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdSaWdodCAvIGRpdlByb3BzLnNjYWxlfXB4YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhZGRpbmdCdWYucHVzaCgwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGl2UHJvcHMucGFkZGluZ0JvdHRvbSA+IDApIHtcbiAgICAgICAgICAgIHBhZGRpbmdCdWYucHVzaChgJHtkaXZQcm9wcy5wYWRkaW5nQm90dG9tfXB4YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhZGRpbmdCdWYucHVzaCgwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGl2UHJvcHMucGFkZGluZ0xlZnQgPiAwKSB7XG4gICAgICAgICAgICBwYWRkaW5nQnVmLnB1c2goYCR7ZGl2UHJvcHMucGFkZGluZ0xlZnQgLyBkaXZQcm9wcy5zY2FsZX1weGApO1xuICAgICAgICAgICAgdHJhbnNmb3JtQnVmLnB1c2goYHRyYW5zbGF0ZVgoJHstZGl2UHJvcHMucGFkZGluZ0xlZnQgLyBkaXZQcm9wcy5zY2FsZX1weClgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpdi5zdHlsZS5wYWRkaW5nID0gcGFkZGluZ0J1Zi5qb2luKFwiIFwiKTtcblxuICAgICAgICAgIGlmICh0cmFuc2Zvcm1CdWYubGVuZ3RoKSB7XG4gICAgICAgICAgICBkaXYuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtQnVmLmpvaW4oXCIgXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXYuc3R5bGUucGFkZGluZyA9IG51bGw7XG4gICAgICAgICAgZGl2LnN0eWxlLnRyYW5zZm9ybSA9IGRpdlByb3BzLm9yaWdpbmFsVHJhbnNmb3JtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHJlbmRlclRleHRMYXllcihyZW5kZXJQYXJhbWV0ZXJzKSB7XG4gICAgdmFyIHRhc2sgPSBuZXcgVGV4dExheWVyUmVuZGVyVGFzayh7XG4gICAgICB0ZXh0Q29udGVudDogcmVuZGVyUGFyYW1ldGVycy50ZXh0Q29udGVudCxcbiAgICAgIHRleHRDb250ZW50U3RyZWFtOiByZW5kZXJQYXJhbWV0ZXJzLnRleHRDb250ZW50U3RyZWFtLFxuICAgICAgY29udGFpbmVyOiByZW5kZXJQYXJhbWV0ZXJzLmNvbnRhaW5lcixcbiAgICAgIHZpZXdwb3J0OiByZW5kZXJQYXJhbWV0ZXJzLnZpZXdwb3J0LFxuICAgICAgdGV4dERpdnM6IHJlbmRlclBhcmFtZXRlcnMudGV4dERpdnMsXG4gICAgICB0ZXh0Q29udGVudEl0ZW1zU3RyOiByZW5kZXJQYXJhbWV0ZXJzLnRleHRDb250ZW50SXRlbXNTdHIsXG4gICAgICBlbmhhbmNlVGV4dFNlbGVjdGlvbjogcmVuZGVyUGFyYW1ldGVycy5lbmhhbmNlVGV4dFNlbGVjdGlvblxuICAgIH0pO1xuXG4gICAgdGFzay5fcmVuZGVyKHJlbmRlclBhcmFtZXRlcnMudGltZW91dCk7XG5cbiAgICByZXR1cm4gdGFzaztcbiAgfVxuXG4gIHJldHVybiByZW5kZXJUZXh0TGF5ZXI7XG59KCk7XG5cbmV4cG9ydHMucmVuZGVyVGV4dExheWVyID0gcmVuZGVyVGV4dExheWVyO1xuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNWR0dyYXBoaWNzID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2Rpc3BsYXlfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEpO1xuXG52YXIgX2lzX25vZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQpO1xuXG5sZXQgU1ZHR3JhcGhpY3MgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZDogU1ZHR3JhcGhpY3NcIik7XG59O1xuXG5leHBvcnRzLlNWR0dyYXBoaWNzID0gU1ZHR3JhcGhpY3M7XG57XG4gIGNvbnN0IFNWR19ERUZBVUxUUyA9IHtcbiAgICBmb250U3R5bGU6IFwibm9ybWFsXCIsXG4gICAgZm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICBmaWxsQ29sb3I6IFwiIzAwMDAwMFwiXG4gIH07XG4gIGNvbnN0IFhNTF9OUyA9IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCI7XG4gIGNvbnN0IFhMSU5LX05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI7XG4gIGNvbnN0IExJTkVfQ0FQX1NUWUxFUyA9IFtcImJ1dHRcIiwgXCJyb3VuZFwiLCBcInNxdWFyZVwiXTtcbiAgY29uc3QgTElORV9KT0lOX1NUWUxFUyA9IFtcIm1pdGVyXCIsIFwicm91bmRcIiwgXCJiZXZlbFwiXTtcblxuICBjb25zdCBjb252ZXJ0SW1nRGF0YVRvUG5nID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFBOR19IRUFERVIgPSBuZXcgVWludDhBcnJheShbMHg4OSwgMHg1MCwgMHg0ZSwgMHg0NywgMHgwZCwgMHgwYSwgMHgxYSwgMHgwYV0pO1xuICAgIGNvbnN0IENIVU5LX1dSQVBQRVJfU0laRSA9IDEyO1xuICAgIGNvbnN0IGNyY1RhYmxlID0gbmV3IEludDMyQXJyYXkoMjU2KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIGxldCBjID0gaTtcblxuICAgICAgZm9yIChsZXQgaCA9IDA7IGggPCA4OyBoKyspIHtcbiAgICAgICAgaWYgKGMgJiAxKSB7XG4gICAgICAgICAgYyA9IDB4ZWRiODgzMjAgXiBjID4+IDEgJiAweDdmZmZmZmZmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGMgPSBjID4+IDEgJiAweDdmZmZmZmZmO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNyY1RhYmxlW2ldID0gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmMzMihkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICBsZXQgY3JjID0gLTE7XG5cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGEgPSAoY3JjIF4gZGF0YVtpXSkgJiAweGZmO1xuICAgICAgICBjb25zdCBiID0gY3JjVGFibGVbYV07XG4gICAgICAgIGNyYyA9IGNyYyA+Pj4gOCBeIGI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjcmMgXiAtMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cml0ZVBuZ0NodW5rKHR5cGUsIGJvZHksIGRhdGEsIG9mZnNldCkge1xuICAgICAgbGV0IHAgPSBvZmZzZXQ7XG4gICAgICBjb25zdCBsZW4gPSBib2R5Lmxlbmd0aDtcbiAgICAgIGRhdGFbcF0gPSBsZW4gPj4gMjQgJiAweGZmO1xuICAgICAgZGF0YVtwICsgMV0gPSBsZW4gPj4gMTYgJiAweGZmO1xuICAgICAgZGF0YVtwICsgMl0gPSBsZW4gPj4gOCAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAzXSA9IGxlbiAmIDB4ZmY7XG4gICAgICBwICs9IDQ7XG4gICAgICBkYXRhW3BdID0gdHlwZS5jaGFyQ29kZUF0KDApICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDFdID0gdHlwZS5jaGFyQ29kZUF0KDEpICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDJdID0gdHlwZS5jaGFyQ29kZUF0KDIpICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDNdID0gdHlwZS5jaGFyQ29kZUF0KDMpICYgMHhmZjtcbiAgICAgIHAgKz0gNDtcbiAgICAgIGRhdGEuc2V0KGJvZHksIHApO1xuICAgICAgcCArPSBib2R5Lmxlbmd0aDtcbiAgICAgIGNvbnN0IGNyYyA9IGNyYzMyKGRhdGEsIG9mZnNldCArIDQsIHApO1xuICAgICAgZGF0YVtwXSA9IGNyYyA+PiAyNCAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAxXSA9IGNyYyA+PiAxNiAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAyXSA9IGNyYyA+PiA4ICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDNdID0gY3JjICYgMHhmZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGxlcjMyKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIGxldCBhID0gMTtcbiAgICAgIGxldCBiID0gMDtcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgICAgYSA9IChhICsgKGRhdGFbaV0gJiAweGZmKSkgJSA2NTUyMTtcbiAgICAgICAgYiA9IChiICsgYSkgJSA2NTUyMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGIgPDwgMTYgfCBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmxhdGVTeW5jKGxpdGVyYWxzKSB7XG4gICAgICBpZiAoIV9pc19ub2RlLmlzTm9kZUpTKSB7XG4gICAgICAgIHJldHVybiBkZWZsYXRlU3luY1VuY29tcHJlc3NlZChsaXRlcmFscyk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBpbnB1dDtcblxuICAgICAgICBpZiAocGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSA+PSA4KSB7XG4gICAgICAgICAgaW5wdXQgPSBsaXRlcmFscztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnB1dCA9IEJ1ZmZlci5mcm9tKGxpdGVyYWxzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHJlcXVpcmUoXCJ6bGliXCIpLmRlZmxhdGVTeW5jKGlucHV0LCB7XG4gICAgICAgICAgbGV2ZWw6IDlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG91dHB1dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBvdXRwdXQgOiBuZXcgVWludDhBcnJheShvdXRwdXQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJOb3QgY29tcHJlc3NpbmcgUE5HIGJlY2F1c2UgemxpYi5kZWZsYXRlU3luYyBpcyB1bmF2YWlsYWJsZTogXCIgKyBlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlZmxhdGVTeW5jVW5jb21wcmVzc2VkKGxpdGVyYWxzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZsYXRlU3luY1VuY29tcHJlc3NlZChsaXRlcmFscykge1xuICAgICAgbGV0IGxlbiA9IGxpdGVyYWxzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1heEJsb2NrTGVuZ3RoID0gMHhmZmZmO1xuICAgICAgY29uc3QgZGVmbGF0ZUJsb2NrcyA9IE1hdGguY2VpbChsZW4gLyBtYXhCbG9ja0xlbmd0aCk7XG4gICAgICBjb25zdCBpZGF0ID0gbmV3IFVpbnQ4QXJyYXkoMiArIGxlbiArIGRlZmxhdGVCbG9ja3MgKiA1ICsgNCk7XG4gICAgICBsZXQgcGkgPSAwO1xuICAgICAgaWRhdFtwaSsrXSA9IDB4Nzg7XG4gICAgICBpZGF0W3BpKytdID0gMHg5YztcbiAgICAgIGxldCBwb3MgPSAwO1xuXG4gICAgICB3aGlsZSAobGVuID4gbWF4QmxvY2tMZW5ndGgpIHtcbiAgICAgICAgaWRhdFtwaSsrXSA9IDB4MDA7XG4gICAgICAgIGlkYXRbcGkrK10gPSAweGZmO1xuICAgICAgICBpZGF0W3BpKytdID0gMHhmZjtcbiAgICAgICAgaWRhdFtwaSsrXSA9IDB4MDA7XG4gICAgICAgIGlkYXRbcGkrK10gPSAweDAwO1xuICAgICAgICBpZGF0LnNldChsaXRlcmFscy5zdWJhcnJheShwb3MsIHBvcyArIG1heEJsb2NrTGVuZ3RoKSwgcGkpO1xuICAgICAgICBwaSArPSBtYXhCbG9ja0xlbmd0aDtcbiAgICAgICAgcG9zICs9IG1heEJsb2NrTGVuZ3RoO1xuICAgICAgICBsZW4gLT0gbWF4QmxvY2tMZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlkYXRbcGkrK10gPSAweDAxO1xuICAgICAgaWRhdFtwaSsrXSA9IGxlbiAmIDB4ZmY7XG4gICAgICBpZGF0W3BpKytdID0gbGVuID4+IDggJiAweGZmO1xuICAgICAgaWRhdFtwaSsrXSA9IH5sZW4gJiAweGZmZmYgJiAweGZmO1xuICAgICAgaWRhdFtwaSsrXSA9ICh+bGVuICYgMHhmZmZmKSA+PiA4ICYgMHhmZjtcbiAgICAgIGlkYXQuc2V0KGxpdGVyYWxzLnN1YmFycmF5KHBvcyksIHBpKTtcbiAgICAgIHBpICs9IGxpdGVyYWxzLmxlbmd0aCAtIHBvcztcbiAgICAgIGNvbnN0IGFkbGVyID0gYWRsZXIzMihsaXRlcmFscywgMCwgbGl0ZXJhbHMubGVuZ3RoKTtcbiAgICAgIGlkYXRbcGkrK10gPSBhZGxlciA+PiAyNCAmIDB4ZmY7XG4gICAgICBpZGF0W3BpKytdID0gYWRsZXIgPj4gMTYgJiAweGZmO1xuICAgICAgaWRhdFtwaSsrXSA9IGFkbGVyID4+IDggJiAweGZmO1xuICAgICAgaWRhdFtwaSsrXSA9IGFkbGVyICYgMHhmZjtcbiAgICAgIHJldHVybiBpZGF0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuY29kZShpbWdEYXRhLCBraW5kLCBmb3JjZURhdGFTY2hlbWEsIGlzTWFzaykge1xuICAgICAgY29uc3Qgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gaW1nRGF0YS5oZWlnaHQ7XG4gICAgICBsZXQgYml0RGVwdGgsIGNvbG9yVHlwZSwgbGluZVNpemU7XG4gICAgICBjb25zdCBieXRlcyA9IGltZ0RhdGEuZGF0YTtcblxuICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgIGNhc2UgX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQOlxuICAgICAgICAgIGNvbG9yVHlwZSA9IDA7XG4gICAgICAgICAgYml0RGVwdGggPSAxO1xuICAgICAgICAgIGxpbmVTaXplID0gd2lkdGggKyA3ID4+IDM7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQOlxuICAgICAgICAgIGNvbG9yVHlwZSA9IDI7XG4gICAgICAgICAgYml0RGVwdGggPSA4O1xuICAgICAgICAgIGxpbmVTaXplID0gd2lkdGggKiAzO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgX3V0aWwuSW1hZ2VLaW5kLlJHQkFfMzJCUFA6XG4gICAgICAgICAgY29sb3JUeXBlID0gNjtcbiAgICAgICAgICBiaXREZXB0aCA9IDg7XG4gICAgICAgICAgbGluZVNpemUgPSB3aWR0aCAqIDQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZvcm1hdFwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGl0ZXJhbHMgPSBuZXcgVWludDhBcnJheSgoMSArIGxpbmVTaXplKSAqIGhlaWdodCk7XG4gICAgICBsZXQgb2Zmc2V0TGl0ZXJhbHMgPSAwLFxuICAgICAgICAgIG9mZnNldEJ5dGVzID0gMDtcblxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkge1xuICAgICAgICBsaXRlcmFsc1tvZmZzZXRMaXRlcmFscysrXSA9IDA7XG4gICAgICAgIGxpdGVyYWxzLnNldChieXRlcy5zdWJhcnJheShvZmZzZXRCeXRlcywgb2Zmc2V0Qnl0ZXMgKyBsaW5lU2l6ZSksIG9mZnNldExpdGVyYWxzKTtcbiAgICAgICAgb2Zmc2V0Qnl0ZXMgKz0gbGluZVNpemU7XG4gICAgICAgIG9mZnNldExpdGVyYWxzICs9IGxpbmVTaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQICYmIGlzTWFzaykge1xuICAgICAgICBvZmZzZXRMaXRlcmFscyA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgIG9mZnNldExpdGVyYWxzKys7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVTaXplOyBpKyspIHtcbiAgICAgICAgICAgIGxpdGVyYWxzW29mZnNldExpdGVyYWxzKytdIF49IDB4ZmY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGloZHIgPSBuZXcgVWludDhBcnJheShbd2lkdGggPj4gMjQgJiAweGZmLCB3aWR0aCA+PiAxNiAmIDB4ZmYsIHdpZHRoID4+IDggJiAweGZmLCB3aWR0aCAmIDB4ZmYsIGhlaWdodCA+PiAyNCAmIDB4ZmYsIGhlaWdodCA+PiAxNiAmIDB4ZmYsIGhlaWdodCA+PiA4ICYgMHhmZiwgaGVpZ2h0ICYgMHhmZiwgYml0RGVwdGgsIGNvbG9yVHlwZSwgMHgwMCwgMHgwMCwgMHgwMF0pO1xuICAgICAgY29uc3QgaWRhdCA9IGRlZmxhdGVTeW5jKGxpdGVyYWxzKTtcbiAgICAgIGNvbnN0IHBuZ0xlbmd0aCA9IFBOR19IRUFERVIubGVuZ3RoICsgQ0hVTktfV1JBUFBFUl9TSVpFICogMyArIGloZHIubGVuZ3RoICsgaWRhdC5sZW5ndGg7XG4gICAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocG5nTGVuZ3RoKTtcbiAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgZGF0YS5zZXQoUE5HX0hFQURFUiwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSBQTkdfSEVBREVSLmxlbmd0aDtcbiAgICAgIHdyaXRlUG5nQ2h1bmsoXCJJSERSXCIsIGloZHIsIGRhdGEsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gQ0hVTktfV1JBUFBFUl9TSVpFICsgaWhkci5sZW5ndGg7XG4gICAgICB3cml0ZVBuZ0NodW5rKFwiSURBVEFcIiwgaWRhdCwgZGF0YSwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSBDSFVOS19XUkFQUEVSX1NJWkUgKyBpZGF0Lmxlbmd0aDtcbiAgICAgIHdyaXRlUG5nQ2h1bmsoXCJJRU5EXCIsIG5ldyBVaW50OEFycmF5KDApLCBkYXRhLCBvZmZzZXQpO1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5jcmVhdGVPYmplY3RVUkwpKGRhdGEsIFwiaW1hZ2UvcG5nXCIsIGZvcmNlRGF0YVNjaGVtYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRJbWdEYXRhVG9QbmcoaW1nRGF0YSwgZm9yY2VEYXRhU2NoZW1hLCBpc01hc2spIHtcbiAgICAgIGNvbnN0IGtpbmQgPSBpbWdEYXRhLmtpbmQgPT09IHVuZGVmaW5lZCA/IF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCA6IGltZ0RhdGEua2luZDtcbiAgICAgIHJldHVybiBlbmNvZGUoaW1nRGF0YSwga2luZCwgZm9yY2VEYXRhU2NoZW1hLCBpc01hc2spO1xuICAgIH07XG4gIH0oKTtcblxuICBjbGFzcyBTVkdFeHRyYVN0YXRlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRoaXMuZm9udFNpemVTY2FsZSA9IDE7XG4gICAgICB0aGlzLmZvbnRXZWlnaHQgPSBTVkdfREVGQVVMVFMuZm9udFdlaWdodDtcbiAgICAgIHRoaXMuZm9udFNpemUgPSAwO1xuICAgICAgdGhpcy50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgdGhpcy5mb250TWF0cml4ID0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICB0aGlzLmxlYWRpbmcgPSAwO1xuICAgICAgdGhpcy50ZXh0UmVuZGVyaW5nTW9kZSA9IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7XG4gICAgICB0aGlzLnRleHRNYXRyaXhTY2FsZSA9IDE7XG4gICAgICB0aGlzLnggPSAwO1xuICAgICAgdGhpcy55ID0gMDtcbiAgICAgIHRoaXMubGluZVggPSAwO1xuICAgICAgdGhpcy5saW5lWSA9IDA7XG4gICAgICB0aGlzLmNoYXJTcGFjaW5nID0gMDtcbiAgICAgIHRoaXMud29yZFNwYWNpbmcgPSAwO1xuICAgICAgdGhpcy50ZXh0SFNjYWxlID0gMTtcbiAgICAgIHRoaXMudGV4dFJpc2UgPSAwO1xuICAgICAgdGhpcy5maWxsQ29sb3IgPSBTVkdfREVGQVVMVFMuZmlsbENvbG9yO1xuICAgICAgdGhpcy5zdHJva2VDb2xvciA9IFwiIzAwMDAwMFwiO1xuICAgICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuICAgICAgdGhpcy5zdHJva2VBbHBoYSA9IDE7XG4gICAgICB0aGlzLmxpbmVXaWR0aCA9IDE7XG4gICAgICB0aGlzLmxpbmVKb2luID0gXCJcIjtcbiAgICAgIHRoaXMubGluZUNhcCA9IFwiXCI7XG4gICAgICB0aGlzLm1pdGVyTGltaXQgPSAwO1xuICAgICAgdGhpcy5kYXNoQXJyYXkgPSBbXTtcbiAgICAgIHRoaXMuZGFzaFBoYXNlID0gMDtcbiAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gW107XG4gICAgICB0aGlzLmFjdGl2ZUNsaXBVcmwgPSBudWxsO1xuICAgICAgdGhpcy5jbGlwR3JvdXAgPSBudWxsO1xuICAgICAgdGhpcy5tYXNrSWQgPSBcIlwiO1xuICAgIH1cblxuICAgIGNsb25lKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudFBvaW50KHgsIHkpIHtcbiAgICAgIHRoaXMueCA9IHg7XG4gICAgICB0aGlzLnkgPSB5O1xuICAgIH1cblxuICB9XG5cbiAgZnVuY3Rpb24gb3BMaXN0VG9UcmVlKG9wTGlzdCkge1xuICAgIGxldCBvcFRyZWUgPSBbXTtcbiAgICBjb25zdCB0bXAgPSBbXTtcblxuICAgIGZvciAoY29uc3Qgb3BMaXN0RWxlbWVudCBvZiBvcExpc3QpIHtcbiAgICAgIGlmIChvcExpc3RFbGVtZW50LmZuID09PSBcInNhdmVcIikge1xuICAgICAgICBvcFRyZWUucHVzaCh7XG4gICAgICAgICAgZm5JZDogOTIsXG4gICAgICAgICAgZm46IFwiZ3JvdXBcIixcbiAgICAgICAgICBpdGVtczogW11cbiAgICAgICAgfSk7XG4gICAgICAgIHRtcC5wdXNoKG9wVHJlZSk7XG4gICAgICAgIG9wVHJlZSA9IG9wVHJlZVtvcFRyZWUubGVuZ3RoIC0gMV0uaXRlbXM7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3BMaXN0RWxlbWVudC5mbiA9PT0gXCJyZXN0b3JlXCIpIHtcbiAgICAgICAgb3BUcmVlID0gdG1wLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3BUcmVlLnB1c2gob3BMaXN0RWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wVHJlZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBmKHZhbHVlKSB7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzID0gdmFsdWUudG9GaXhlZCgxMCk7XG4gICAgbGV0IGkgPSBzLmxlbmd0aCAtIDE7XG5cbiAgICBpZiAoc1tpXSAhPT0gXCIwXCIpIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIGktLTtcbiAgICB9IHdoaWxlIChzW2ldID09PSBcIjBcIik7XG5cbiAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgc1tpXSA9PT0gXCIuXCIgPyBpIDogaSArIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG0obSkge1xuICAgIGlmIChtWzRdID09PSAwICYmIG1bNV0gPT09IDApIHtcbiAgICAgIGlmIChtWzFdID09PSAwICYmIG1bMl0gPT09IDApIHtcbiAgICAgICAgaWYgKG1bMF0gPT09IDEgJiYgbVszXSA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBzY2FsZSgke3BmKG1bMF0pfSAke3BmKG1bM10pfSlgO1xuICAgICAgfVxuXG4gICAgICBpZiAobVswXSA9PT0gbVszXSAmJiBtWzFdID09PSAtbVsyXSkge1xuICAgICAgICBjb25zdCBhID0gTWF0aC5hY29zKG1bMF0pICogMTgwIC8gTWF0aC5QSTtcbiAgICAgICAgcmV0dXJuIGByb3RhdGUoJHtwZihhKX0pYDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1bMF0gPT09IDEgJiYgbVsxXSA9PT0gMCAmJiBtWzJdID09PSAwICYmIG1bM10gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtwZihtWzRdKX0gJHtwZihtWzVdKX0pYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYG1hdHJpeCgke3BmKG1bMF0pfSAke3BmKG1bMV0pfSAke3BmKG1bMl0pfSAke3BmKG1bM10pfSAke3BmKG1bNF0pfSBgICsgYCR7cGYobVs1XSl9KWA7XG4gIH1cblxuICBsZXQgY2xpcENvdW50ID0gMDtcbiAgbGV0IG1hc2tDb3VudCA9IDA7XG4gIGxldCBzaGFkaW5nQ291bnQgPSAwO1xuICBleHBvcnRzLlNWR0dyYXBoaWNzID0gU1ZHR3JhcGhpY3MgPSBjbGFzcyBTVkdHcmFwaGljcyB7XG4gICAgY29uc3RydWN0b3IoY29tbW9uT2Jqcywgb2JqcywgZm9yY2VEYXRhU2NoZW1hID0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc3ZnRmFjdG9yeSA9IG5ldyBfZGlzcGxheV91dGlscy5ET01TVkdGYWN0b3J5KCk7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXcgU1ZHRXh0cmFTdGF0ZSgpO1xuICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICB0aGlzLnRyYW5zZm9ybVN0YWNrID0gW107XG4gICAgICB0aGlzLmV4dHJhU3RhY2sgPSBbXTtcbiAgICAgIHRoaXMuY29tbW9uT2JqcyA9IGNvbW1vbk9ianM7XG4gICAgICB0aGlzLm9ianMgPSBvYmpzO1xuICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSBmYWxzZTtcbiAgICAgIHRoaXMuZW1iZWRGb250cyA9IGZhbHNlO1xuICAgICAgdGhpcy5lbWJlZGRlZEZvbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHRoaXMuY3NzU3R5bGUgPSBudWxsO1xuICAgICAgdGhpcy5mb3JjZURhdGFTY2hlbWEgPSAhIWZvcmNlRGF0YVNjaGVtYTtcbiAgICAgIHRoaXMuX29wZXJhdG9ySWRNYXBwaW5nID0gW107XG5cbiAgICAgIGZvciAoY29uc3Qgb3AgaW4gX3V0aWwuT1BTKSB7XG4gICAgICAgIHRoaXMuX29wZXJhdG9ySWRNYXBwaW5nW191dGlsLk9QU1tvcF1dID0gb3A7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2F2ZSgpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtU3RhY2sucHVzaCh0aGlzLnRyYW5zZm9ybU1hdHJpeCk7XG4gICAgICBjb25zdCBvbGQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICB0aGlzLmV4dHJhU3RhY2sucHVzaChvbGQpO1xuICAgICAgdGhpcy5jdXJyZW50ID0gb2xkLmNsb25lKCk7XG4gICAgfVxuXG4gICAgcmVzdG9yZSgpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gdGhpcy50cmFuc2Zvcm1TdGFjay5wb3AoKTtcbiAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuZXh0cmFTdGFjay5wb3AoKTtcbiAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgdGhpcy50Z3JwID0gbnVsbDtcbiAgICB9XG5cbiAgICBncm91cChpdGVtcykge1xuICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICB0aGlzLmV4ZWN1dGVPcFRyZWUoaXRlbXMpO1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgbG9hZERlcGVuZGVuY2llcyhvcGVyYXRvckxpc3QpIHtcbiAgICAgIGNvbnN0IGZuQXJyYXkgPSBvcGVyYXRvckxpc3QuZm5BcnJheTtcbiAgICAgIGNvbnN0IGFyZ3NBcnJheSA9IG9wZXJhdG9yTGlzdC5hcmdzQXJyYXk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGZuQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBpZiAoZm5BcnJheVtpXSAhPT0gX3V0aWwuT1BTLmRlcGVuZGVuY3kpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgb2JqIG9mIGFyZ3NBcnJheVtpXSkge1xuICAgICAgICAgIGNvbnN0IG9ianNQb29sID0gb2JqLnN0YXJ0c1dpdGgoXCJnX1wiKSA/IHRoaXMuY29tbW9uT2JqcyA6IHRoaXMub2JqcztcbiAgICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBvYmpzUG9vbC5nZXQob2JqLCByZXNvbHZlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuZGVwZW5kZW5jaWVzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXMuY3VycmVudC5kZXBlbmRlbmNpZXMpO1xuICAgIH1cblxuICAgIHRyYW5zZm9ybShhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1NYXRyaXggPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRoaXMudHJhbnNmb3JtTWF0cml4LCB0cmFuc2Zvcm1NYXRyaXgpO1xuICAgICAgdGhpcy50Z3JwID0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTVkcob3BlcmF0b3JMaXN0LCB2aWV3cG9ydCkge1xuICAgICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0O1xuXG4gICAgICBjb25zdCBzdmdFbGVtZW50ID0gdGhpcy5faW5pdGlhbGl6ZSh2aWV3cG9ydCk7XG5cbiAgICAgIHJldHVybiB0aGlzLmxvYWREZXBlbmRlbmNpZXMob3BlcmF0b3JMaXN0KS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICAgIHRoaXMuZXhlY3V0ZU9wVHJlZSh0aGlzLmNvbnZlcnRPcExpc3Qob3BlcmF0b3JMaXN0KSk7XG4gICAgICAgIHJldHVybiBzdmdFbGVtZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29udmVydE9wTGlzdChvcGVyYXRvckxpc3QpIHtcbiAgICAgIGNvbnN0IG9wZXJhdG9ySWRNYXBwaW5nID0gdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmc7XG4gICAgICBjb25zdCBhcmdzQXJyYXkgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5O1xuICAgICAgY29uc3QgZm5BcnJheSA9IG9wZXJhdG9yTGlzdC5mbkFycmF5O1xuICAgICAgY29uc3Qgb3BMaXN0ID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGZuQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb25zdCBmbklkID0gZm5BcnJheVtpXTtcbiAgICAgICAgb3BMaXN0LnB1c2goe1xuICAgICAgICAgIGZuSWQsXG4gICAgICAgICAgZm46IG9wZXJhdG9ySWRNYXBwaW5nW2ZuSWRdLFxuICAgICAgICAgIGFyZ3M6IGFyZ3NBcnJheVtpXVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wTGlzdFRvVHJlZShvcExpc3QpO1xuICAgIH1cblxuICAgIGV4ZWN1dGVPcFRyZWUob3BUcmVlKSB7XG4gICAgICBmb3IgKGNvbnN0IG9wVHJlZUVsZW1lbnQgb2Ygb3BUcmVlKSB7XG4gICAgICAgIGNvbnN0IGZuID0gb3BUcmVlRWxlbWVudC5mbjtcbiAgICAgICAgY29uc3QgZm5JZCA9IG9wVHJlZUVsZW1lbnQuZm5JZDtcbiAgICAgICAgY29uc3QgYXJncyA9IG9wVHJlZUVsZW1lbnQuYXJncztcblxuICAgICAgICBzd2l0Y2ggKGZuSWQgfCAwKSB7XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuYmVnaW5UZXh0OlxuICAgICAgICAgICAgdGhpcy5iZWdpblRleHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZGVwZW5kZW5jeTpcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGVhZGluZzpcbiAgICAgICAgICAgIHRoaXMuc2V0TGVhZGluZyhhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGVhZGluZ01vdmVUZXh0OlxuICAgICAgICAgICAgdGhpcy5zZXRMZWFkaW5nTW92ZVRleHQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZvbnQ6XG4gICAgICAgICAgICB0aGlzLnNldEZvbnQoYXJncyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dUZXh0OlxuICAgICAgICAgICAgdGhpcy5zaG93VGV4dChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hvd1NwYWNlZFRleHQ6XG4gICAgICAgICAgICB0aGlzLnNob3dUZXh0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRUZXh0OlxuICAgICAgICAgICAgdGhpcy5lbmRUZXh0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1vdmVUZXh0OlxuICAgICAgICAgICAgdGhpcy5tb3ZlVGV4dChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Q2hhclNwYWNpbmc6XG4gICAgICAgICAgICB0aGlzLnNldENoYXJTcGFjaW5nKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRXb3JkU3BhY2luZzpcbiAgICAgICAgICAgIHRoaXMuc2V0V29yZFNwYWNpbmcoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEhTY2FsZTpcbiAgICAgICAgICAgIHRoaXMuc2V0SFNjYWxlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRUZXh0TWF0cml4OlxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0TWF0cml4KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRUZXh0UmlzZTpcbiAgICAgICAgICAgIHRoaXMuc2V0VGV4dFJpc2UoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlOlxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0UmVuZGVyaW5nTW9kZShhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGluZVdpZHRoOlxuICAgICAgICAgICAgdGhpcy5zZXRMaW5lV2lkdGgoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExpbmVKb2luOlxuICAgICAgICAgICAgdGhpcy5zZXRMaW5lSm9pbihhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGluZUNhcDpcbiAgICAgICAgICAgIHRoaXMuc2V0TGluZUNhcChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TWl0ZXJMaW1pdDpcbiAgICAgICAgICAgIHRoaXMuc2V0TWl0ZXJMaW1pdChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yOlxuICAgICAgICAgICAgdGhpcy5zZXRGaWxsUkdCQ29sb3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yOlxuICAgICAgICAgICAgdGhpcy5zZXRTdHJva2VSR0JDb2xvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3JOOlxuICAgICAgICAgICAgdGhpcy5zZXRTdHJva2VDb2xvck4oYXJncyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvck46XG4gICAgICAgICAgICB0aGlzLnNldEZpbGxDb2xvck4oYXJncyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNoYWRpbmdGaWxsOlxuICAgICAgICAgICAgdGhpcy5zaGFkaW5nRmlsbChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RGFzaDpcbiAgICAgICAgICAgIHRoaXMuc2V0RGFzaChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0UmVuZGVyaW5nSW50ZW50OlxuICAgICAgICAgICAgdGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZsYXRuZXNzOlxuICAgICAgICAgICAgdGhpcy5zZXRGbGF0bmVzcyhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0R1N0YXRlOlxuICAgICAgICAgICAgdGhpcy5zZXRHU3RhdGUoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmZpbGw6XG4gICAgICAgICAgICB0aGlzLmZpbGwoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW9GaWxsOlxuICAgICAgICAgICAgdGhpcy5lb0ZpbGwoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc3Ryb2tlOlxuICAgICAgICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZmlsbFN0cm9rZTpcbiAgICAgICAgICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lb0ZpbGxTdHJva2U6XG4gICAgICAgICAgICB0aGlzLmVvRmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jbGlwOlxuICAgICAgICAgICAgdGhpcy5jbGlwKFwibm9uemVyb1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW9DbGlwOlxuICAgICAgICAgICAgdGhpcy5jbGlwKFwiZXZlbm9kZFwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOlxuICAgICAgICAgICAgdGhpcy5wYWludFNvbGlkQ29sb3JJbWFnZU1hc2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3Q6XG4gICAgICAgICAgICB0aGlzLnBhaW50SW1hZ2VYT2JqZWN0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDpcbiAgICAgICAgICAgIHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDpcbiAgICAgICAgICAgIHRoaXMucGFpbnRJbWFnZU1hc2tYT2JqZWN0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW46XG4gICAgICAgICAgICB0aGlzLnBhaW50Rm9ybVhPYmplY3RCZWdpbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRGb3JtWE9iamVjdEVuZDpcbiAgICAgICAgICAgIHRoaXMucGFpbnRGb3JtWE9iamVjdEVuZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jbG9zZVBhdGg6XG4gICAgICAgICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jbG9zZVN0cm9rZTpcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTdHJva2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VGaWxsU3Ryb2tlOlxuICAgICAgICAgICAgdGhpcy5jbG9zZUZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VFT0ZpbGxTdHJva2U6XG4gICAgICAgICAgICB0aGlzLmNsb3NlRU9GaWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm5leHRMaW5lOlxuICAgICAgICAgICAgdGhpcy5uZXh0TGluZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy50cmFuc2Zvcm06XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY29uc3RydWN0UGF0aDpcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0UGF0aChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW5kUGF0aDpcbiAgICAgICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDkyOlxuICAgICAgICAgICAgdGhpcy5ncm91cChvcFRyZWVFbGVtZW50Lml0ZW1zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVW5pbXBsZW1lbnRlZCBvcGVyYXRvciAke2ZufWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRXb3JkU3BhY2luZyh3b3JkU3BhY2luZykge1xuICAgICAgdGhpcy5jdXJyZW50LndvcmRTcGFjaW5nID0gd29yZFNwYWNpbmc7XG4gICAgfVxuXG4gICAgc2V0Q2hhclNwYWNpbmcoY2hhclNwYWNpbmcpIHtcbiAgICAgIHRoaXMuY3VycmVudC5jaGFyU3BhY2luZyA9IGNoYXJTcGFjaW5nO1xuICAgIH1cblxuICAgIG5leHRMaW5lKCkge1xuICAgICAgdGhpcy5tb3ZlVGV4dCgwLCB0aGlzLmN1cnJlbnQubGVhZGluZyk7XG4gICAgfVxuXG4gICAgc2V0VGV4dE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY3VycmVudC50ZXh0TWF0cml4ID0gY3VycmVudC5saW5lTWF0cml4ID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgICBjdXJyZW50LnggPSBjdXJyZW50LmxpbmVYID0gMDtcbiAgICAgIGN1cnJlbnQueSA9IGN1cnJlbnQubGluZVkgPSAwO1xuICAgICAgY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICBjdXJyZW50Lnljb29yZHMgPSBbXTtcbiAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LWZhbWlseVwiLCBjdXJyZW50LmZvbnRGYW1pbHkpO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtc2l6ZVwiLCBgJHtwZihjdXJyZW50LmZvbnRTaXplKX1weGApO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgcGYoLWN1cnJlbnQueSkpO1xuICAgICAgY3VycmVudC50eHRFbGVtZW50ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6dGV4dFwiKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50LnRzcGFuKTtcbiAgICB9XG5cbiAgICBiZWdpblRleHQoKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY3VycmVudC54ID0gY3VycmVudC5saW5lWCA9IDA7XG4gICAgICBjdXJyZW50LnkgPSBjdXJyZW50LmxpbmVZID0gMDtcbiAgICAgIGN1cnJlbnQudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIGN1cnJlbnQubGluZU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIGN1cnJlbnQudGV4dE1hdHJpeFNjYWxlID0gMTtcbiAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnRleHRcIik7XG4gICAgICBjdXJyZW50LnR4dGdycCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmdcIik7XG4gICAgICBjdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgIGN1cnJlbnQueWNvb3JkcyA9IFtdO1xuICAgIH1cblxuICAgIG1vdmVUZXh0KHgsIHkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICBjdXJyZW50LnggPSBjdXJyZW50LmxpbmVYICs9IHg7XG4gICAgICBjdXJyZW50LnkgPSBjdXJyZW50LmxpbmVZICs9IHk7XG4gICAgICBjdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgIGN1cnJlbnQueWNvb3JkcyA9IFtdO1xuICAgICAgY3VycmVudC50c3BhbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnRzcGFuXCIpO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtZmFtaWx5XCIsIGN1cnJlbnQuZm9udEZhbWlseSk7XG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1zaXplXCIsIGAke3BmKGN1cnJlbnQuZm9udFNpemUpfXB4YCk7XG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBwZigtY3VycmVudC55KSk7XG4gICAgfVxuXG4gICAgc2hvd1RleHQoZ2x5cGhzKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY29uc3QgZm9udCA9IGN1cnJlbnQuZm9udDtcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTtcblxuICAgICAgaWYgKGZvbnRTaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9udFNpemVTY2FsZSA9IGN1cnJlbnQuZm9udFNpemVTY2FsZTtcbiAgICAgIGNvbnN0IGNoYXJTcGFjaW5nID0gY3VycmVudC5jaGFyU3BhY2luZztcbiAgICAgIGNvbnN0IHdvcmRTcGFjaW5nID0gY3VycmVudC53b3JkU3BhY2luZztcbiAgICAgIGNvbnN0IGZvbnREaXJlY3Rpb24gPSBjdXJyZW50LmZvbnREaXJlY3Rpb247XG4gICAgICBjb25zdCB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjtcbiAgICAgIGNvbnN0IHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDtcbiAgICAgIGNvbnN0IHNwYWNpbmdEaXIgPSB2ZXJ0aWNhbCA/IDEgOiAtMTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWTWV0cmljcyA9IGZvbnQuZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgY29uc3Qgd2lkdGhBZHZhbmNlU2NhbGUgPSBmb250U2l6ZSAqIGN1cnJlbnQuZm9udE1hdHJpeFswXTtcbiAgICAgIGxldCB4ID0gMDtcblxuICAgICAgZm9yIChjb25zdCBnbHlwaCBvZiBnbHlwaHMpIHtcbiAgICAgICAgaWYgKGdseXBoID09PSBudWxsKSB7XG4gICAgICAgICAgeCArPSBmb250RGlyZWN0aW9uICogd29yZFNwYWNpbmc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgICB4ICs9IHNwYWNpbmdEaXIgKiBnbHlwaCAqIGZvbnRTaXplIC8gMTAwMDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZztcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gZ2x5cGguZm9udENoYXI7XG4gICAgICAgIGxldCBzY2FsZWRYLCBzY2FsZWRZO1xuICAgICAgICBsZXQgd2lkdGggPSBnbHlwaC53aWR0aDtcblxuICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICBsZXQgdng7XG4gICAgICAgICAgY29uc3Qgdm1ldHJpYyA9IGdseXBoLnZtZXRyaWMgfHwgZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgICAgIHZ4ID0gZ2x5cGgudm1ldHJpYyA/IHZtZXRyaWNbMV0gOiB3aWR0aCAqIDAuNTtcbiAgICAgICAgICB2eCA9IC12eCAqIHdpZHRoQWR2YW5jZVNjYWxlO1xuICAgICAgICAgIGNvbnN0IHZ5ID0gdm1ldHJpY1syXSAqIHdpZHRoQWR2YW5jZVNjYWxlO1xuICAgICAgICAgIHdpZHRoID0gdm1ldHJpYyA/IC12bWV0cmljWzBdIDogd2lkdGg7XG4gICAgICAgICAgc2NhbGVkWCA9IHZ4IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICBzY2FsZWRZID0gKHggKyB2eSkgLyBmb250U2l6ZVNjYWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjYWxlZFggPSB4IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICBzY2FsZWRZID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbHlwaC5pc0luRm9udCB8fCBmb250Lm1pc3NpbmdGaWxlKSB7XG4gICAgICAgICAgY3VycmVudC54Y29vcmRzLnB1c2goY3VycmVudC54ICsgc2NhbGVkWCk7XG5cbiAgICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICAgIGN1cnJlbnQueWNvb3Jkcy5wdXNoKC1jdXJyZW50LnkgKyBzY2FsZWRZKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50LnRzcGFuLnRleHRDb250ZW50ICs9IGNoYXJhY3RlcjtcbiAgICAgICAgfSBlbHNlIHt9XG5cbiAgICAgICAgbGV0IGNoYXJXaWR0aDtcblxuICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlIC0gc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhcldpZHRoID0gd2lkdGggKiB3aWR0aEFkdmFuY2VTY2FsZSArIHNwYWNpbmcgKiBmb250RGlyZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgeCArPSBjaGFyV2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIGN1cnJlbnQueGNvb3Jkcy5tYXAocGYpLmpvaW4oXCIgXCIpKTtcblxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIGN1cnJlbnQueWNvb3Jkcy5tYXAocGYpLmpvaW4oXCIgXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIGN1cnJlbnQueSAtPSB4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudC54ICs9IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1mYW1pbHlcIiwgY3VycmVudC5mb250RmFtaWx5KTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LXNpemVcIiwgYCR7cGYoY3VycmVudC5mb250U2l6ZSl9cHhgKTtcblxuICAgICAgaWYgKGN1cnJlbnQuZm9udFN0eWxlICE9PSBTVkdfREVGQVVMVFMuZm9udFN0eWxlKSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LXN0eWxlXCIsIGN1cnJlbnQuZm9udFN0eWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQuZm9udFdlaWdodCAhPT0gU1ZHX0RFRkFVTFRTLmZvbnRXZWlnaHQpIHtcbiAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtd2VpZ2h0XCIsIGN1cnJlbnQuZm9udFdlaWdodCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGxTdHJva2VNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG5cbiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTCB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQuZmlsbENvbG9yICE9PSBTVkdfREVGQVVMVFMuZmlsbENvbG9yKSB7XG4gICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGxcIiwgY3VycmVudC5maWxsQ29sb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQuZmlsbEFscGhhIDwgMSkge1xuICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsLW9wYWNpdHlcIiwgY3VycmVudC5maWxsQWxwaGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIKSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICBjb25zdCBsaW5lV2lkdGhTY2FsZSA9IDEgLyAoY3VycmVudC50ZXh0TWF0cml4U2NhbGUgfHwgMSk7XG5cbiAgICAgICAgdGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhjdXJyZW50LnRzcGFuLCBsaW5lV2lkdGhTY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB0ZXh0TWF0cml4ID0gY3VycmVudC50ZXh0TWF0cml4O1xuXG4gICAgICBpZiAoY3VycmVudC50ZXh0UmlzZSAhPT0gMCkge1xuICAgICAgICB0ZXh0TWF0cml4ID0gdGV4dE1hdHJpeC5zbGljZSgpO1xuICAgICAgICB0ZXh0TWF0cml4WzVdICs9IGN1cnJlbnQudGV4dFJpc2U7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBgJHtwbSh0ZXh0TWF0cml4KX0gc2NhbGUoJHtwZih0ZXh0SFNjYWxlKX0sIC0xKWApO1xuICAgICAgY3VycmVudC50eHRFbGVtZW50LnNldEF0dHJpYnV0ZU5TKFhNTF9OUywgXCJ4bWw6c3BhY2VcIiwgXCJwcmVzZXJ2ZVwiKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50LnRzcGFuKTtcbiAgICAgIGN1cnJlbnQudHh0Z3JwLmFwcGVuZENoaWxkKGN1cnJlbnQudHh0RWxlbWVudCk7XG5cbiAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQoY3VycmVudC50eHRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBzZXRMZWFkaW5nTW92ZVRleHQoeCwgeSkge1xuICAgICAgdGhpcy5zZXRMZWFkaW5nKC15KTtcbiAgICAgIHRoaXMubW92ZVRleHQoeCwgeSk7XG4gICAgfVxuXG4gICAgYWRkRm9udFN0eWxlKGZvbnRPYmopIHtcbiAgICAgIGlmICghZm9udE9iai5kYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFkZEZvbnRTdHlsZTogTm8gZm9udCBkYXRhIGF2YWlsYWJsZSwgXCIgKyAnZW5zdXJlIHRoYXQgdGhlIFwiZm9udEV4dHJhUHJvcGVydGllc1wiIEFQSSBwYXJhbWV0ZXIgaXMgc2V0LicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuY3NzU3R5bGUpIHtcbiAgICAgICAgdGhpcy5jc3NTdHlsZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnN0eWxlXCIpO1xuICAgICAgICB0aGlzLmNzc1N0eWxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICB0aGlzLmRlZnMuYXBwZW5kQ2hpbGQodGhpcy5jc3NTdHlsZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVybCA9ICgwLCBfdXRpbC5jcmVhdGVPYmplY3RVUkwpKGZvbnRPYmouZGF0YSwgZm9udE9iai5taW1ldHlwZSwgdGhpcy5mb3JjZURhdGFTY2hlbWEpO1xuICAgICAgdGhpcy5jc3NTdHlsZS50ZXh0Q29udGVudCArPSBgQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBcIiR7Zm9udE9iai5sb2FkZWROYW1lfVwiO2AgKyBgIHNyYzogdXJsKCR7dXJsfSk7IH1cXG5gO1xuICAgIH1cblxuICAgIHNldEZvbnQoZGV0YWlscykge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGNvbnN0IGZvbnRPYmogPSB0aGlzLmNvbW1vbk9ianMuZ2V0KGRldGFpbHNbMF0pO1xuICAgICAgbGV0IHNpemUgPSBkZXRhaWxzWzFdO1xuICAgICAgY3VycmVudC5mb250ID0gZm9udE9iajtcblxuICAgICAgaWYgKHRoaXMuZW1iZWRGb250cyAmJiAhZm9udE9iai5taXNzaW5nRmlsZSAmJiAhdGhpcy5lbWJlZGRlZEZvbnRzW2ZvbnRPYmoubG9hZGVkTmFtZV0pIHtcbiAgICAgICAgdGhpcy5hZGRGb250U3R5bGUoZm9udE9iaik7XG4gICAgICAgIHRoaXMuZW1iZWRkZWRGb250c1tmb250T2JqLmxvYWRlZE5hbWVdID0gZm9udE9iajtcbiAgICAgIH1cblxuICAgICAgY3VycmVudC5mb250TWF0cml4ID0gZm9udE9iai5mb250TWF0cml4ID8gZm9udE9iai5mb250TWF0cml4IDogX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICBsZXQgYm9sZCA9IFwibm9ybWFsXCI7XG5cbiAgICAgIGlmIChmb250T2JqLmJsYWNrKSB7XG4gICAgICAgIGJvbGQgPSBcIjkwMFwiO1xuICAgICAgfSBlbHNlIGlmIChmb250T2JqLmJvbGQpIHtcbiAgICAgICAgYm9sZCA9IFwiYm9sZFwiO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpdGFsaWMgPSBmb250T2JqLml0YWxpYyA/IFwiaXRhbGljXCIgOiBcIm5vcm1hbFwiO1xuXG4gICAgICBpZiAoc2l6ZSA8IDApIHtcbiAgICAgICAgc2l6ZSA9IC1zaXplO1xuICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQuZm9udERpcmVjdGlvbiA9IDE7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQuZm9udFNpemUgPSBzaXplO1xuICAgICAgY3VycmVudC5mb250RmFtaWx5ID0gZm9udE9iai5sb2FkZWROYW1lO1xuICAgICAgY3VycmVudC5mb250V2VpZ2h0ID0gYm9sZDtcbiAgICAgIGN1cnJlbnQuZm9udFN0eWxlID0gaXRhbGljO1xuICAgICAgY3VycmVudC50c3BhbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnRzcGFuXCIpO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgcGYoLWN1cnJlbnQueSkpO1xuICAgICAgY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICBjdXJyZW50Lnljb29yZHMgPSBbXTtcbiAgICB9XG5cbiAgICBlbmRUZXh0KCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcblxuICAgICAgaWYgKGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHICYmIGN1cnJlbnQudHh0RWxlbWVudCAmJiBjdXJyZW50LnR4dEVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgIGN1cnJlbnQuZWxlbWVudCA9IGN1cnJlbnQudHh0RWxlbWVudDtcbiAgICAgICAgdGhpcy5jbGlwKFwibm9uemVyb1wiKTtcbiAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0TGluZVdpZHRoKHdpZHRoKSB7XG4gICAgICBpZiAod2lkdGggPiAwKSB7XG4gICAgICAgIHRoaXMuY3VycmVudC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRMaW5lQ2FwKHN0eWxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQubGluZUNhcCA9IExJTkVfQ0FQX1NUWUxFU1tzdHlsZV07XG4gICAgfVxuXG4gICAgc2V0TGluZUpvaW4oc3R5bGUpIHtcbiAgICAgIHRoaXMuY3VycmVudC5saW5lSm9pbiA9IExJTkVfSk9JTl9TVFlMRVNbc3R5bGVdO1xuICAgIH1cblxuICAgIHNldE1pdGVyTGltaXQobGltaXQpIHtcbiAgICAgIHRoaXMuY3VycmVudC5taXRlckxpbWl0ID0gbGltaXQ7XG4gICAgfVxuXG4gICAgc2V0U3Ryb2tlQWxwaGEoc3Ryb2tlQWxwaGEpIHtcbiAgICAgIHRoaXMuY3VycmVudC5zdHJva2VBbHBoYSA9IHN0cm9rZUFscGhhO1xuICAgIH1cblxuICAgIHNldFN0cm9rZVJHQkNvbG9yKHIsIGcsIGIpIHtcbiAgICAgIHRoaXMuY3VycmVudC5zdHJva2VDb2xvciA9IF91dGlsLlV0aWwubWFrZUNzc1JnYihyLCBnLCBiKTtcbiAgICB9XG5cbiAgICBzZXRGaWxsQWxwaGEoZmlsbEFscGhhKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuICAgIH1cblxuICAgIHNldEZpbGxSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKHIsIGcsIGIpO1xuICAgICAgdGhpcy5jdXJyZW50LnRzcGFuID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6dHNwYW5cIik7XG4gICAgICB0aGlzLmN1cnJlbnQueGNvb3JkcyA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50Lnljb29yZHMgPSBbXTtcbiAgICB9XG5cbiAgICBzZXRTdHJva2VDb2xvck4oYXJncykge1xuICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gdGhpcy5fbWFrZUNvbG9yTl9QYXR0ZXJuKGFyZ3MpO1xuICAgIH1cblxuICAgIHNldEZpbGxDb2xvck4oYXJncykge1xuICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IHRoaXMuX21ha2VDb2xvck5fUGF0dGVybihhcmdzKTtcbiAgICB9XG5cbiAgICBzaGFkaW5nRmlsbChhcmdzKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMudmlld3BvcnQud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnZpZXdwb3J0LmhlaWdodDtcblxuICAgICAgY29uc3QgaW52ID0gX3V0aWwuVXRpbC5pbnZlcnNlVHJhbnNmb3JtKHRoaXMudHJhbnNmb3JtTWF0cml4KTtcblxuICAgICAgY29uc3QgYmwgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFswLCAwXSwgaW52KTtcblxuICAgICAgY29uc3QgYnIgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFswLCBoZWlnaHRdLCBpbnYpO1xuXG4gICAgICBjb25zdCB1bCA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3dpZHRoLCAwXSwgaW52KTtcblxuICAgICAgY29uc3QgdXIgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFt3aWR0aCwgaGVpZ2h0XSwgaW52KTtcblxuICAgICAgY29uc3QgeDAgPSBNYXRoLm1pbihibFswXSwgYnJbMF0sIHVsWzBdLCB1clswXSk7XG4gICAgICBjb25zdCB5MCA9IE1hdGgubWluKGJsWzFdLCBiclsxXSwgdWxbMV0sIHVyWzFdKTtcbiAgICAgIGNvbnN0IHgxID0gTWF0aC5tYXgoYmxbMF0sIGJyWzBdLCB1bFswXSwgdXJbMF0pO1xuICAgICAgY29uc3QgeTEgPSBNYXRoLm1heChibFsxXSwgYnJbMV0sIHVsWzFdLCB1clsxXSk7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIHgwKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHkwKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ3aWR0aFwiLCB4MSAtIHgwKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgeTEgLSB5MCk7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCB0aGlzLl9tYWtlU2hhZGluZ1BhdHRlcm4oYXJncykpO1xuXG4gICAgICBpZiAodGhpcy5jdXJyZW50LmZpbGxBbHBoYSA8IDEpIHtcbiAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGwtb3BhY2l0eVwiLCB0aGlzLmN1cnJlbnQuZmlsbEFscGhhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChyZWN0KTtcbiAgICB9XG5cbiAgICBfbWFrZUNvbG9yTl9QYXR0ZXJuKGFyZ3MpIHtcbiAgICAgIGlmIChhcmdzWzBdID09PSBcIlRpbGluZ1BhdHRlcm5cIikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZVRpbGluZ1BhdHRlcm4oYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9tYWtlU2hhZGluZ1BhdHRlcm4oYXJncyk7XG4gICAgfVxuXG4gICAgX21ha2VUaWxpbmdQYXR0ZXJuKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gYXJnc1sxXTtcbiAgICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IGFyZ3NbMl07XG4gICAgICBjb25zdCBtYXRyaXggPSBhcmdzWzNdIHx8IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIGNvbnN0IFt4MCwgeTAsIHgxLCB5MV0gPSBhcmdzWzRdO1xuICAgICAgY29uc3QgeHN0ZXAgPSBhcmdzWzVdO1xuICAgICAgY29uc3QgeXN0ZXAgPSBhcmdzWzZdO1xuICAgICAgY29uc3QgcGFpbnRUeXBlID0gYXJnc1s3XTtcbiAgICAgIGNvbnN0IHRpbGluZ0lkID0gYHNoYWRpbmcke3NoYWRpbmdDb3VudCsrfWA7XG5cbiAgICAgIGNvbnN0IFt0eDAsIHR5MF0gPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFt4MCwgeTBdLCBtYXRyaXgpO1xuXG4gICAgICBjb25zdCBbdHgxLCB0eTFdID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbeDEsIHkxXSwgbWF0cml4KTtcblxuICAgICAgY29uc3QgW3hzY2FsZSwgeXNjYWxlXSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUobWF0cml4KTtcblxuICAgICAgY29uc3QgdHhzdGVwID0geHN0ZXAgKiB4c2NhbGU7XG4gICAgICBjb25zdCB0eXN0ZXAgPSB5c3RlcCAqIHlzY2FsZTtcbiAgICAgIGNvbnN0IHRpbGluZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnBhdHRlcm5cIik7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJpZFwiLCB0aWxpbmdJZCk7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJwYXR0ZXJuVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKTtcbiAgICAgIHRpbGluZy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHR4c3RlcCk7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgdHlzdGVwKTtcbiAgICAgIHRpbGluZy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgYCR7dHgwfWApO1xuICAgICAgdGlsaW5nLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBgJHt0eTB9YCk7XG4gICAgICBjb25zdCBzdmcgPSB0aGlzLnN2ZztcbiAgICAgIGNvbnN0IHRyYW5zZm9ybU1hdHJpeCA9IHRoaXMudHJhbnNmb3JtTWF0cml4O1xuICAgICAgY29uc3QgZmlsbENvbG9yID0gdGhpcy5jdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yO1xuICAgICAgY29uc3QgYmJveCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodHgxIC0gdHgwLCB0eTEgLSB0eTApO1xuICAgICAgdGhpcy5zdmcgPSBiYm94O1xuICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSBtYXRyaXg7XG5cbiAgICAgIGlmIChwYWludFR5cGUgPT09IDIpIHtcbiAgICAgICAgY29uc3QgY3NzQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IoLi4uY29sb3IpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gY3NzQ29sb3I7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZXhlY3V0ZU9wVHJlZSh0aGlzLmNvbnZlcnRPcExpc3Qob3BlcmF0b3JMaXN0KSk7XG4gICAgICB0aGlzLnN2ZyA9IHN2ZztcbiAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gdHJhbnNmb3JtTWF0cml4O1xuICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcbiAgICAgIHRoaXMuY3VycmVudC5zdHJva2VDb2xvciA9IHN0cm9rZUNvbG9yO1xuICAgICAgdGlsaW5nLmFwcGVuZENoaWxkKGJib3guY2hpbGROb2Rlc1swXSk7XG4gICAgICB0aGlzLmRlZnMuYXBwZW5kQ2hpbGQodGlsaW5nKTtcbiAgICAgIHJldHVybiBgdXJsKCMke3RpbGluZ0lkfSlgO1xuICAgIH1cblxuICAgIF9tYWtlU2hhZGluZ1BhdHRlcm4oYXJncykge1xuICAgICAgc3dpdGNoIChhcmdzWzBdKSB7XG4gICAgICAgIGNhc2UgXCJSYWRpYWxBeGlhbFwiOlxuICAgICAgICAgIGNvbnN0IHNoYWRpbmdJZCA9IGBzaGFkaW5nJHtzaGFkaW5nQ291bnQrK31gO1xuICAgICAgICAgIGNvbnN0IGNvbG9yU3RvcHMgPSBhcmdzWzNdO1xuICAgICAgICAgIGxldCBncmFkaWVudDtcblxuICAgICAgICAgIHN3aXRjaCAoYXJnc1sxXSkge1xuICAgICAgICAgICAgY2FzZSBcImF4aWFsXCI6XG4gICAgICAgICAgICAgIGNvbnN0IHBvaW50MCA9IGFyZ3NbNF07XG4gICAgICAgICAgICAgIGNvbnN0IHBvaW50MSA9IGFyZ3NbNV07XG4gICAgICAgICAgICAgIGdyYWRpZW50ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6bGluZWFyR3JhZGllbnRcIik7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaWRcIiwgc2hhZGluZ0lkKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJncmFkaWVudFVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIik7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieDFcIiwgcG9pbnQwWzBdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5MVwiLCBwb2ludDBbMV0pO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIngyXCIsIHBvaW50MVswXSk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieTJcIiwgcG9pbnQxWzFdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJyYWRpYWxcIjpcbiAgICAgICAgICAgICAgY29uc3QgZm9jYWxQb2ludCA9IGFyZ3NbNF07XG4gICAgICAgICAgICAgIGNvbnN0IGNpcmNsZVBvaW50ID0gYXJnc1s1XTtcbiAgICAgICAgICAgICAgY29uc3QgZm9jYWxSYWRpdXMgPSBhcmdzWzZdO1xuICAgICAgICAgICAgICBjb25zdCBjaXJjbGVSYWRpdXMgPSBhcmdzWzddO1xuICAgICAgICAgICAgICBncmFkaWVudCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJhZGlhbEdyYWRpZW50XCIpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImlkXCIsIHNoYWRpbmdJZCk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZ3JhZGllbnRVbml0c1wiLCBcInVzZXJTcGFjZU9uVXNlXCIpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImN4XCIsIGNpcmNsZVBvaW50WzBdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjeVwiLCBjaXJjbGVQb2ludFsxXSk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiclwiLCBjaXJjbGVSYWRpdXMpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZ4XCIsIGZvY2FsUG9pbnRbMF0pO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZ5XCIsIGZvY2FsUG9pbnRbMV0pO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZyXCIsIGZvY2FsUmFkaXVzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBSYWRpYWxBeGlhbCB0eXBlOiAke2FyZ3NbMV19YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBjb2xvclN0b3Agb2YgY29sb3JTdG9wcykge1xuICAgICAgICAgICAgY29uc3Qgc3RvcCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnN0b3BcIik7XG4gICAgICAgICAgICBzdG9wLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwib2Zmc2V0XCIsIGNvbG9yU3RvcFswXSk7XG4gICAgICAgICAgICBzdG9wLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3RvcC1jb2xvclwiLCBjb2xvclN0b3BbMV0pO1xuICAgICAgICAgICAgZ3JhZGllbnQuYXBwZW5kQ2hpbGQoc3RvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5kZWZzLmFwcGVuZENoaWxkKGdyYWRpZW50KTtcbiAgICAgICAgICByZXR1cm4gYHVybCgjJHtzaGFkaW5nSWR9KWA7XG5cbiAgICAgICAgY2FzZSBcIk1lc2hcIjpcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbmltcGxlbWVudGVkIHBhdHRlcm4gTWVzaFwiKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjYXNlIFwiRHVtbXlcIjpcbiAgICAgICAgICByZXR1cm4gXCJob3RwaW5rXCI7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gSVIgdHlwZTogJHthcmdzWzBdfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldERhc2goZGFzaEFycmF5LCBkYXNoUGhhc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudC5kYXNoQXJyYXkgPSBkYXNoQXJyYXk7XG4gICAgICB0aGlzLmN1cnJlbnQuZGFzaFBoYXNlID0gZGFzaFBoYXNlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdFBhdGgob3BzLCBhcmdzKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgbGV0IHggPSBjdXJyZW50LngsXG4gICAgICAgICAgeSA9IGN1cnJlbnQueTtcbiAgICAgIGxldCBkID0gW107XG4gICAgICBsZXQgaiA9IDA7XG5cbiAgICAgIGZvciAoY29uc3Qgb3Agb2Ygb3BzKSB7XG4gICAgICAgIHN3aXRjaCAob3AgfCAwKSB7XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucmVjdGFuZ2xlOlxuICAgICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIGNvbnN0IHh3ID0geCArIHdpZHRoO1xuICAgICAgICAgICAgY29uc3QgeWggPSB5ICsgaGVpZ2h0O1xuICAgICAgICAgICAgZC5wdXNoKFwiTVwiLCBwZih4KSwgcGYoeSksIFwiTFwiLCBwZih4dyksIHBmKHkpLCBcIkxcIiwgcGYoeHcpLCBwZih5aCksIFwiTFwiLCBwZih4KSwgcGYoeWgpLCBcIlpcIik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1vdmVUbzpcbiAgICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgZC5wdXNoKFwiTVwiLCBwZih4KSwgcGYoeSkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5saW5lVG86XG4gICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgeSA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIGQucHVzaChcIkxcIiwgcGYoeCksIHBmKHkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzpcbiAgICAgICAgICAgIHggPSBhcmdzW2ogKyA0XTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2ogKyA1XTtcbiAgICAgICAgICAgIGQucHVzaChcIkNcIiwgcGYoYXJnc1tqXSksIHBmKGFyZ3NbaiArIDFdKSwgcGYoYXJnc1tqICsgMl0pLCBwZihhcmdzW2ogKyAzXSksIHBmKHgpLCBwZih5KSk7XG4gICAgICAgICAgICBqICs9IDY7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8yOlxuICAgICAgICAgICAgZC5wdXNoKFwiQ1wiLCBwZih4KSwgcGYoeSksIHBmKGFyZ3Nbal0pLCBwZihhcmdzW2ogKyAxXSksIHBmKGFyZ3NbaiArIDJdKSwgcGYoYXJnc1tqICsgM10pKTtcbiAgICAgICAgICAgIHggPSBhcmdzW2ogKyAyXTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2ogKyAzXTtcbiAgICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzM6XG4gICAgICAgICAgICB4ID0gYXJnc1tqICsgMl07XG4gICAgICAgICAgICB5ID0gYXJnc1tqICsgM107XG4gICAgICAgICAgICBkLnB1c2goXCJDXCIsIHBmKGFyZ3Nbal0pLCBwZihhcmdzW2ogKyAxXSksIHBmKHgpLCBwZih5KSwgcGYoeCksIHBmKHkpKTtcbiAgICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VQYXRoOlxuICAgICAgICAgICAgZC5wdXNoKFwiWlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGQgPSBkLmpvaW4oXCIgXCIpO1xuXG4gICAgICBpZiAoY3VycmVudC5wYXRoICYmIG9wcy5sZW5ndGggPiAwICYmIG9wc1swXSAhPT0gX3V0aWwuT1BTLnJlY3RhbmdsZSAmJiBvcHNbMF0gIT09IF91dGlsLk9QUy5tb3ZlVG8pIHtcbiAgICAgICAgZCA9IGN1cnJlbnQucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCBcImRcIikgKyBkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudC5wYXRoID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cGF0aFwiKTtcblxuICAgICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKGN1cnJlbnQucGF0aCk7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImRcIiwgZCk7XG4gICAgICBjdXJyZW50LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgICAgIGN1cnJlbnQuZWxlbWVudCA9IGN1cnJlbnQucGF0aDtcbiAgICAgIGN1cnJlbnQuc2V0Q3VycmVudFBvaW50KHgsIHkpO1xuICAgIH1cblxuICAgIGVuZFBhdGgoKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY3VycmVudC5wYXRoID0gbnVsbDtcblxuICAgICAgaWYgKCF0aGlzLnBlbmRpbmdDbGlwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjdXJyZW50LmVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xpcElkID0gYGNsaXBwYXRoJHtjbGlwQ291bnQrK31gO1xuICAgICAgY29uc3QgY2xpcFBhdGggPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpjbGlwUGF0aFwiKTtcbiAgICAgIGNsaXBQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaWRcIiwgY2xpcElkKTtcbiAgICAgIGNsaXBQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHJhbnNmb3JtXCIsIHBtKHRoaXMudHJhbnNmb3JtTWF0cml4KSk7XG4gICAgICBjb25zdCBjbGlwRWxlbWVudCA9IGN1cnJlbnQuZWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG5cbiAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGlwID09PSBcImV2ZW5vZGRcIikge1xuICAgICAgICBjbGlwRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImNsaXAtcnVsZVwiLCBcImV2ZW5vZGRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGlwRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImNsaXAtcnVsZVwiLCBcIm5vbnplcm9cIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgY2xpcFBhdGguYXBwZW5kQ2hpbGQoY2xpcEVsZW1lbnQpO1xuICAgICAgdGhpcy5kZWZzLmFwcGVuZENoaWxkKGNsaXBQYXRoKTtcblxuICAgICAgaWYgKGN1cnJlbnQuYWN0aXZlQ2xpcFVybCkge1xuICAgICAgICBjdXJyZW50LmNsaXBHcm91cCA9IG51bGw7XG4gICAgICAgIHRoaXMuZXh0cmFTdGFjay5mb3JFYWNoKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICAgICAgcHJldi5jbGlwR3JvdXAgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgY2xpcFBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjbGlwLXBhdGhcIiwgY3VycmVudC5hY3RpdmVDbGlwVXJsKTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudC5hY3RpdmVDbGlwVXJsID0gYHVybCgjJHtjbGlwSWR9KWA7XG4gICAgICB0aGlzLnRncnAgPSBudWxsO1xuICAgIH1cblxuICAgIGNsaXAodHlwZSkge1xuICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IHR5cGU7XG4gICAgfVxuXG4gICAgY2xvc2VQYXRoKCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcblxuICAgICAgaWYgKGN1cnJlbnQucGF0aCkge1xuICAgICAgICBjb25zdCBkID0gYCR7Y3VycmVudC5wYXRoLmdldEF0dHJpYnV0ZU5TKG51bGwsIFwiZFwiKX1aYDtcbiAgICAgICAgY3VycmVudC5wYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZFwiLCBkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRMZWFkaW5nKGxlYWRpbmcpIHtcbiAgICAgIHRoaXMuY3VycmVudC5sZWFkaW5nID0gLWxlYWRpbmc7XG4gICAgfVxuXG4gICAgc2V0VGV4dFJpc2UodGV4dFJpc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudC50ZXh0UmlzZSA9IHRleHRSaXNlO1xuICAgIH1cblxuICAgIHNldFRleHRSZW5kZXJpbmdNb2RlKHRleHRSZW5kZXJpbmdNb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPSB0ZXh0UmVuZGVyaW5nTW9kZTtcbiAgICB9XG5cbiAgICBzZXRIU2NhbGUoc2NhbGUpIHtcbiAgICAgIHRoaXMuY3VycmVudC50ZXh0SFNjYWxlID0gc2NhbGUgLyAxMDA7XG4gICAgfVxuXG4gICAgc2V0UmVuZGVyaW5nSW50ZW50KGludGVudCkge31cblxuICAgIHNldEZsYXRuZXNzKGZsYXRuZXNzKSB7fVxuXG4gICAgc2V0R1N0YXRlKHN0YXRlcykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc3RhdGVzKSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgY2FzZSBcIkxXXCI6XG4gICAgICAgICAgICB0aGlzLnNldExpbmVXaWR0aCh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJMQ1wiOlxuICAgICAgICAgICAgdGhpcy5zZXRMaW5lQ2FwKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkxKXCI6XG4gICAgICAgICAgICB0aGlzLnNldExpbmVKb2luKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIk1MXCI6XG4gICAgICAgICAgICB0aGlzLnNldE1pdGVyTGltaXQodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRFwiOlxuICAgICAgICAgICAgdGhpcy5zZXREYXNoKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJSSVwiOlxuICAgICAgICAgICAgdGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRkxcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0RmxhdG5lc3ModmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRm9udFwiOlxuICAgICAgICAgICAgdGhpcy5zZXRGb250KHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkNBXCI6XG4gICAgICAgICAgICB0aGlzLnNldFN0cm9rZUFscGhhKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImNhXCI6XG4gICAgICAgICAgICB0aGlzLnNldEZpbGxBbHBoYSh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFVuaW1wbGVtZW50ZWQgZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAke2tleX1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmlsbCgpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50LmVsZW1lbnQpIHtcbiAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBjdXJyZW50LmZpbGxDb2xvcik7XG4gICAgICAgIGN1cnJlbnQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGwtb3BhY2l0eVwiLCBjdXJyZW50LmZpbGxBbHBoYSk7XG4gICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0cm9rZSgpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50LmVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhjdXJyZW50LmVsZW1lbnQpO1xuXG4gICAgICAgIGN1cnJlbnQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGxcIiwgXCJub25lXCIpO1xuICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfc2V0U3Ryb2tlQXR0cmlidXRlcyhlbGVtZW50LCBsaW5lV2lkdGhTY2FsZSA9IDEpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICBsZXQgZGFzaEFycmF5ID0gY3VycmVudC5kYXNoQXJyYXk7XG5cbiAgICAgIGlmIChsaW5lV2lkdGhTY2FsZSAhPT0gMSAmJiBkYXNoQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICBkYXNoQXJyYXkgPSBkYXNoQXJyYXkubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBsaW5lV2lkdGhTY2FsZSAqIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZVwiLCBjdXJyZW50LnN0cm9rZUNvbG9yKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdHJva2Utb3BhY2l0eVwiLCBjdXJyZW50LnN0cm9rZUFscGhhKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdHJva2UtbWl0ZXJsaW1pdFwiLCBwZihjdXJyZW50Lm1pdGVyTGltaXQpKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdHJva2UtbGluZWNhcFwiLCBjdXJyZW50LmxpbmVDYXApO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1saW5lam9pblwiLCBjdXJyZW50LmxpbmVKb2luKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdHJva2Utd2lkdGhcIiwgcGYobGluZVdpZHRoU2NhbGUgKiBjdXJyZW50LmxpbmVXaWR0aCkgKyBcInB4XCIpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1kYXNoYXJyYXlcIiwgZGFzaEFycmF5Lm1hcChwZikuam9pbihcIiBcIikpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1kYXNob2Zmc2V0XCIsIHBmKGxpbmVXaWR0aFNjYWxlICogY3VycmVudC5kYXNoUGhhc2UpICsgXCJweFwiKTtcbiAgICB9XG5cbiAgICBlb0ZpbGwoKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50LmVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsLXJ1bGVcIiwgXCJldmVub2RkXCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbGwoKTtcbiAgICB9XG5cbiAgICBmaWxsU3Ryb2tlKCkge1xuICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICAgIHRoaXMuZmlsbCgpO1xuICAgIH1cblxuICAgIGVvRmlsbFN0cm9rZSgpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGwtcnVsZVwiLCBcImV2ZW5vZGRcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICAgIH1cblxuICAgIGNsb3NlU3Ryb2tlKCkge1xuICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgIHRoaXMuc3Ryb2tlKCk7XG4gICAgfVxuXG4gICAgY2xvc2VGaWxsU3Ryb2tlKCkge1xuICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICAgIH1cblxuICAgIGNsb3NlRU9GaWxsU3Ryb2tlKCkge1xuICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgIHRoaXMuZW9GaWxsU3Ryb2tlKCk7XG4gICAgfVxuXG4gICAgcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKCkge1xuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCBcIjBcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBcIjBcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgXCIxcHhcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIFwiMXB4XCIpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGxcIiwgdGhpcy5jdXJyZW50LmZpbGxDb2xvcik7XG5cbiAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQocmVjdCk7XG4gICAgfVxuXG4gICAgcGFpbnRJbWFnZVhPYmplY3Qob2JqSWQpIHtcbiAgICAgIGNvbnN0IGltZ0RhdGEgPSB0aGlzLm9ianMuZ2V0KG9iaklkKTtcblxuICAgICAgaWYgKCFpbWdEYXRhKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgRGVwZW5kZW50IGltYWdlIHdpdGggb2JqZWN0IElEICR7b2JqSWR9IGlzIG5vdCByZWFkeSB5ZXRgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEpO1xuICAgIH1cblxuICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEsIG1hc2spIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgY29uc3QgaW1nU3JjID0gY29udmVydEltZ0RhdGFUb1BuZyhpbWdEYXRhLCB0aGlzLmZvcmNlRGF0YVNjaGVtYSwgISFtYXNrKTtcbiAgICAgIGNvbnN0IGNsaXByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCBcIjBcIik7XG4gICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgXCIwXCIpO1xuICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ3aWR0aFwiLCBwZih3aWR0aCkpO1xuICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgcGYoaGVpZ2h0KSk7XG4gICAgICB0aGlzLmN1cnJlbnQuZWxlbWVudCA9IGNsaXByZWN0O1xuICAgICAgdGhpcy5jbGlwKFwibm9uemVyb1wiKTtcbiAgICAgIGNvbnN0IGltZ0VsID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6aW1hZ2VcIik7XG4gICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhYTElOS19OUywgXCJ4bGluazpocmVmXCIsIGltZ1NyYyk7XG4gICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgXCIwXCIpO1xuICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1oZWlnaHQpKTtcbiAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgcGYod2lkdGgpICsgXCJweFwiKTtcbiAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIHBmKGhlaWdodCkgKyBcInB4XCIpO1xuICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ0cmFuc2Zvcm1cIiwgYHNjYWxlKCR7cGYoMSAvIHdpZHRoKX0gJHtwZigtMSAvIGhlaWdodCl9KWApO1xuXG4gICAgICBpZiAobWFzaykge1xuICAgICAgICBtYXNrLmFwcGVuZENoaWxkKGltZ0VsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQoaW1nRWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdChpbWdEYXRhKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY29uc3Qgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gaW1nRGF0YS5oZWlnaHQ7XG4gICAgICBjb25zdCBmaWxsQ29sb3IgPSBjdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgIGN1cnJlbnQubWFza0lkID0gYG1hc2ske21hc2tDb3VudCsrfWA7XG4gICAgICBjb25zdCBtYXNrID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6bWFza1wiKTtcbiAgICAgIG1hc2suc2V0QXR0cmlidXRlTlMobnVsbCwgXCJpZFwiLCBjdXJyZW50Lm1hc2tJZCk7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIFwiMFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIFwiMFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ3aWR0aFwiLCBwZih3aWR0aCkpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCBwZihoZWlnaHQpKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIGZpbGxDb2xvcik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwibWFza1wiLCBgdXJsKCMke2N1cnJlbnQubWFza0lkfSlgKTtcbiAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZChtYXNrKTtcblxuICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChyZWN0KTtcblxuICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChpbWdEYXRhLCBtYXNrKTtcbiAgICB9XG5cbiAgICBwYWludEZvcm1YT2JqZWN0QmVnaW4obWF0cml4LCBiYm94KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXRyaXgpICYmIG1hdHJpeC5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0obWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgbWF0cml4WzNdLCBtYXRyaXhbNF0sIG1hdHJpeFs1XSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChiYm94KSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gYmJveFsyXSAtIGJib3hbMF07XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGJib3hbM10gLSBiYm94WzFdO1xuICAgICAgICBjb25zdCBjbGlwcmVjdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCBiYm94WzBdKTtcbiAgICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIGJib3hbMV0pO1xuICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHBmKHdpZHRoKSk7XG4gICAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIHBmKGhlaWdodCkpO1xuICAgICAgICB0aGlzLmN1cnJlbnQuZWxlbWVudCA9IGNsaXByZWN0O1xuICAgICAgICB0aGlzLmNsaXAoXCJub256ZXJvXCIpO1xuICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYWludEZvcm1YT2JqZWN0RW5kKCkge31cblxuICAgIF9pbml0aWFsaXplKHZpZXdwb3J0KSB7XG4gICAgICBjb25zdCBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQpO1xuICAgICAgY29uc3QgZGVmaW5pdGlvbnMgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpkZWZzXCIpO1xuICAgICAgc3ZnLmFwcGVuZENoaWxkKGRlZmluaXRpb25zKTtcbiAgICAgIHRoaXMuZGVmcyA9IGRlZmluaXRpb25zO1xuICAgICAgY29uc3Qgcm9vdEdyb3VwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Z1wiKTtcbiAgICAgIHJvb3RHcm91cC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBwbSh2aWV3cG9ydC50cmFuc2Zvcm0pKTtcbiAgICAgIHN2Zy5hcHBlbmRDaGlsZChyb290R3JvdXApO1xuICAgICAgdGhpcy5zdmcgPSByb290R3JvdXA7XG4gICAgICByZXR1cm4gc3ZnO1xuICAgIH1cblxuICAgIF9lbnN1cmVDbGlwR3JvdXAoKSB7XG4gICAgICBpZiAoIXRoaXMuY3VycmVudC5jbGlwR3JvdXApIHtcbiAgICAgICAgY29uc3QgY2xpcEdyb3VwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Z1wiKTtcbiAgICAgICAgY2xpcEdyb3VwLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiY2xpcC1wYXRoXCIsIHRoaXMuY3VycmVudC5hY3RpdmVDbGlwVXJsKTtcbiAgICAgICAgdGhpcy5zdmcuYXBwZW5kQ2hpbGQoY2xpcEdyb3VwKTtcbiAgICAgICAgdGhpcy5jdXJyZW50LmNsaXBHcm91cCA9IGNsaXBHcm91cDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudC5jbGlwR3JvdXA7XG4gICAgfVxuXG4gICAgX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkge1xuICAgICAgaWYgKCF0aGlzLnRncnApIHtcbiAgICAgICAgdGhpcy50Z3JwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Z1wiKTtcbiAgICAgICAgdGhpcy50Z3JwLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHJhbnNmb3JtXCIsIHBtKHRoaXMudHJhbnNmb3JtTWF0cml4KSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudC5hY3RpdmVDbGlwVXJsKSB7XG4gICAgICAgICAgdGhpcy5fZW5zdXJlQ2xpcEdyb3VwKCkuYXBwZW5kQ2hpbGQodGhpcy50Z3JwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN2Zy5hcHBlbmRDaGlsZCh0aGlzLnRncnApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnRncnA7XG4gICAgfVxuXG4gIH07XG59XG5cbi8qKiovIH0pLFxuLyogMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUERGTm9kZVN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9uZXR3b3JrX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygyMCk7XG5cbjtcblxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5cbmNvbnN0IGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcblxuY29uc3QgaHR0cHMgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5cbmNvbnN0IHVybCA9IHJlcXVpcmUoXCJ1cmxcIik7XG5cbmNvbnN0IGZpbGVVcmlSZWdleCA9IC9eZmlsZTpcXC9cXC9cXC9bYS16QS1aXTpcXC8vO1xuXG5mdW5jdGlvbiBwYXJzZVVybChzb3VyY2VVcmwpIHtcbiAgY29uc3QgcGFyc2VkVXJsID0gdXJsLnBhcnNlKHNvdXJjZVVybCk7XG5cbiAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCA9PT0gXCJmaWxlOlwiIHx8IHBhcnNlZFVybC5ob3N0KSB7XG4gICAgcmV0dXJuIHBhcnNlZFVybDtcbiAgfVxuXG4gIGlmICgvXlthLXpdOlsvXFxcXF0vaS50ZXN0KHNvdXJjZVVybCkpIHtcbiAgICByZXR1cm4gdXJsLnBhcnNlKGBmaWxlOi8vLyR7c291cmNlVXJsfWApO1xuICB9XG5cbiAgaWYgKCFwYXJzZWRVcmwuaG9zdCkge1xuICAgIHBhcnNlZFVybC5wcm90b2NvbCA9IFwiZmlsZTpcIjtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWRVcmw7XG59XG5cbmNsYXNzIFBERk5vZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB0aGlzLnVybCA9IHBhcnNlVXJsKHNvdXJjZS51cmwpO1xuICAgIHRoaXMuaXNIdHRwID0gdGhpcy51cmwucHJvdG9jb2wgPT09IFwiaHR0cDpcIiB8fCB0aGlzLnVybC5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbiAgICB0aGlzLmlzRnNVcmwgPSB0aGlzLnVybC5wcm90b2NvbCA9PT0gXCJmaWxlOlwiO1xuICAgIHRoaXMuaHR0cEhlYWRlcnMgPSB0aGlzLmlzSHR0cCAmJiBzb3VyY2UuaHR0cEhlYWRlcnMgfHwge307XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgfVxuXG4gIGdldCBfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA/IHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9sb2FkZWQgOiAwO1xuICB9XG5cbiAgZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIFwiUERGTm9kZVN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLlwiKTtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IHRoaXMuaXNGc1VybCA/IG5ldyBQREZOb2RlU3RyZWFtRnNGdWxsUmVhZGVyKHRoaXMpIDogbmV3IFBERk5vZGVTdHJlYW1GdWxsUmVhZGVyKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcjtcbiAgfVxuXG4gIGdldFJhbmdlUmVhZGVyKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZW5kIDw9IHRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2VSZWFkZXIgPSB0aGlzLmlzRnNVcmwgPyBuZXcgUERGTm9kZVN0cmVhbUZzUmFuZ2VSZWFkZXIodGhpcywgc3RhcnQsIGVuZCkgOiBuZXcgUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyKHRoaXMsIHN0YXJ0LCBlbmQpO1xuXG4gICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHJhbmdlUmVhZGVyKTtcblxuICAgIHJldHVybiByYW5nZVJlYWRlcjtcbiAgfVxuXG4gIGNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikge1xuICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCk7XG5cbiAgICByZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKHJlYWRlcikge1xuICAgICAgcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZOb2RlU3RyZWFtID0gUERGTm9kZVN0cmVhbTtcblxuY2xhc3MgQmFzZUZ1bGxSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0pIHtcbiAgICB0aGlzLl91cmwgPSBzdHJlYW0udXJsO1xuICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IG51bGw7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICBjb25zdCBzb3VyY2UgPSBzdHJlYW0uc291cmNlO1xuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSBudWxsO1xuICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7XG4gICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7XG5cbiAgICBpZiAoIXRoaXMuX3JhbmdlQ2h1bmtTaXplICYmICF0aGlzLl9kaXNhYmxlUmFuZ2UpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVTdHJlYW07XG4gICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVJhbmdlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gbnVsbDtcbiAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgfVxuXG4gIGdldCBoZWFkZXJzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVuYW1lO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBnZXQgaXNSYW5nZVN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGF3YWl0IHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7XG5cbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuX3N0b3JlZEVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpO1xuXG4gICAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIHJldHVybiB0aGlzLnJlYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2FkZWQgKz0gY2h1bmsubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWQsXG4gICAgICAgIHRvdGFsOiB0aGlzLl9jb250ZW50TGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShjaHVuaykuYnVmZmVyO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdHJlYW0pIHtcbiAgICAgIHRoaXMuX2Vycm9yKHJlYXNvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHJlYXNvbik7XG4gIH1cblxuICBfZXJyb3IocmVhc29uKSB7XG4gICAgdGhpcy5fc3RvcmVkRXJyb3IgPSByZWFzb247XG5cbiAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gIH1cblxuICBfc2V0UmVhZGFibGVTdHJlYW0ocmVhZGFibGVTdHJlYW0pIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtO1xuICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwicmVhZGFibGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgIHJlYWRhYmxlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJlcnJvclwiLCByZWFzb24gPT4ge1xuICAgICAgdGhpcy5fZXJyb3IocmVhc29uKTtcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgJiYgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5fZXJyb3IobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKFwic3RyZWFtaW5nIGlzIGRpc2FibGVkXCIpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodGhpcy5fc3RvcmVkRXJyb3IpO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIEJhc2VSYW5nZVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSkge1xuICAgIHRoaXMuX3VybCA9IHN0cmVhbS51cmw7XG4gICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgIHRoaXMuX3N0b3JlZEVycm9yID0gbnVsbDtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPSBudWxsO1xuICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIGNvbnN0IHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7XG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVTdHJlYW07XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBhd2FpdCB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0b3JlZEVycm9yKSB7XG4gICAgICB0aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVuayA9IHRoaXMuX3JlYWRhYmxlU3RyZWFtLnJlYWQoKTtcblxuICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZWFkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkICs9IGNodW5rLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgIGxvYWRlZDogdGhpcy5fbG9hZGVkXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShjaHVuaykuYnVmZmVyO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdHJlYW0pIHtcbiAgICAgIHRoaXMuX2Vycm9yKHJlYXNvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHJlYXNvbik7XG4gIH1cblxuICBfZXJyb3IocmVhc29uKSB7XG4gICAgdGhpcy5fc3RvcmVkRXJyb3IgPSByZWFzb247XG5cbiAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gIH1cblxuICBfc2V0UmVhZGFibGVTdHJlYW0ocmVhZGFibGVTdHJlYW0pIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtO1xuICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwicmVhZGFibGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgIHJlYWRhYmxlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJlcnJvclwiLCByZWFzb24gPT4ge1xuICAgICAgdGhpcy5fZXJyb3IocmVhc29uKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgfVxuICB9XG5cbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVxdWVzdE9wdGlvbnMocGFyc2VkVXJsLCBoZWFkZXJzKSB7XG4gIHJldHVybiB7XG4gICAgcHJvdG9jb2w6IHBhcnNlZFVybC5wcm90b2NvbCxcbiAgICBhdXRoOiBwYXJzZWRVcmwuYXV0aCxcbiAgICBob3N0OiBwYXJzZWRVcmwuaG9zdG5hbWUsXG4gICAgcG9ydDogcGFyc2VkVXJsLnBvcnQsXG4gICAgcGF0aDogcGFyc2VkVXJsLnBhdGgsXG4gICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIGhlYWRlcnNcbiAgfTtcbn1cblxuY2xhc3MgUERGTm9kZVN0cmVhbUZ1bGxSZWFkZXIgZXh0ZW5kcyBCYXNlRnVsbFJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSkge1xuICAgIHN1cGVyKHN0cmVhbSk7XG5cbiAgICBjb25zdCBoYW5kbGVSZXNwb25zZSA9IHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbihgTWlzc2luZyBQREYgXCIke3RoaXMuX3VybH1cIi5gKTtcbiAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSBlcnJvcjtcblxuICAgICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QoZXJyb3IpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuXG4gICAgICB0aGlzLl9zZXRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSk7XG5cbiAgICAgIGNvbnN0IGdldFJlc3BvbnNlSGVhZGVyID0gbmFtZSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0cmVhbS5oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFsbG93UmFuZ2VSZXF1ZXN0cyxcbiAgICAgICAgc3VnZ2VzdGVkTGVuZ3RoXG4gICAgICB9ID0gKDAsIF9uZXR3b3JrX3V0aWxzLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzKSh7XG4gICAgICAgIGdldFJlc3BvbnNlSGVhZGVyLFxuICAgICAgICBpc0h0dHA6IHN0cmVhbS5pc0h0dHAsXG4gICAgICAgIHJhbmdlQ2h1bmtTaXplOiB0aGlzLl9yYW5nZUNodW5rU2l6ZSxcbiAgICAgICAgZGlzYWJsZVJhbmdlOiB0aGlzLl9kaXNhYmxlUmFuZ2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGFsbG93UmFuZ2VSZXF1ZXN0cztcbiAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzdWdnZXN0ZWRMZW5ndGggfHwgdGhpcy5fY29udGVudExlbmd0aDtcbiAgICAgIHRoaXMuX2ZpbGVuYW1lID0gKDAsIF9uZXR3b3JrX3V0aWxzLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGdldFJlc3BvbnNlSGVhZGVyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXJsLnByb3RvY29sID09PSBcImh0dHA6XCIpIHtcbiAgICAgIHRoaXMuX3JlcXVlc3QgPSBodHRwLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnModGhpcy5fdXJsLCBzdHJlYW0uaHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKHRoaXMuX3VybCwgc3RyZWFtLmh0dHBIZWFkZXJzKSwgaGFuZGxlUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3Qub24oXCJlcnJvclwiLCByZWFzb24gPT4ge1xuICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSByZWFzb247XG5cbiAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVxdWVzdC5lbmQoKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBERk5vZGVTdHJlYW1SYW5nZVJlYWRlciBleHRlbmRzIEJhc2VSYW5nZVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgc3RhcnQsIGVuZCkge1xuICAgIHN1cGVyKHN0cmVhbSk7XG4gICAgdGhpcy5faHR0cEhlYWRlcnMgPSB7fTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gc3RyZWFtLmh0dHBIZWFkZXJzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHN0cmVhbS5odHRwSGVhZGVyc1twcm9wZXJ0eV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2h0dHBIZWFkZXJzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuX2h0dHBIZWFkZXJzLlJhbmdlID0gYGJ5dGVzPSR7c3RhcnR9LSR7ZW5kIC0gMX1gO1xuXG4gICAgY29uc3QgaGFuZGxlUmVzcG9uc2UgPSByZXNwb25zZSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24oYE1pc3NpbmcgUERGIFwiJHt0aGlzLl91cmx9XCIuYCk7XG4gICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gZXJyb3I7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2V0UmVhZGFibGVTdHJlYW0ocmVzcG9uc2UpO1xuICAgIH07XG5cbiAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cmwucHJvdG9jb2wgPT09IFwiaHR0cDpcIikge1xuICAgICAgdGhpcy5fcmVxdWVzdCA9IGh0dHAucmVxdWVzdChjcmVhdGVSZXF1ZXN0T3B0aW9ucyh0aGlzLl91cmwsIHRoaXMuX2h0dHBIZWFkZXJzKSwgaGFuZGxlUmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChjcmVhdGVSZXF1ZXN0T3B0aW9ucyh0aGlzLl91cmwsIHRoaXMuX2h0dHBIZWFkZXJzKSwgaGFuZGxlUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3Qub24oXCJlcnJvclwiLCByZWFzb24gPT4ge1xuICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSByZWFzb247XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0LmVuZCgpO1xuICB9XG5cbn1cblxuY2xhc3MgUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlciBleHRlbmRzIEJhc2VGdWxsUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgc3VwZXIoc3RyZWFtKTtcbiAgICBsZXQgcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLl91cmwucGF0aCk7XG5cbiAgICBpZiAoZmlsZVVyaVJlZ2V4LnRlc3QodGhpcy5fdXJsLmhyZWYpKSB7XG4gICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgXCJcIik7XG4gICAgfVxuXG4gICAgZnMubHN0YXQocGF0aCwgKGVycm9yLCBzdGF0KSA9PiB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgICAgICBlcnJvciA9IG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKGBNaXNzaW5nIFBERiBcIiR7cGF0aH1cIi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KGVycm9yKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzdGF0LnNpemU7XG5cbiAgICAgIHRoaXMuX3NldFJlYWRhYmxlU3RyZWFtKGZzLmNyZWF0ZVJlYWRTdHJlYW0ocGF0aCkpO1xuXG4gICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBQREZOb2RlU3RyZWFtRnNSYW5nZVJlYWRlciBleHRlbmRzIEJhc2VSYW5nZVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgc3RhcnQsIGVuZCkge1xuICAgIHN1cGVyKHN0cmVhbSk7XG4gICAgbGV0IHBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodGhpcy5fdXJsLnBhdGgpO1xuXG4gICAgaWYgKGZpbGVVcmlSZWdleC50ZXN0KHRoaXMuX3VybC5ocmVmKSkge1xuICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXlxcLy8sIFwiXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX3NldFJlYWRhYmxlU3RyZWFtKGZzLmNyZWF0ZVJlYWRTdHJlYW0ocGF0aCwge1xuICAgICAgc3RhcnQsXG4gICAgICBlbmQ6IGVuZCAtIDFcbiAgICB9KSk7XG4gIH1cblxufVxuXG4vKioqLyB9KSxcbi8qIDIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IgPSBjcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yO1xuZXhwb3J0cy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyID0gZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcjtcbmV4cG9ydHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMgPSB2YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcztcbmV4cG9ydHMudmFsaWRhdGVSZXNwb25zZVN0YXR1cyA9IHZhbGlkYXRlUmVzcG9uc2VTdGF0dXM7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29udGVudF9kaXNwb3NpdGlvbiA9IF9fd19wZGZqc19yZXF1aXJlX18oMjEpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcyh7XG4gIGdldFJlc3BvbnNlSGVhZGVyLFxuICBpc0h0dHAsXG4gIHJhbmdlQ2h1bmtTaXplLFxuICBkaXNhYmxlUmFuZ2Vcbn0pIHtcbiAgKDAsIF91dGlsLmFzc2VydCkocmFuZ2VDaHVua1NpemUgPiAwLCBcIlJhbmdlIGNodW5rIHNpemUgbXVzdCBiZSBsYXJnZXIgdGhhbiB6ZXJvXCIpO1xuICBjb25zdCByZXR1cm5WYWx1ZXMgPSB7XG4gICAgYWxsb3dSYW5nZVJlcXVlc3RzOiBmYWxzZSxcbiAgICBzdWdnZXN0ZWRMZW5ndGg6IHVuZGVmaW5lZFxuICB9O1xuICBjb25zdCBsZW5ndGggPSBwYXJzZUludChnZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtTGVuZ3RoXCIpLCAxMCk7XG5cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGxlbmd0aCkpIHtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICB9XG5cbiAgcmV0dXJuVmFsdWVzLnN1Z2dlc3RlZExlbmd0aCA9IGxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDw9IDIgKiByYW5nZUNodW5rU2l6ZSkge1xuICAgIHJldHVybiByZXR1cm5WYWx1ZXM7XG4gIH1cblxuICBpZiAoZGlzYWJsZVJhbmdlIHx8ICFpc0h0dHApIHtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICB9XG5cbiAgaWYgKGdldFJlc3BvbnNlSGVhZGVyKFwiQWNjZXB0LVJhbmdlc1wiKSAhPT0gXCJieXRlc1wiKSB7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRFbmNvZGluZyA9IGdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1FbmNvZGluZ1wiKSB8fCBcImlkZW50aXR5XCI7XG5cbiAgaWYgKGNvbnRlbnRFbmNvZGluZyAhPT0gXCJpZGVudGl0eVwiKSB7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgfVxuXG4gIHJldHVyblZhbHVlcy5hbGxvd1JhbmdlUmVxdWVzdHMgPSB0cnVlO1xuICByZXR1cm4gcmV0dXJuVmFsdWVzO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKGdldFJlc3BvbnNlSGVhZGVyKSB7XG4gIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IGdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvblwiKTtcblxuICBpZiAoY29udGVudERpc3Bvc2l0aW9uKSB7XG4gICAgbGV0IGZpbGVuYW1lID0gKDAsIF9jb250ZW50X2Rpc3Bvc2l0aW9uLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcikoY29udGVudERpc3Bvc2l0aW9uKTtcblxuICAgIGlmIChmaWxlbmFtZS5pbmNsdWRlcyhcIiVcIikpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbGVuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lKTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuICAgIH1cblxuICAgIGlmICgvXFwucGRmJC9pLnRlc3QoZmlsZW5hbWUpKSB7XG4gICAgICByZXR1cm4gZmlsZW5hbWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3Ioc3RhdHVzLCB1cmwpIHtcbiAgaWYgKHN0YXR1cyA9PT0gNDA0IHx8IHN0YXR1cyA9PT0gMCAmJiB1cmwuc3RhcnRzV2l0aChcImZpbGU6XCIpKSB7XG4gICAgcmV0dXJuIG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKCdNaXNzaW5nIFBERiBcIicgKyB1cmwgKyAnXCIuJyk7XG4gIH1cblxuICByZXR1cm4gbmV3IF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihcIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlIChcIiArIHN0YXR1cyArICcpIHdoaWxlIHJldHJpZXZpbmcgUERGIFwiJyArIHVybCArICdcIi4nLCBzdGF0dXMpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKHN0YXR1cykge1xuICByZXR1cm4gc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDY7XG59XG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyID0gZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyO1xuXG5mdW5jdGlvbiBnZXRGaWxlbmFtZUZyb21Db250ZW50RGlzcG9zaXRpb25IZWFkZXIoY29udGVudERpc3Bvc2l0aW9uKSB7XG4gIGxldCBuZWVkc0VuY29kaW5nRml4dXAgPSB0cnVlO1xuICBsZXQgdG1wID0gdG9QYXJhbVJlZ0V4cChcImZpbGVuYW1lXFxcXCpcIiwgXCJpXCIpLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKTtcblxuICBpZiAodG1wKSB7XG4gICAgdG1wID0gdG1wWzFdO1xuICAgIGxldCBmaWxlbmFtZSA9IHJmYzI2MTZ1bnF1b3RlKHRtcCk7XG4gICAgZmlsZW5hbWUgPSB1bmVzY2FwZShmaWxlbmFtZSk7XG4gICAgZmlsZW5hbWUgPSByZmM1OTg3ZGVjb2RlKGZpbGVuYW1lKTtcbiAgICBmaWxlbmFtZSA9IHJmYzIwNDdkZWNvZGUoZmlsZW5hbWUpO1xuICAgIHJldHVybiBmaXh1cEVuY29kaW5nKGZpbGVuYW1lKTtcbiAgfVxuXG4gIHRtcCA9IHJmYzIyMzFnZXRwYXJhbShjb250ZW50RGlzcG9zaXRpb24pO1xuXG4gIGlmICh0bXApIHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHJmYzIwNDdkZWNvZGUodG1wKTtcbiAgICByZXR1cm4gZml4dXBFbmNvZGluZyhmaWxlbmFtZSk7XG4gIH1cblxuICB0bXAgPSB0b1BhcmFtUmVnRXhwKFwiZmlsZW5hbWVcIiwgXCJpXCIpLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKTtcblxuICBpZiAodG1wKSB7XG4gICAgdG1wID0gdG1wWzFdO1xuICAgIGxldCBmaWxlbmFtZSA9IHJmYzI2MTZ1bnF1b3RlKHRtcCk7XG4gICAgZmlsZW5hbWUgPSByZmMyMDQ3ZGVjb2RlKGZpbGVuYW1lKTtcbiAgICByZXR1cm4gZml4dXBFbmNvZGluZyhmaWxlbmFtZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b1BhcmFtUmVnRXhwKGF0dHJpYnV0ZVBhdHRlcm4sIGZsYWdzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoPzpefDspXFxcXHMqXCIgKyBhdHRyaWJ1dGVQYXR0ZXJuICsgXCJcXFxccyo9XFxcXHMqXCIgKyBcIihcIiArICdbXlwiO1xcXFxzXVteO1xcXFxzXSonICsgXCJ8XCIgKyAnXCIoPzpbXlwiXFxcXFxcXFxdfFxcXFxcXFxcXCI/KStcIj8nICsgXCIpXCIsIGZsYWdzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRleHRkZWNvZGUoZW5jb2RpbmcsIHZhbHVlKSB7XG4gICAgaWYgKGVuY29kaW5nKSB7XG4gICAgICBpZiAoIS9eW1xceDAwLVxceEZGXSskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcsIHtcbiAgICAgICAgICBmYXRhbDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBBcnJheS5mcm9tKHZhbHVlLCBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgICByZXR1cm4gY2guY2hhckNvZGVBdCgwKSAmIDB4ZmY7XG4gICAgICAgIH0pO1xuICAgICAgICB2YWx1ZSA9IGRlY29kZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KGJ5dGVzKSk7XG4gICAgICAgIG5lZWRzRW5jb2RpbmdGaXh1cCA9IGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoL151dGYtPzgkL2kudGVzdChlbmNvZGluZykpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHZhbHVlKSk7XG4gICAgICAgICAgICBuZWVkc0VuY29kaW5nRml4dXAgPSBmYWxzZTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBmaXh1cEVuY29kaW5nKHZhbHVlKSB7XG4gICAgaWYgKG5lZWRzRW5jb2RpbmdGaXh1cCAmJiAvW1xceDgwLVxceGZmXS8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdGV4dGRlY29kZShcInV0Zi04XCIsIHZhbHVlKTtcblxuICAgICAgaWYgKG5lZWRzRW5jb2RpbmdGaXh1cCkge1xuICAgICAgICB2YWx1ZSA9IHRleHRkZWNvZGUoXCJpc28tODg1OS0xXCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiByZmMyMjMxZ2V0cGFyYW0oY29udGVudERpc3Bvc2l0aW9uU3RyKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICAgIGxldCBtYXRjaDtcbiAgICBjb25zdCBpdGVyID0gdG9QYXJhbVJlZ0V4cChcImZpbGVuYW1lXFxcXCooKD8hMFxcXFxkKVxcXFxkKykoXFxcXCo/KVwiLCBcImlnXCIpO1xuXG4gICAgd2hpbGUgKChtYXRjaCA9IGl0ZXIuZXhlYyhjb250ZW50RGlzcG9zaXRpb25TdHIpKSAhPT0gbnVsbCkge1xuICAgICAgbGV0IFssIG4sIHF1b3QsIHBhcnRdID0gbWF0Y2g7XG4gICAgICBuID0gcGFyc2VJbnQobiwgMTApO1xuXG4gICAgICBpZiAobiBpbiBtYXRjaGVzKSB7XG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbWF0Y2hlc1tuXSA9IFtxdW90LCBwYXJ0XTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBtYXRjaGVzLmxlbmd0aDsgKytuKSB7XG4gICAgICBpZiAoIShuIGluIG1hdGNoZXMpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBsZXQgW3F1b3QsIHBhcnRdID0gbWF0Y2hlc1tuXTtcbiAgICAgIHBhcnQgPSByZmMyNjE2dW5xdW90ZShwYXJ0KTtcblxuICAgICAgaWYgKHF1b3QpIHtcbiAgICAgICAgcGFydCA9IHVuZXNjYXBlKHBhcnQpO1xuXG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgcGFydCA9IHJmYzU5ODdkZWNvZGUocGFydCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaChwYXJ0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJmYzI2MTZ1bnF1b3RlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc2xpY2UoMSkuc3BsaXQoJ1xcXFxcIicpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IHF1b3RpbmRleCA9IHBhcnRzW2ldLmluZGV4T2YoJ1wiJyk7XG5cbiAgICAgICAgaWYgKHF1b3RpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBwYXJ0c1tpXSA9IHBhcnRzW2ldLnNsaWNlKDAsIHF1b3RpbmRleCk7XG4gICAgICAgICAgcGFydHMubGVuZ3RoID0gaSArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJ0c1tpXSA9IHBhcnRzW2ldLnJlcGxhY2UoL1xcXFwoLikvZywgXCIkMVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSBwYXJ0cy5qb2luKCdcIicpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJmYzU5ODdkZWNvZGUoZXh0dmFsdWUpIHtcbiAgICBjb25zdCBlbmNvZGluZ2VuZCA9IGV4dHZhbHVlLmluZGV4T2YoXCInXCIpO1xuXG4gICAgaWYgKGVuY29kaW5nZW5kID09PSAtMSkge1xuICAgICAgcmV0dXJuIGV4dHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGVuY29kaW5nID0gZXh0dmFsdWUuc2xpY2UoMCwgZW5jb2RpbmdlbmQpO1xuICAgIGNvbnN0IGxhbmd2YWx1ZSA9IGV4dHZhbHVlLnNsaWNlKGVuY29kaW5nZW5kICsgMSk7XG4gICAgY29uc3QgdmFsdWUgPSBsYW5ndmFsdWUucmVwbGFjZSgvXlteJ10qJy8sIFwiXCIpO1xuICAgIHJldHVybiB0ZXh0ZGVjb2RlKGVuY29kaW5nLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZmMyMDQ3ZGVjb2RlKHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKFwiPT9cIikgfHwgL1tcXHgwMC1cXHgxOVxceDgwLVxceGZmXS8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvPVxcPyhbXFx3LV0qKVxcPyhbUXFCYl0pXFw/KCg/OlteP118XFw/KD8hPSkpKilcXD89L2csIGZ1bmN0aW9uIChtYXRjaGVzLCBjaGFyc2V0LCBlbmNvZGluZywgdGV4dCkge1xuICAgICAgaWYgKGVuY29kaW5nID09PSBcInFcIiB8fCBlbmNvZGluZyA9PT0gXCJRXCIpIHtcbiAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXy9nLCBcIiBcIik7XG4gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLz0oWzAtOWEtZkEtRl17Mn0pL2csIGZ1bmN0aW9uIChtYXRjaCwgaGV4KSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaGV4LCAxNikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRleHRkZWNvZGUoY2hhcnNldCwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRleHQgPSBhdG9iKHRleHQpO1xuICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgcmV0dXJuIHRleHRkZWNvZGUoY2hhcnNldCwgdGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gXCJcIjtcbn1cblxuLyoqKi8gfSksXG4vKiAyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QREZOZXR3b3JrU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX25ldHdvcmtfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIwKTtcblxuO1xuY29uc3QgT0tfUkVTUE9OU0UgPSAyMDA7XG5jb25zdCBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0UgPSAyMDY7XG5cbmZ1bmN0aW9uIGdldEFycmF5QnVmZmVyKHhocikge1xuICBjb25zdCBkYXRhID0geGhyLnJlc3BvbnNlO1xuXG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY29uc3QgYXJyYXkgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGF0YSk7XG4gIHJldHVybiBhcnJheS5idWZmZXI7XG59XG5cbmNsYXNzIE5ldHdvcmtNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IodXJsLCBhcmdzKSB7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgYXJncyA9IGFyZ3MgfHwge307XG4gICAgdGhpcy5pc0h0dHAgPSAvXmh0dHBzPzovaS50ZXN0KHVybCk7XG4gICAgdGhpcy5odHRwSGVhZGVycyA9IHRoaXMuaXNIdHRwICYmIGFyZ3MuaHR0cEhlYWRlcnMgfHwge307XG4gICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBhcmdzLndpdGhDcmVkZW50aWFscyB8fCBmYWxzZTtcblxuICAgIHRoaXMuZ2V0WGhyID0gYXJncy5nZXRYaHIgfHwgZnVuY3Rpb24gTmV0d29ya01hbmFnZXJfZ2V0WGhyKCkge1xuICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIH07XG5cbiAgICB0aGlzLmN1cnJYaHJJZCA9IDA7XG4gICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQsIGxpc3RlbmVycykge1xuICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICBiZWdpbixcbiAgICAgIGVuZFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gbGlzdGVuZXJzKSB7XG4gICAgICBhcmdzW3Byb3BdID0gbGlzdGVuZXJzW3Byb3BdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoYXJncyk7XG4gIH1cblxuICByZXF1ZXN0RnVsbChsaXN0ZW5lcnMpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGxpc3RlbmVycyk7XG4gIH1cblxuICByZXF1ZXN0KGFyZ3MpIHtcbiAgICBjb25zdCB4aHIgPSB0aGlzLmdldFhocigpO1xuICAgIGNvbnN0IHhocklkID0gdGhpcy5jdXJyWGhySWQrKztcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXSA9IHtcbiAgICAgIHhoclxuICAgIH07XG4gICAgeGhyLm9wZW4oXCJHRVRcIiwgdGhpcy51cmwpO1xuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFscztcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5odHRwSGVhZGVycykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmh0dHBIZWFkZXJzW3Byb3BlcnR5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIocHJvcGVydHksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0h0dHAgJiYgXCJiZWdpblwiIGluIGFyZ3MgJiYgXCJlbmRcIiBpbiBhcmdzKSB7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlJhbmdlXCIsIGBieXRlcz0ke2FyZ3MuYmVnaW59LSR7YXJncy5lbmQgLSAxfWApO1xuICAgICAgcGVuZGluZ1JlcXVlc3QuZXhwZWN0ZWRTdGF0dXMgPSBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzID0gT0tfUkVTUE9OU0U7XG4gICAgfVxuXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcblxuICAgIGlmIChhcmdzLm9uRXJyb3IpIHtcbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICBhcmdzLm9uRXJyb3IoeGhyLnN0YXR1cyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzLCB4aHJJZCk7XG4gICAgeGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLm9uUHJvZ3Jlc3MuYmluZCh0aGlzLCB4aHJJZCk7XG4gICAgcGVuZGluZ1JlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQgPSBhcmdzLm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSA9IGFyZ3Mub25Eb25lO1xuICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IgPSBhcmdzLm9uRXJyb3I7XG4gICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcyA9IGFyZ3Mub25Qcm9ncmVzcztcbiAgICB4aHIuc2VuZChudWxsKTtcbiAgICByZXR1cm4geGhySWQ7XG4gIH1cblxuICBvblByb2dyZXNzKHhocklkLCBldnQpIHtcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXTtcblxuICAgIGlmICghcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcykge1xuICAgICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcyhldnQpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RhdGVDaGFuZ2UoeGhySWQsIGV2dCkge1xuICAgIGNvbnN0IHBlbmRpbmdSZXF1ZXN0ID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdO1xuXG4gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHhociA9IHBlbmRpbmdSZXF1ZXN0LnhocjtcblxuICAgIGlmICh4aHIucmVhZHlTdGF0ZSA+PSAyICYmIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKSB7XG4gICAgICBwZW5kaW5nUmVxdWVzdC5vbkhlYWRlcnNSZWNlaXZlZCgpO1xuICAgICAgZGVsZXRlIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgIH1cblxuICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHhocklkIGluIHRoaXMucGVuZGluZ1JlcXVlc3RzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF07XG5cbiAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMCAmJiB0aGlzLmlzSHR0cCkge1xuICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IpIHtcbiAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25FcnJvcih4aHIuc3RhdHVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHhoclN0YXR1cyA9IHhoci5zdGF0dXMgfHwgT0tfUkVTUE9OU0U7XG4gICAgY29uc3Qgb2tfcmVzcG9uc2Vfb25fcmFuZ2VfcmVxdWVzdCA9IHhoclN0YXR1cyA9PT0gT0tfUkVTUE9OU0UgJiYgcGVuZGluZ1JlcXVlc3QuZXhwZWN0ZWRTdGF0dXMgPT09IFBBUlRJQUxfQ09OVEVOVF9SRVNQT05TRTtcblxuICAgIGlmICghb2tfcmVzcG9uc2Vfb25fcmFuZ2VfcmVxdWVzdCAmJiB4aHJTdGF0dXMgIT09IHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzKSB7XG4gICAgICBpZiAocGVuZGluZ1JlcXVlc3Qub25FcnJvcikge1xuICAgICAgICBwZW5kaW5nUmVxdWVzdC5vbkVycm9yKHhoci5zdGF0dXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSBnZXRBcnJheUJ1ZmZlcih4aHIpO1xuXG4gICAgaWYgKHhoclN0YXR1cyA9PT0gUEFSVElBTF9DT05URU5UX1JFU1BPTlNFKSB7XG4gICAgICBjb25zdCByYW5nZUhlYWRlciA9IHhoci5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtUmFuZ2VcIik7XG4gICAgICBjb25zdCBtYXRjaGVzID0gL2J5dGVzIChcXGQrKS0oXFxkKylcXC8oXFxkKykvLmV4ZWMocmFuZ2VIZWFkZXIpO1xuICAgICAgcGVuZGluZ1JlcXVlc3Qub25Eb25lKHtcbiAgICAgICAgYmVnaW46IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKSxcbiAgICAgICAgY2h1bmtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2h1bmspIHtcbiAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSh7XG4gICAgICAgIGJlZ2luOiAwLFxuICAgICAgICBjaHVua1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChwZW5kaW5nUmVxdWVzdC5vbkVycm9yKSB7XG4gICAgICBwZW5kaW5nUmVxdWVzdC5vbkVycm9yKHhoci5zdGF0dXMpO1xuICAgIH1cbiAgfVxuXG4gIGhhc1BlbmRpbmdSZXF1ZXN0cygpIHtcbiAgICBmb3IgKGNvbnN0IHhocklkIGluIHRoaXMucGVuZGluZ1JlcXVlc3RzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRSZXF1ZXN0WGhyKHhocklkKSB7XG4gICAgcmV0dXJuIHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXS54aHI7XG4gIH1cblxuICBpc1BlbmRpbmdSZXF1ZXN0KHhocklkKSB7XG4gICAgcmV0dXJuIHhocklkIGluIHRoaXMucGVuZGluZ1JlcXVlc3RzO1xuICB9XG5cbiAgYWJvcnRBbGxSZXF1ZXN0cygpIHtcbiAgICBmb3IgKGNvbnN0IHhocklkIGluIHRoaXMucGVuZGluZ1JlcXVlc3RzKSB7XG4gICAgICB0aGlzLmFib3J0UmVxdWVzdCh4aHJJZCB8IDApO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0UmVxdWVzdCh4aHJJZCkge1xuICAgIGNvbnN0IHhociA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXS54aHI7XG4gICAgZGVsZXRlIHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXTtcbiAgICB4aHIuYWJvcnQoKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBERk5ldHdvcmtTdHJlYW0ge1xuICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICB0aGlzLl9zb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhpcy5fbWFuYWdlciA9IG5ldyBOZXR3b3JrTWFuYWdlcihzb3VyY2UudXJsLCB7XG4gICAgICBodHRwSGVhZGVyczogc291cmNlLmh0dHBIZWFkZXJzLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiBzb3VyY2Uud2l0aENyZWRlbnRpYWxzXG4gICAgfSk7XG4gICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgfVxuXG4gIF9vblJhbmdlUmVxdWVzdFJlYWRlckNsb3NlZChyZWFkZXIpIHtcbiAgICBjb25zdCBpID0gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5pbmRleE9mKHJlYWRlcik7XG5cbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH1cblxuICBnZXRGdWxsUmVhZGVyKCkge1xuICAgICgwLCBfdXRpbC5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwgXCJQREZOZXR3b3JrU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuXCIpO1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbmV3IFBERk5ldHdvcmtTdHJlYW1GdWxsUmVxdWVzdFJlYWRlcih0aGlzLl9tYW5hZ2VyLCB0aGlzLl9zb3VyY2UpO1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcjtcbiAgfVxuXG4gIGdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcih0aGlzLl9tYW5hZ2VyLCBiZWdpbiwgZW5kKTtcbiAgICByZWFkZXIub25DbG9zZWQgPSB0aGlzLl9vblJhbmdlUmVxdWVzdFJlYWRlckNsb3NlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHJlYWRlcik7XG5cbiAgICByZXR1cm4gcmVhZGVyO1xuICB9XG5cbiAgY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKSB7XG4gICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWFkZXJzID0gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKTtcblxuICAgIHJlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAocmVhZGVyKSB7XG4gICAgICByZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlBERk5ldHdvcmtTdHJlYW0gPSBQREZOZXR3b3JrU3RyZWFtO1xuXG5jbGFzcyBQREZOZXR3b3JrU3RyZWFtRnVsbFJlcXVlc3RSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihtYW5hZ2VyLCBzb3VyY2UpIHtcbiAgICB0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICBjb25zdCBhcmdzID0ge1xuICAgICAgb25IZWFkZXJzUmVjZWl2ZWQ6IHRoaXMuX29uSGVhZGVyc1JlY2VpdmVkLmJpbmQodGhpcyksXG4gICAgICBvbkRvbmU6IHRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLFxuICAgICAgb25FcnJvcjogdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLFxuICAgICAgb25Qcm9ncmVzczogdGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpXG4gICAgfTtcbiAgICB0aGlzLl91cmwgPSBzb3VyY2UudXJsO1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0SWQgPSBtYW5hZ2VyLnJlcXVlc3RGdWxsKGFyZ3MpO1xuICAgIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gc291cmNlLmRpc2FibGVSYW5nZSB8fCBmYWxzZTtcbiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSA9IHNvdXJjZS5yYW5nZUNodW5rU2l6ZTtcblxuICAgIGlmICghdGhpcy5fcmFuZ2VDaHVua1NpemUgJiYgIXRoaXMuX2Rpc2FibGVSYW5nZSkge1xuICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9jYWNoZWRDaHVua3MgPSBbXTtcbiAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgfVxuXG4gIF9vbkhlYWRlcnNSZWNlaXZlZCgpIHtcbiAgICBjb25zdCBmdWxsUmVxdWVzdFhocklkID0gdGhpcy5fZnVsbFJlcXVlc3RJZDtcblxuICAgIGNvbnN0IGZ1bGxSZXF1ZXN0WGhyID0gdGhpcy5fbWFuYWdlci5nZXRSZXF1ZXN0WGhyKGZ1bGxSZXF1ZXN0WGhySWQpO1xuXG4gICAgY29uc3QgZ2V0UmVzcG9uc2VIZWFkZXIgPSBuYW1lID0+IHtcbiAgICAgIHJldHVybiBmdWxsUmVxdWVzdFhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTtcbiAgICB9O1xuXG4gICAgY29uc3Qge1xuICAgICAgYWxsb3dSYW5nZVJlcXVlc3RzLFxuICAgICAgc3VnZ2VzdGVkTGVuZ3RoXG4gICAgfSA9ICgwLCBfbmV0d29ya191dGlscy52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe1xuICAgICAgZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICBpc0h0dHA6IHRoaXMuX21hbmFnZXIuaXNIdHRwLFxuICAgICAgcmFuZ2VDaHVua1NpemU6IHRoaXMuX3JhbmdlQ2h1bmtTaXplLFxuICAgICAgZGlzYWJsZVJhbmdlOiB0aGlzLl9kaXNhYmxlUmFuZ2VcbiAgICB9KTtcblxuICAgIGlmIChhbGxvd1JhbmdlUmVxdWVzdHMpIHtcbiAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzdWdnZXN0ZWRMZW5ndGggfHwgdGhpcy5fY29udGVudExlbmd0aDtcbiAgICB0aGlzLl9maWxlbmFtZSA9ICgwLCBfbmV0d29ya191dGlscy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKShnZXRSZXNwb25zZUhlYWRlcik7XG5cbiAgICBpZiAodGhpcy5faXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QoZnVsbFJlcXVlc3RYaHJJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gIH1cblxuICBfb25Eb25lKGFyZ3MpIHtcbiAgICBpZiAoYXJncykge1xuICAgICAgaWYgKHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSB0aGlzLl9yZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICAgIHZhbHVlOiBhcmdzLmNodW5rLFxuICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkQ2h1bmtzLnB1c2goYXJncy5jaHVuayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgfVxuXG4gIF9vbkVycm9yKHN0YXR1cykge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuX3VybDtcbiAgICBjb25zdCBleGNlcHRpb24gPSAoMCwgX25ldHdvcmtfdXRpbHMuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikoc3RhdHVzLCB1cmwpO1xuICAgIHRoaXMuX3N0b3JlZEVycm9yID0gZXhjZXB0aW9uO1xuXG4gICAgdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QoZXhjZXB0aW9uKTtcblxuICAgIHRoaXMuX3JlcXVlc3RzLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3RDYXBhYmlsaXR5KSB7XG4gICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZWplY3QoZXhjZXB0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgdGhpcy5fY2FjaGVkQ2h1bmtzID0gW107XG4gIH1cblxuICBfb25Qcm9ncmVzcyhkYXRhKSB7XG4gICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgbG9hZGVkOiBkYXRhLmxvYWRlZCxcbiAgICAgICAgdG90YWw6IGRhdGEubGVuZ3RoQ29tcHV0YWJsZSA/IGRhdGEudG90YWwgOiB0aGlzLl9jb250ZW50TGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVuYW1lO1xuICB9XG5cbiAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NhY2hlZENodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHRoaXMuX2NhY2hlZENodW5rcy5zaGlmdCgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7XG5cbiAgICByZXR1cm4gcmVxdWVzdENhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNhbmNlbChyZWFzb24pIHtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVqZWN0KHJlYXNvbik7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcblxuICAgIGlmICh0aGlzLl9tYW5hZ2VyLmlzUGVuZGluZ1JlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCkpIHtcbiAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX2Z1bGxSZXF1ZXN0SWQpO1xuICAgIH1cblxuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFBERk5ldHdvcmtTdHJlYW1SYW5nZVJlcXVlc3RSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihtYW5hZ2VyLCBiZWdpbiwgZW5kKSB7XG4gICAgdGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7XG4gICAgY29uc3QgYXJncyA9IHtcbiAgICAgIG9uRG9uZTogdGhpcy5fb25Eb25lLmJpbmQodGhpcyksXG4gICAgICBvblByb2dyZXNzOiB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcylcbiAgICB9O1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG1hbmFnZXIucmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQsIGFyZ3MpO1xuICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBudWxsO1xuICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHRoaXMub25DbG9zZWQgPSBudWxsO1xuICB9XG5cbiAgX2Nsb3NlKCkge1xuICAgIGlmICh0aGlzLm9uQ2xvc2VkKSB7XG4gICAgICB0aGlzLm9uQ2xvc2VkKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIF9vbkRvbmUoZGF0YSkge1xuICAgIGNvbnN0IGNodW5rID0gZGF0YS5jaHVuaztcblxuICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSA9IHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCk7XG5cbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBjaHVuaztcbiAgICB9XG5cbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIHRoaXMuX3JlcXVlc3RzLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3RDYXBhYmlsaXR5KSB7XG4gICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuXG4gICAgdGhpcy5fY2xvc2UoKTtcbiAgfVxuXG4gIF9vblByb2dyZXNzKGV2dCkge1xuICAgIGlmICghdGhpcy5pc1N0cmVhbWluZ1N1cHBvcnRlZCAmJiB0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlYWQoKSB7XG4gICAgaWYgKHRoaXMuX3F1ZXVlZENodW5rICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHRoaXMuX3F1ZXVlZENodW5rO1xuICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBudWxsO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGNodW5rLFxuICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgIHRoaXMuX3JlcXVlc3RzLnB1c2gocmVxdWVzdENhcGFiaWxpdHkpO1xuXG4gICAgcmV0dXJuIHJlcXVlc3RDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcblxuICAgIGlmICh0aGlzLl9tYW5hZ2VyLmlzUGVuZGluZ1JlcXVlc3QodGhpcy5fcmVxdWVzdElkKSkge1xuICAgICAgdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QodGhpcy5fcmVxdWVzdElkKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jbG9zZSgpO1xuICB9XG5cbn1cblxuLyoqKi8gfSksXG4vKiAyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QREZGZXRjaFN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9uZXR3b3JrX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygyMCk7XG5cbjtcblxuZnVuY3Rpb24gY3JlYXRlRmV0Y2hPcHRpb25zKGhlYWRlcnMsIHdpdGhDcmVkZW50aWFscywgYWJvcnRDb250cm9sbGVyKSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIGhlYWRlcnMsXG4gICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIgJiYgYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICBtb2RlOiBcImNvcnNcIixcbiAgICBjcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzID8gXCJpbmNsdWRlXCIgOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgcmVkaXJlY3Q6IFwiZm9sbG93XCJcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGVhZGVycyhodHRwSGVhZGVycykge1xuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcblxuICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGh0dHBIZWFkZXJzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBodHRwSGVhZGVyc1twcm9wZXJ0eV07XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBoZWFkZXJzLmFwcGVuZChwcm9wZXJ0eSwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnM7XG59XG5cbmNsYXNzIFBERkZldGNoU3RyZWFtIHtcbiAgY29uc3RydWN0b3Ioc291cmNlKSB7XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhpcy5pc0h0dHAgPSAvXmh0dHBzPzovaS50ZXN0KHNvdXJjZS51cmwpO1xuICAgIHRoaXMuaHR0cEhlYWRlcnMgPSB0aGlzLmlzSHR0cCAmJiBzb3VyY2UuaHR0cEhlYWRlcnMgfHwge307XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgfVxuXG4gIGdldCBfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA/IHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9sb2FkZWQgOiAwO1xuICB9XG5cbiAgZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIFwiUERGRmV0Y2hTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS5cIik7XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBuZXcgUERGRmV0Y2hTdHJlYW1SZWFkZXIodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuICB9XG5cbiAgZ2V0UmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCkge1xuICAgIGlmIChlbmQgPD0gdGhpcy5fcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZWFkZXIgPSBuZXcgUERGRmV0Y2hTdHJlYW1SYW5nZVJlYWRlcih0aGlzLCBiZWdpbiwgZW5kKTtcblxuICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyZWFkZXIpO1xuXG4gICAgcmV0dXJuIHJlYWRlcjtcbiAgfVxuXG4gIGNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikge1xuICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCk7XG5cbiAgICByZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKHJlYWRlcikge1xuICAgICAgcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZGZXRjaFN0cmVhbSA9IFBERkZldGNoU3RyZWFtO1xuXG5jbGFzcyBQREZGZXRjaFN0cmVhbVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSkge1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9yZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSBudWxsO1xuICAgIGNvbnN0IHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7XG4gICAgdGhpcy5fd2l0aENyZWRlbnRpYWxzID0gc291cmNlLndpdGhDcmVkZW50aWFscyB8fCBmYWxzZTtcbiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLl9kaXNhYmxlUmFuZ2UgPSBzb3VyY2UuZGlzYWJsZVJhbmdlIHx8IGZhbHNlO1xuICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gc291cmNlLnJhbmdlQ2h1bmtTaXplO1xuXG4gICAgaWYgKCF0aGlzLl9yYW5nZUNodW5rU2l6ZSAmJiAhdGhpcy5fZGlzYWJsZVJhbmdlKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlUmFuZ2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVTdHJlYW07XG4gICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVJhbmdlO1xuICAgIHRoaXMuX2hlYWRlcnMgPSBjcmVhdGVIZWFkZXJzKHRoaXMuX3N0cmVhbS5odHRwSGVhZGVycyk7XG4gICAgY29uc3QgdXJsID0gc291cmNlLnVybDtcbiAgICBmZXRjaCh1cmwsIGNyZWF0ZUZldGNoT3B0aW9ucyh0aGlzLl9oZWFkZXJzLCB0aGlzLl93aXRoQ3JlZGVudGlhbHMsIHRoaXMuX2Fib3J0Q29udHJvbGxlcikpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKCEoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSZXNwb25zZVN0YXR1cykocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICB0aHJvdyAoMCwgX25ldHdvcmtfdXRpbHMuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikocmVzcG9uc2Uuc3RhdHVzLCB1cmwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuXG4gICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG5cbiAgICAgIGNvbnN0IGdldFJlc3BvbnNlSGVhZGVyID0gbmFtZSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5oZWFkZXJzLmdldChuYW1lKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWxsb3dSYW5nZVJlcXVlc3RzLFxuICAgICAgICBzdWdnZXN0ZWRMZW5ndGhcbiAgICAgIH0gPSAoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgIGlzSHR0cDogdGhpcy5fc3RyZWFtLmlzSHR0cCxcbiAgICAgICAgcmFuZ2VDaHVua1NpemU6IHRoaXMuX3JhbmdlQ2h1bmtTaXplLFxuICAgICAgICBkaXNhYmxlUmFuZ2U6IHRoaXMuX2Rpc2FibGVSYW5nZVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gYWxsb3dSYW5nZVJlcXVlc3RzO1xuICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHN1Z2dlc3RlZExlbmd0aCB8fCB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICAgICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX25ldHdvcmtfdXRpbHMuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikoZ2V0UmVzcG9uc2VIZWFkZXIpO1xuXG4gICAgICBpZiAoIXRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkICYmIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5jYW5jZWwobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKFwiU3RyZWFtaW5nIGlzIGRpc2FibGVkLlwiKSk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2godGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KTtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGdldCBmaWxlbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gIH1cblxuICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgfVxuXG4gIGFzeW5jIHJlYWQoKSB7XG4gICAgYXdhaXQgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGRvbmVcbiAgICB9ID0gYXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtcblxuICAgIGlmIChkb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZG9uZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2FkZWQgKz0gdmFsdWUuYnl0ZUxlbmd0aDtcblxuICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgIGxvYWRlZDogdGhpcy5fbG9hZGVkLFxuICAgICAgICB0b3RhbDogdGhpcy5fY29udGVudExlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpLmJ1ZmZlcjtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IGJ1ZmZlcixcbiAgICAgIGRvbmU6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNhbmNlbChyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fcmVhZGVyKSB7XG4gICAgICB0aGlzLl9yZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2Fib3J0Q29udHJvbGxlcikge1xuICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgUERGRmV0Y2hTdHJlYW1SYW5nZVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgYmVnaW4sIGVuZCkge1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9yZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgY29uc3Qgc291cmNlID0gc3RyZWFtLnNvdXJjZTtcbiAgICB0aGlzLl93aXRoQ3JlZGVudGlhbHMgPSBzb3VyY2Uud2l0aENyZWRlbnRpYWxzIHx8IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlU3RyZWFtO1xuXG4gICAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9oZWFkZXJzID0gY3JlYXRlSGVhZGVycyh0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpO1xuXG4gICAgdGhpcy5faGVhZGVycy5hcHBlbmQoXCJSYW5nZVwiLCBgYnl0ZXM9JHtiZWdpbn0tJHtlbmQgLSAxfWApO1xuXG4gICAgY29uc3QgdXJsID0gc291cmNlLnVybDtcbiAgICBmZXRjaCh1cmwsIGNyZWF0ZUZldGNoT3B0aW9ucyh0aGlzLl9oZWFkZXJzLCB0aGlzLl93aXRoQ3JlZGVudGlhbHMsIHRoaXMuX2Fib3J0Q29udHJvbGxlcikpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKCEoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSZXNwb25zZVN0YXR1cykocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICB0aHJvdyAoMCwgX25ldHdvcmtfdXRpbHMuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikocmVzcG9uc2Uuc3RhdHVzLCB1cmwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG5cbiAgICAgIHRoaXMuX3JlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgfSk7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGF3YWl0IHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBkb25lXG4gICAgfSA9IGF3YWl0IHRoaXMuX3JlYWRlci5yZWFkKCk7XG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGRvbmVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkICs9IHZhbHVlLmJ5dGVMZW5ndGg7XG5cbiAgICBpZiAodGhpcy5vblByb2dyZXNzKSB7XG4gICAgICB0aGlzLm9uUHJvZ3Jlc3Moe1xuICAgICAgICBsb2FkZWQ6IHRoaXMuX2xvYWRlZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpLmJ1ZmZlcjtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IGJ1ZmZlcixcbiAgICAgIGRvbmU6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNhbmNlbChyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fcmVhZGVyKSB7XG4gICAgICB0aGlzLl9yZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2Fib3J0Q29udHJvbGxlcikge1xuICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxuICB9XG5cbn1cblxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZGYuanMubWFwIiwiY29uc3QgTUlOX0RJR0lUX0NIQVJfQ09ERSA9IDQ4XG5jb25zdCBNQVhfRElHSVRfQ0hBUl9DT0RFID0gNTdcbmNvbnN0IFdISVRFU1BBQ0VfQ0hBUl9DT0RFID0gMzJcbmNvbnN0IFRBQl9DSEFSX0NPREUgPSA5XG5jb25zdCBET1RfQ0hBUl9DT0RFID0gNDZcblxuZXhwb3J0cy5yZW1vdmVMZWFkaW5nV2hpdGVzcGFjZXMgPSBmdW5jdGlvbiByZW1vdmVMZWFkaW5nV2hpdGVzcGFjZXMgKHN0cmluZykge1xuICB3aGlsZSAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IFdISVRFU1BBQ0VfQ0hBUl9DT0RFKSB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygxLCBzdHJpbmcubGVuZ3RoKVxuICB9XG4gIHJldHVybiBzdHJpbmdcbn1cblxuZXhwb3J0cy5yZW1vdmVUcmFpbGluZ1doaXRlc3BhY2VzID0gZnVuY3Rpb24gcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlcyAoc3RyaW5nKSB7XG4gIHdoaWxlIChzdHJpbmcuY2hhckNvZGVBdChzdHJpbmcubGVuZ3RoIC0gMSkgPT09IFdISVRFU1BBQ0VfQ0hBUl9DT0RFKSB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygwLCBzdHJpbmcubGVuZ3RoIC0gMSlcbiAgfVxuICByZXR1cm4gc3RyaW5nXG59XG5cbmV4cG9ydHMuaXNEaWdpdCA9IGZ1bmN0aW9uIGlzRGlnaXQgKGNoYXJDb2RlKSB7XG4gIHJldHVybiBjaGFyQ29kZSA+PSBNSU5fRElHSVRfQ0hBUl9DT0RFICYmIGNoYXJDb2RlIDw9IE1BWF9ESUdJVF9DSEFSX0NPREVcbn1cblxuZXhwb3J0cy5pc051bWJlciA9IGZ1bmN0aW9uIGlzTnVtYmVyIChzdHJpbmcpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG4gICAgaWYgKCFleHBvcnRzLmlzRGlnaXQoY2hhckNvZGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0cy5oYXNPbmx5ID0gZnVuY3Rpb24gaGFzT25seSAoc3RyaW5nLCBjaGFyKSB7XG4gIGNvbnN0IGNoYXJDb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYUNoYXJDb2RlID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcbiAgICBpZiAoYUNoYXJDb2RlICE9PSBjaGFyQ29kZSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydHMuaGFzVXBwZXJDYXNlQ2hhcmFjdGVySW5NaWRkbGVPZldvcmQgPSBmdW5jdGlvbiBoYXNVcHBlckNhc2VDaGFyYWN0ZXJJbk1pZGRsZU9mV29yZCAodGV4dCkge1xuICB2YXIgYmVnaW5uaW5nT2ZXb3JkID0gdHJ1ZVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSB0ZXh0LmNoYXJBdChpKVxuICAgIGlmIChjaGFyYWN0ZXIgPT09ICcgJykge1xuICAgICAgYmVnaW5uaW5nT2ZXb3JkID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWJlZ2lubmluZ09mV29yZCAmJiBpc05hTihjaGFyYWN0ZXIgKiAxKSAmJiBjaGFyYWN0ZXIgPT09IGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpICYmIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpICE9PSBjaGFyYWN0ZXIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgYmVnaW5uaW5nT2ZXb3JkID0gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIFJlbW92ZSB3aGl0ZXNwYWNlL2RvdHMgKyB0byB1cHBlcmNhc2VcbmV4cG9ydHMubm9ybWFsaXplZENoYXJDb2RlQXJyYXkgPSBmdW5jdGlvbiBub3JtYWxpemVkQ2hhckNvZGVBcnJheSAoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHN0cmluZy50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBleHBvcnRzLmNoYXJDb2RlQXJyYXkoc3RyaW5nKS5maWx0ZXIoY2hhckNvZGUgPT4gY2hhckNvZGUgIT09IFdISVRFU1BBQ0VfQ0hBUl9DT0RFICYmIGNoYXJDb2RlICE9PSBUQUJfQ0hBUl9DT0RFICYmIGNoYXJDb2RlICE9PSBET1RfQ0hBUl9DT0RFKVxufVxuXG5leHBvcnRzLmNoYXJDb2RlQXJyYXkgPSBmdW5jdGlvbiBjaGFyQ29kZUFycmF5IChzdHJpbmcpIHtcbiAgY29uc3QgY2hhckNvZGVzID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyQ29kZXMucHVzaChzdHJpbmcuY2hhckNvZGVBdChpKSlcbiAgfVxuICByZXR1cm4gY2hhckNvZGVzXG59XG5cbmV4cG9ydHMucHJlZml4QWZ0ZXJXaGl0ZXNwYWNlID0gZnVuY3Rpb24gcHJlZml4QWZ0ZXJXaGl0ZXNwYWNlIChwcmVmaXgsIHN0cmluZykge1xuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IFdISVRFU1BBQ0VfQ0hBUl9DT0RFKSB7XG4gICAgc3RyaW5nID0gZXhwb3J0cy5yZW1vdmVMZWFkaW5nV2hpdGVzcGFjZXMoc3RyaW5nKVxuICAgIHJldHVybiAnICcgKyBwcmVmaXggKyBzdHJpbmdcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJlZml4ICsgc3RyaW5nXG4gIH1cbn1cblxuZXhwb3J0cy5zdWZmaXhCZWZvcmVXaGl0ZXNwYWNlID0gZnVuY3Rpb24gc3VmZml4QmVmb3JlV2hpdGVzcGFjZSAoc3RyaW5nLCBzdWZmaXgpIHtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KHN0cmluZy5sZW5ndGggLSAxKSA9PT0gV0hJVEVTUEFDRV9DSEFSX0NPREUpIHtcbiAgICBzdHJpbmcgPSBleHBvcnRzLnJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZXMoc3RyaW5nKVxuICAgIHJldHVybiBzdHJpbmcgKyBzdWZmaXggKyAnICdcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyaW5nICsgc3VmZml4XG4gIH1cbn1cblxuZXhwb3J0cy5pc0xpc3RJdGVtQ2hhcmFjdGVyID0gZnVuY3Rpb24gaXNMaXN0SXRlbUNoYXJhY3RlciAoc3RyaW5nKSB7XG4gIGlmIChzdHJpbmcubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IGNoYXIgPSBzdHJpbmcuY2hhckF0KDApXG4gIHJldHVybiBjaGFyID09PSAnLScgfHwgY2hhciA9PT0gJ+KAoicgfHwgY2hhciA9PT0gJ+KAkydcbn1cblxuZXhwb3J0cy5pc0xpc3RJdGVtID0gZnVuY3Rpb24gaXNMaXN0SXRlbSAoc3RyaW5nKSB7XG4gIHJldHVybiAvXltcXHNdKlst4oCi4oCTXVtcXHNdLiokL2cudGVzdChzdHJpbmcpXG59XG5cbmV4cG9ydHMuaXNOdW1iZXJlZExpc3RJdGVtID0gZnVuY3Rpb24gaXNOdW1iZXJlZExpc3RJdGVtIChzdHJpbmcpIHtcbiAgcmV0dXJuIC9eW1xcc10qW1xcZF0qWy5dW1xcc10uKiQvZy50ZXN0KHN0cmluZylcbn1cblxuZXhwb3J0cy53b3JkTWF0Y2ggPSBmdW5jdGlvbiB3b3JkTWF0Y2ggKHN0cmluZzEsIHN0cmluZzIpIHtcbiAgY29uc3Qgd29yZHMxID0gbmV3IFNldChzdHJpbmcxLnRvVXBwZXJDYXNlKCkuc3BsaXQoJyAnKSlcbiAgY29uc3Qgd29yZHMyID0gbmV3IFNldChzdHJpbmcyLnRvVXBwZXJDYXNlKCkuc3BsaXQoJyAnKSlcbiAgY29uc3QgaW50ZXJzZWN0aW9uID0gbmV3IFNldChcbiAgICBbLi4ud29yZHMxXS5maWx0ZXIoeCA9PiB3b3JkczIuaGFzKHgpKSlcbiAgcmV0dXJuIGludGVyc2VjdGlvbi5zaXplIC8gTWF0aC5tYXgod29yZHMxLnNpemUsIHdvcmRzMi5zaXplKVxufVxuIiwiY29uc3QgeyByZW1vdmVMZWFkaW5nV2hpdGVzcGFjZXMsIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZXMsIGlzTnVtYmVyIH0gPSByZXF1aXJlKCcuL3N0cmluZy1mdW5jdGlvbnMnKVxuXG4vKipcbiAqIFJldHVybnMgYW4gaW5kZXggbnVtYmVyIGZvciBzdGFydC9lbmQgb2Ygc2VhcmNoXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG51bWVyYXRvciAtIGFyYml0cmFyeSBudW1iZXIgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge251bWJlcn0gZGVub21pbmF0b3IgLSBhcmJpdHJhcnkgbnVtYmVyIHRvIHNlYXJjaFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCAtIGxlbmd0aCBvZiB0ZXh0Q29udGVudC5pdGVtcyBhcnJheVxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEEgcmFuZ2Ugb2Ygd2hlcmUgdG8gbG9vcCBhbmQgc2VhcmNoXG4gKi9cbmNvbnN0IHNlYXJjaFJhbmdlID0gKG51bWVyYXRvciwgZGVub21pbmF0b3IsIGxlbmd0aCkgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihudW1lcmF0b3IgLyBkZW5vbWluYXRvciAqIGxlbmd0aClcbn1cblxuLyoqXG4gKiBNdXRhdGVzIGFuZCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGtleSBwYWlyIHZhbHVlIG9mIHBhZ2VJbmRleCA6IHBhZ2VOdW1cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSByYW5nZVxuICogQHBhcmFtIHtvYmplY3R9IHBhZ2VJbmRleE51bU1hcCBvYmplY3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlSW5kZXggLSBpbmRleCBvZiB0aGUgcGFnZVxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IHBhZ2VJbmRleE51bU1hcCBvYmplY3RcbiAqL1xuY29uc3Qgc2VhcmNoQXJlYSA9IChyYW5nZSwgcGFnZUluZGV4TnVtTWFwLCBwYWdlSW5kZXgpID0+IHtcbiAgZm9yIChjb25zdCB7IHN0ciB9IG9mIHJhbmdlKSB7XG4gICAgY29uc3QgdHJpbUxlYWRpbmdXaGl0ZXNwYWNlcyA9IHJlbW92ZUxlYWRpbmdXaGl0ZXNwYWNlcyhzdHIpXG4gICAgY29uc3QgdHJpbVdoaXRlc3BhY2VzID0gcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlcyh0cmltTGVhZGluZ1doaXRlc3BhY2VzKVxuICAgIGlmIChpc051bWJlcih0cmltV2hpdGVzcGFjZXMpKSB7XG4gICAgICBpZiAoIXBhZ2VJbmRleE51bU1hcFtwYWdlSW5kZXhdKSB7XG4gICAgICAgIHBhZ2VJbmRleE51bU1hcFtwYWdlSW5kZXhdID0gW11cbiAgICAgIH1cbiAgICAgIHBhZ2VJbmRleE51bU1hcFtwYWdlSW5kZXhdLnB1c2goTnVtYmVyKHRyaW1XaGl0ZXNwYWNlcykpXG4gICAgfVxuICB9XG4gIHJldHVybiBwYWdlSW5kZXhOdW1NYXBcbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBib3RoIHRvcCBhbmQgYm90dG9tIGFyZWEgYW5kIHJldHVybnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHBhZ2VJbmRleE51bU1hcCBvYmplY3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlSW5kZXggLSBpbmRleCBvZiB0aGUgcGFnZVxuICogQHBhcmFtIHthcnJheX0gaXRlbXMgLSB0ZXh0Q29udGVudC5pdGVtc1xuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IHBhZ2VJbmRleE51bU1hcCBvYmplY3RcbiAqL1xuZXhwb3J0cy5maW5kUGFnZU51bWJlcnMgPSAocGFnZUluZGV4TnVtTWFwLCBwYWdlSW5kZXgsIGl0ZW1zKSA9PiB7XG4gIGNvbnN0IHRvcEFyZWEgPSBzZWFyY2hSYW5nZSgxLCA2LCBpdGVtcy5sZW5ndGgpXG4gIGNvbnN0IGJvdHRvbUFyZWEgPSBzZWFyY2hSYW5nZSg1LCA2LCBpdGVtcy5sZW5ndGgpXG5cbiAgY29uc3QgdG9wQXJlYVJlc3VsdCA9IHNlYXJjaEFyZWEoaXRlbXMuc2xpY2UoMCwgdG9wQXJlYSksIHBhZ2VJbmRleE51bU1hcCwgcGFnZUluZGV4KVxuICByZXR1cm4gc2VhcmNoQXJlYShpdGVtcy5zbGljZShib3R0b21BcmVhKSwgdG9wQXJlYVJlc3VsdCwgcGFnZUluZGV4KVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGVuIHRoZSBwYWdlIG51bWJlciBmaXJzdCBiZWdpbnMgYW5kIHJldHVybnMgaXRcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcGFnZUluZGV4TnVtTWFwIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IEZvciBleGFtcGxlIHsgcGFnZUluZGV4OiAxMCwgcGFnZU51bTogMyB9XG4gKi9cbmV4cG9ydHMuZmluZEZpcnN0UGFnZSA9IChwYWdlSW5kZXhOdW1NYXApID0+IHtcbiAgbGV0IGNvdW50ZXIgPSAwXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYWdlSW5kZXhOdW1NYXApXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCB8fCBrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgZm9yIChsZXQgeCA9IDA7IHggPCBrZXlzLmxlbmd0aDsgeCsrKSB7XG4gICAgY29uc3QgZmlyc3RQYWdlID0gcGFnZUluZGV4TnVtTWFwW2tleXNbeF1dXG4gICAgY29uc3Qgc2Vjb25kUGFnZSA9IHBhZ2VJbmRleE51bU1hcFtrZXlzW3ggKyAxXV1cbiAgICBjb25zdCBwcmV2Q291bnRlciA9IGNvdW50ZXJcblxuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgZmlyc3RQYWdlLmxlbmd0aCAmJiBjb3VudGVyIDwgMjsgeSsrKSB7XG4gICAgICBmb3IgKGxldCB6ID0gMDsgeiA8IHNlY29uZFBhZ2UubGVuZ3RoICYmIGNvdW50ZXIgPCAyOyB6KyspIHtcbiAgICAgICAgY29uc3QgcGFnZURpZmZlcmVuY2UgPSBrZXlzW3ggKyAxXSAtIGtleXNbeF1cbiAgICAgICAgaWYgKGZpcnN0UGFnZVt5XSArIDEgPT09IHNlY29uZFBhZ2Vbel0pIHtcbiAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgfSBlbHNlIGlmIChwYWdlRGlmZmVyZW5jZSA+IDEgJiYgZmlyc3RQYWdlW3ldICsgcGFnZURpZmZlcmVuY2UgPT09IHNlY29uZFBhZ2Vbel0pIHtcbiAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYWdlRGV0YWlscyA9ICh4ID4gMCkgPyBPYmplY3QuZW50cmllcyhwYWdlSW5kZXhOdW1NYXApW3ggLSAxXSA6IE9iamVjdC5lbnRyaWVzKHBhZ2VJbmRleE51bU1hcClbeF1cbiAgICBpZiAocHJldkNvdW50ZXIgPT09IGNvdW50ZXIpIHtcbiAgICAgIGNvdW50ZXIgPSAwXG4gICAgICBwYWdlRGV0YWlscyA9IE9iamVjdC5lbnRyaWVzKHBhZ2VJbmRleE51bU1hcClbeF1cbiAgICB9IGVsc2UgaWYgKGNvdW50ZXIgPj0gMikge1xuICAgICAgcmV0dXJuIHsgcGFnZUluZGV4OiBOdW1iZXIocGFnZURldGFpbHNbMF0pLCBwYWdlTnVtOiBwYWdlRGV0YWlsc1sxXVswXSB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRleHRDb250ZW50IHdpdGggaXRlbXMgdGhhdCBoYXZlIHBhZ2VOdW0gcmVtb3ZlZFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0ZXh0Q29udGVudCBvYmplY3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlTnVtXG4gKlxuICogQHJldHVybnMge29iamVjdH0gZmlsdGVyZWRDb250ZW50IC0gdGV4dENvbnRlbnQgd2l0aG91dCBpdGVtcyB0aGF0IGhhdmUgcGFnZU51bVxuICovXG5leHBvcnRzLnJlbW92ZVBhZ2VOdW1iZXIgPSAodGV4dENvbnRlbnQsIHBhZ2VOdW0pID0+IHtcbiAgY29uc3QgZmlsdGVyZWRDb250ZW50ID0geyBpdGVtczogWy4uLnRleHRDb250ZW50Lml0ZW1zXSB9XG4gIGNvbnN0IHRvcEFyZWEgPSBzZWFyY2hSYW5nZSgxLCA2LCBmaWx0ZXJlZENvbnRlbnQuaXRlbXMubGVuZ3RoKVxuICBjb25zdCBib3R0b21BcmVhID0gc2VhcmNoUmFuZ2UoNSwgNiwgZmlsdGVyZWRDb250ZW50Lml0ZW1zLmxlbmd0aClcblxuICBmaWx0ZXJlZENvbnRlbnQuaXRlbXMgPSBmaWx0ZXJlZENvbnRlbnQuaXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlzQXRUb3AgPSBpbmRleCA+IDAgJiYgaW5kZXggPCB0b3BBcmVhXG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGluZGV4ID4gYm90dG9tQXJlYSAmJiBpbmRleCA8IGZpbHRlcmVkQ29udGVudC5pdGVtcy5sZW5ndGhcblxuICAgIHJldHVybiAoaXNBdFRvcCB8fCBpc0F0Qm90dG9tKSA/IE51bWJlcihpdGVtLnN0cikgIT09IE51bWJlcihwYWdlTnVtKSA6IGl0ZW1cbiAgfSlcbiAgcmV0dXJuIGZpbHRlcmVkQ29udGVudFxufVxuIiwiLy8gQSBhYnN0cmFjdCBQYWdlSXRlbSBjbGFzcywgY2FuIGJlIFRleHRJdGVtLCBMaW5lSXRlbSBvciBMaW5lSXRlbUJsb2NrXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBhZ2VJdGVtIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gUGFnZUl0ZW0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NhbiBub3QgY29uc3RydWN0IGFic3RyYWN0IGNsYXNzLicpXG4gICAgfVxuICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZVxuICAgIHRoaXMuYW5ub3RhdGlvbiA9IG9wdGlvbnMuYW5ub3RhdGlvblxuICAgIHRoaXMucGFyc2VkRWxlbWVudHMgPSBvcHRpb25zLnBhcnNlZEVsZW1lbnRzXG4gIH1cbn1cbiIsImNvbnN0IFBhZ2VJdGVtID0gcmVxdWlyZSgnLi9QYWdlSXRlbScpXG5cbi8vIEEgdGV4dCBpdGVtLCBpLmUuIGEgbGluZSBvciBhIHdvcmQgd2l0aGluIGEgcGFnZVxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBUZXh0SXRlbSBleHRlbmRzIFBhZ2VJdGVtIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKVxuICAgIHRoaXMueCA9IG9wdGlvbnMueFxuICAgIHRoaXMueSA9IG9wdGlvbnMueVxuICAgIHRoaXMud2lkdGggPSBvcHRpb25zLndpZHRoXG4gICAgdGhpcy5oZWlnaHQgPSBvcHRpb25zLmhlaWdodFxuICAgIHRoaXMudGV4dCA9IG9wdGlvbnMudGV4dFxuICAgIHRoaXMuZm9udCA9IG9wdGlvbnMuZm9udFxuXG4gICAgdGhpcy5saW5lRm9ybWF0ID0gb3B0aW9ucy5saW5lRm9ybWF0XG4gICAgdGhpcy51bm9wZW5lZEZvcm1hdCA9IG9wdGlvbnMudW5vcGVuZWRGb3JtYXRcbiAgICB0aGlzLnVuY2xvc2VkRm9ybWF0ID0gb3B0aW9ucy51bmNsb3NlZEZvcm1hdFxuICB9XG59XG4iLCIvLyBBIHBhZ2Ugd2hpY2ggaG9sZHMgUGFnZUl0ZW1zIGRpc3BsYXlhYmxlIHZpYSBQZGZQYWdlVmlld1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQYWdlIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleFxuICAgIHRoaXMuaXRlbXMgPSBvcHRpb25zLml0ZW1zIHx8IFtdIC8vIFBhZ2VJdGVtXG4gIH1cbn1cbiIsImNvbnN0IHBkZmpzID0gcmVxdWlyZSgncGRmanMtZGlzdCcpXG5jb25zdCB7IGZpbmRQYWdlTnVtYmVycywgZmluZEZpcnN0UGFnZSwgcmVtb3ZlUGFnZU51bWJlciB9ID0gcmVxdWlyZSgnLi4vLi4vbGliL3V0aWwvcGFnZS1udW1iZXItZnVuY3Rpb25zJylcbmNvbnN0IFRleHRJdGVtID0gcmVxdWlyZSgnLi4vbW9kZWxzL1RleHRJdGVtJylcbmNvbnN0IFBhZ2UgPSByZXF1aXJlKCcuLi9tb2RlbHMvUGFnZScpXG5cbmNvbnN0IE5PX09QID0gKCkgPT4ge31cblxuZXhwb3J0cy5wYXJzZSA9IGFzeW5jIGZ1bmN0aW9uIHBhcnNlIChwZGZEb2N1bWVudCwgY2FsbGJhY2tzKSB7XG4gIGNvbnN0IHsgbWV0YWRhdGFQYXJzZWQsIHBhZ2VQYXJzZWQsIGZvbnRQYXJzZWQsIGRvY3VtZW50UGFyc2VkIH0gPSB7XG4gICAgbWV0YWRhdGFQYXJzZWQ6IE5PX09QLFxuICAgIHBhZ2VQYXJzZWQ6IE5PX09QLFxuICAgIGZvbnRQYXJzZWQ6IE5PX09QLFxuICAgIGRvY3VtZW50UGFyc2VkOiBOT19PUCxcbiAgICAuLi4oY2FsbGJhY2tzIHx8IHt9KSxcbiAgfVxuICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHBkZkRvY3VtZW50LmdldE1ldGFkYXRhKClcbiAgbWV0YWRhdGFQYXJzZWQobWV0YWRhdGEpXG5cbiAgY29uc3QgcGFnZXMgPSBbLi4uQXJyYXkocGRmRG9jdW1lbnQubnVtUGFnZXMpLmtleXMoKV0ubWFwKFxuICAgIGluZGV4ID0+IG5ldyBQYWdlKHsgaW5kZXggfSlcbiAgKVxuXG4gIGRvY3VtZW50UGFyc2VkKHBkZkRvY3VtZW50LCBwYWdlcylcblxuICBjb25zdCBmb250cyA9IHtcbiAgICBpZHM6IG5ldyBTZXQoKSxcbiAgICBtYXA6IG5ldyBNYXAoKSxcbiAgfVxuXG4gIGxldCBwYWdlSW5kZXhOdW1NYXAgPSB7fVxuICBsZXQgZmlyc3RQYWdlXG4gIGZvciAobGV0IGogPSAxOyBqIDw9IHBkZkRvY3VtZW50Lm51bVBhZ2VzOyBqKyspIHtcbiAgICBjb25zdCBwYWdlID0gYXdhaXQgcGRmRG9jdW1lbnQuZ2V0UGFnZShqKVxuICAgIGNvbnN0IHRleHRDb250ZW50ID0gYXdhaXQgcGFnZS5nZXRUZXh0Q29udGVudCgpXG5cbiAgICBpZiAoT2JqZWN0LmtleXMocGFnZUluZGV4TnVtTWFwKS5sZW5ndGggPCAxMCkge1xuICAgICAgcGFnZUluZGV4TnVtTWFwID0gZmluZFBhZ2VOdW1iZXJzKHBhZ2VJbmRleE51bU1hcCwgcGFnZS5wYWdlSW5kZXgsIHRleHRDb250ZW50Lml0ZW1zKVxuICAgIH0gZWxzZSB7XG4gICAgICBmaXJzdFBhZ2UgPSBmaW5kRmlyc3RQYWdlKHBhZ2VJbmRleE51bU1hcClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgbGV0IHBhZ2VOdW0gPSAwOyAvLyBmaXJzdFBhZ2UucGFnZU51bVxuICBmb3IgKGxldCBqID0gMTsgaiA8PSBwZGZEb2N1bWVudC5udW1QYWdlczsgaisrKSB7XG4gICAgY29uc3QgcGFnZSA9IGF3YWl0IHBkZkRvY3VtZW50LmdldFBhZ2UoailcblxuICAgIC8vIFRyaWdnZXIgdGhlIGZvbnQgcmV0cmlldmFsIGZvciB0aGUgcGFnZVxuICAgIGF3YWl0IHBhZ2UuZ2V0T3BlcmF0b3JMaXN0KClcblxuICAgIGNvbnN0IHNjYWxlID0gMS4wXG4gICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGUgfSlcbiAgICBsZXQgdGV4dENvbnRlbnQgPSBhd2FpdCBwYWdlLmdldFRleHRDb250ZW50KClcbiAgICBpZiAoZmlyc3RQYWdlICYmIHBhZ2UucGFnZUluZGV4ID49IGZpcnN0UGFnZS5wYWdlSW5kZXgpIHtcbiAgICAgIHRleHRDb250ZW50ID0gcmVtb3ZlUGFnZU51bWJlcih0ZXh0Q29udGVudCwgcGFnZU51bSlcbiAgICAgIHBhZ2VOdW0rK1xuICAgIH1cbiAgICBjb25zdCB0ZXh0SXRlbXMgPSB0ZXh0Q29udGVudC5pdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCB0eCA9IHBkZmpzLlV0aWwudHJhbnNmb3JtKFxuICAgICAgICB2aWV3cG9ydC50cmFuc2Zvcm0sXG4gICAgICAgIGl0ZW0udHJhbnNmb3JtXG4gICAgICApXG5cbiAgICAgIGNvbnN0IGZvbnRIZWlnaHQgPSBNYXRoLnNxcnQoKHR4WzJdICogdHhbMl0pICsgKHR4WzNdICogdHhbM10pKVxuICAgICAgY29uc3QgZGl2aWRlZEhlaWdodCA9IGl0ZW0uaGVpZ2h0IC8gZm9udEhlaWdodFxuICAgICAgcmV0dXJuIG5ldyBUZXh0SXRlbSh7XG4gICAgICAgIHg6IE1hdGgucm91bmQoaXRlbS50cmFuc2Zvcm1bNF0pLFxuICAgICAgICB5OiBNYXRoLnJvdW5kKGl0ZW0udHJhbnNmb3JtWzVdKSxcbiAgICAgICAgd2lkdGg6IE1hdGgucm91bmQoaXRlbS53aWR0aCksXG4gICAgICAgIGhlaWdodDogTWF0aC5yb3VuZChkaXZpZGVkSGVpZ2h0IDw9IDEgPyBpdGVtLmhlaWdodCA6IGRpdmlkZWRIZWlnaHQpLFxuICAgICAgICB0ZXh0OiBpdGVtLnN0cixcbiAgICAgICAgZm9udDogaXRlbS5mb250TmFtZSxcbiAgICAgIH0pXG4gICAgfSlcbiAgICBwYWdlc1tqIC0gMV0uaXRlbXMgPSB0ZXh0SXRlbXNcbiAgICBwYWdlUGFyc2VkKHBhZ2VzKVxuXG4gICAgY29uc3QgZm9udElkcyA9IG5ldyBTZXQodGV4dEl0ZW1zLm1hcCh0ID0+IHQuZm9udCkpXG4gICAgZm9yIChjb25zdCBmb250SWQgb2YgZm9udElkcykge1xuICAgICAgaWYgKCFmb250cy5pZHMuaGFzKGZvbnRJZCkgJiYgZm9udElkLnN0YXJ0c1dpdGgoJ2dfZCcpKSB7XG4gICAgICAgIC8vIERlcGVuZGluZyBvbiB3aGljaCBidWlsZCBvZiBwZGZqcy1kaXN0IGlzIHVzZWQsIHRoZVxuICAgICAgICAvLyBXb3JrZXJUcmFuc3BvcnQgY29udGFpbmluZyB0aGUgZm9udCBvYmplY3RzIGlzIGVpdGhlciB0cmFuc3BvcnQgb3IgX3RyYW5zcG9ydFxuICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSBwZGZEb2N1bWVudC50cmFuc3BvcnQgfHwgcGRmRG9jdW1lbnQuX3RyYW5zcG9ydCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgICAgIGNvbnN0IGZvbnQgPSBhd2FpdCBuZXcgUHJvbWlzZShcbiAgICAgICAgICByZXNvbHZlID0+IHRyYW5zcG9ydC5jb21tb25PYmpzLmdldChmb250SWQsIHJlc29sdmUpXG4gICAgICAgIClcbiAgICAgICAgZm9udHMuaWRzLmFkZChmb250SWQpXG4gICAgICAgIGZvbnRzLm1hcC5zZXQoZm9udElkLCBmb250KVxuICAgICAgICBmb250UGFyc2VkKGZvbnRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGZvbnRzLFxuICAgIG1ldGFkYXRhLFxuICAgIHBhZ2VzLFxuICAgIHBkZkRvY3VtZW50LFxuICB9XG59XG4iLCIvLyBAZmxvd1xuXG4vKjo6XG5pbXBvcnQgUGFyc2VSZXN1bHQgZnJvbSAnLi4vLi4vUGFyc2VSZXN1bHQnXG4qL1xuXG4vLyBBIHRyYW5zZm9ybWF0aW9uIGZyb20gYW4gUGRmUGFnZSB0byBhbiBQZGZQYWdlXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFRyYW5zZm9ybWF0aW9uIHtcbiAgY29uc3RydWN0b3IgKG5hbWUsIGl0ZW1UeXBlKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW4gbm90IGNvbnN0cnVjdCBhYnN0cmFjdCBjbGFzcy4nKVxuICAgIH1cbiAgICBpZiAodGhpcy50cmFuc2Zvcm0gPT09IFRyYW5zZm9ybWF0aW9uLnByb3RvdHlwZS50cmFuc2Zvcm0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQbGVhc2UgaW1wbGVtZW50IGFic3RyYWN0IG1ldGhvZCAndHJhbnNmb3JtKCknLlwiKVxuICAgIH1cbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlXG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gYW4gaW5jb21pbmcgUGFyc2VSZXN1bHQgaW50byBhbiBvdXRnb2luZyBQYXJzZVJlc3VsdFxuICB0cmFuc2Zvcm0gKHBhcnNlUmVzdWx0IC8qOiBQYXJzZVJlc3VsdCAqLykgLyo6IFBhcnNlUmVzdWx0ICovIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RvIG5vdCBjYWxsIGFic3RyYWN0IG1ldGhvZCBmb28gZnJvbSBjaGlsZC4nKVxuICB9XG5cbiAgLy8gU29tZXRpbWVzIHRoZSB0cmFuc2Zvcm0oKSBkb2VzIG9ubHkgdmlzdWFsaXplIGEgY2hhbmdlLiBUaGlzIG1ldGhvZHMgdGhlbiBkb2VzIHRoZSBhY3R1YWwgY2hhbmdlLlxuICBjb21wbGV0ZVRyYW5zZm9ybSAocGFyc2VSZXN1bHQgLyo6IFBhcnNlUmVzdWx0ICovKSAvKjogUGFyc2VSZXN1bHQgKi8geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgcGFyc2VSZXN1bHQubWVzc2FnZXMgPSBbXVxuICAgIHJldHVybiBwYXJzZVJlc3VsdFxuICB9XG59XG4iLCIvLyBBbm5vdGF0aW9uIGZvciBhIHRleHQgaXRlbVxuY2xhc3MgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yIChvcHRpb25zKSB7XG4gICAgdGhpcy5jYXRlZ29yeSA9IG9wdGlvbnMuY2F0ZWdvcnlcbiAgICB0aGlzLmNvbG9yID0gb3B0aW9ucy5jb2xvclxuICB9XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IEFubm90YXRpb25cblxuZXhwb3J0cy5BRERFRF9BTk5PVEFUSU9OID0gbmV3IEFubm90YXRpb24oe1xuICBjYXRlZ29yeTogJ0FkZGVkJyxcbiAgY29sb3I6ICdncmVlbicsXG59KVxuXG5leHBvcnRzLlJFTU9WRURfQU5OT1RBVElPTiA9IG5ldyBBbm5vdGF0aW9uKHtcbiAgY2F0ZWdvcnk6ICdSZW1vdmVkJyxcbiAgY29sb3I6ICdyZWQnLFxufSlcblxuZXhwb3J0cy5VTkNIQU5HRURfQU5OT1RBVElPTiA9IG5ldyBBbm5vdGF0aW9uKHtcbiAgY2F0ZWdvcnk6ICdVbmNoYW5nZWQnLFxuICBjb2xvcjogJ2Jyb3duJyxcbn0pXG5cbmV4cG9ydHMuREVURUNURURfQU5OT1RBVElPTiA9IG5ldyBBbm5vdGF0aW9uKHtcbiAgY2F0ZWdvcnk6ICdEZXRlY3RlZCcsXG4gIGNvbG9yOiAnZ3JlZW4nLFxufSlcblxuZXhwb3J0cy5NT0RJRklFRF9BTk5PVEFUSU9OID0gbmV3IEFubm90YXRpb24oe1xuICBjYXRlZ29yeTogJ01vZGlmaWVkJyxcbiAgY29sb3I6ICdncmVlbicsXG59KVxuIiwiLy8gQGZsb3dcblxuLyo6OlxuaW1wb3J0IFBhcnNlUmVzdWx0IGZyb20gJy4uL1BhcnNlUmVzdWx0J1xuKi9cblxuY29uc3QgVHJhbnNmb3JtYXRpb24gPSByZXF1aXJlKCcuL1RyYW5zZm9ybWF0aW9uJylcbmNvbnN0IFRleHRJdGVtID0gcmVxdWlyZSgnLi4vVGV4dEl0ZW0nKVxuY29uc3QgeyBSRU1PVkVEX0FOTk9UQVRJT04gfSA9IHJlcXVpcmUoJy4uL0Fubm90YXRpb24nKVxuXG4vLyBBYnN0cmFjdCBjbGFzcyBmb3IgdHJhbnNmb3JtYXRpb25zIHByb2R1Y2luZyBUZXh0SXRlbShzKSB0byBiZSBzaG93biBpbiB0aGUgVGV4dEl0ZW1QYWdlVmlld1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBUb1RleHRJdGVtVHJhbnNmb3JtYXRpb24gZXh0ZW5kcyBUcmFuc2Zvcm1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yIChuYW1lKSB7XG4gICAgc3VwZXIobmFtZSwgVGV4dEl0ZW0ubmFtZSlcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gVG9UZXh0SXRlbVRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW4gbm90IGNvbnN0cnVjdCBhYnN0cmFjdCBjbGFzcy4nKVxuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlVHJhbnNmb3JtIChwYXJzZVJlc3VsdCAvKjogUGFyc2VSZXN1bHQgKi8pIC8qOiBQYXJzZVJlc3VsdCAqLyB7XG4gICAgLy8gVGhlIHVzdWFsIGNsZWFudXBcbiAgICBwYXJzZVJlc3VsdC5tZXNzYWdlcyA9IFtdXG4gICAgcGFyc2VSZXN1bHQucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcbiAgICAgIHBhZ2UuaXRlbXMgPSBwYWdlLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmFubm90YXRpb24gfHwgaXRlbS5hbm5vdGF0aW9uICE9PSBSRU1PVkVEX0FOTk9UQVRJT04pXG4gICAgICBwYWdlLml0ZW1zLmZvckVhY2goaXRlbSA9PiAoaXRlbS5hbm5vdGF0aW9uID0gbnVsbCkpXG4gICAgfSlcbiAgICByZXR1cm4gcGFyc2VSZXN1bHRcbiAgfVxufVxuIiwiLy8gVGhlIHJlc3VsdCBvZiBhIFBERiBwYXJzZSByZXNwZWN0aXZlbHkgYSBUcmFuc2Zvcm1hdGlvblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQYXJzZVJlc3VsdCB7XG4gIGNvbnN0cnVjdG9yIChvcHRpb25zKSB7XG4gICAgdGhpcy5wYWdlcyA9IG9wdGlvbnMucGFnZXMgLy8gbGlrZSBQYWdlW11cbiAgICB0aGlzLmdsb2JhbHMgPSBvcHRpb25zLmdsb2JhbHMgLy8gcHJvcGVydGllcyBhY2Nhc2FibGUgZm9yIGFsbCB0aGUgZm9sbG93aW5nIHRyYW5zZm9ybWF0aW9ucyBpbiBkZWJ1ZyBtb2RlXG4gICAgdGhpcy5tZXNzYWdlcyA9IG9wdGlvbnMubWVzc2FnZXMgLy8gc29tZXRoaW5nIHRvIHNob3cgb25seSBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uIGluIGRlYnVnIG1vZGVcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3B5UHJvcGVydGllcyA9IGNvcHlQcm9wZXJ0aWVzO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgSU5JVElBTElaRUQgPSBTeW1ib2woKTtcblxuLyoqXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQgaXMgbm90IGludGVuZGVkIHRvIGJlXG4gKiB1c2VkIGRpcmVjdGx5LiBFeHRlbmQgaXQgdG8gdHVybiB5b3VyIGNsYXNzIGludG8gYW4gZW51bVxuICogKGluaXRpYWxpemF0aW9uIGlzIHBlcmZvcm1lZCB2aWEgYE15Q2xhc3MuaW5pdEVudW0oKWApLlxuICovXG5cbnZhciBFbnVtID0gZXhwb3J0cy5FbnVtID0gZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIGBpbml0RW51bSgpYCBjbG9zZXMgdGhlIGNsYXNzLiBUaGVuIGNhbGxpbmcgdGhpcyBjb25zdHJ1Y3RvclxuICAgICAqIHRocm93cyBhbiBleGNlcHRpb24uXG4gICAgICogXG4gICAgICogSWYgeW91ciBzdWJjbGFzcyBoYXMgYSBjb25zdHJ1Y3RvciB0aGVuIHlvdSBjYW4gY29udHJvbFxuICAgICAqIHdoYXQgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYHRoaXNgIHZpYSB0aGUgYXJndW1lbnQgeW91XG4gICAgICogcGFzcyB0byBgc3VwZXIoKWAuIE5vIGFyZ3VtZW50cyBhcmUgZmluZSwgdG9vLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gRW51bSgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlUHJvcGVydGllcyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1swXTtcblxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRW51bSk7XG5cbiAgICAgICAgLy8gbmV3LnRhcmdldCB3b3VsZCBiZSBiZXR0ZXIgdGhhbiB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAvLyBidXQgaXNu4oCZdCBzdXBwb3J0ZWQgYnkgQmFiZWxcbiAgICAgICAgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25zdHJ1Y3RvciwgSU5JVElBTElaRUQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VudW0gY2xhc3NlcyBjYW7igJl0IGJlIGluc3RhbnRpYXRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgodHlwZW9mIGluc3RhbmNlUHJvcGVydGllcyA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoaW5zdGFuY2VQcm9wZXJ0aWVzKSkgPT09ICdvYmplY3QnICYmIGluc3RhbmNlUHJvcGVydGllcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29weVByb3BlcnRpZXModGhpcywgaW5zdGFuY2VQcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdXAgdGhlIGVudW0sIGNsb3NlIHRoZSBjbGFzcy5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gYXJnIEVpdGhlciBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBwcm92aWRlIHRoZSBuYW1lc1xuICAgICAqIGFuZCB2YWx1ZXMgKHdoaWNoIG11c3QgYmUgbXV0YWJsZSBvYmplY3RzKSBvZiB0aGUgZW51bSBjb25zdGFudHMuXG4gICAgICogT3IgYW4gQXJyYXkgd2hvc2UgZWxlbWVudHMgYXJlIHVzZWQgYXMgdGhlIG5hbWVzIG9mIHRoZSBlbnVtIGNvbnN0YW50c1xuICAgICAqIFRoZSB2YWx1ZXMgYXJlIGNyZWF0ZSBieSBpbnN0YW50aWF0aW5nIHRoZSBjdXJyZW50IGNsYXNzLlxuICAgICAqL1xuXG4gICAgX2NyZWF0ZUNsYXNzKEVudW0sIFt7XG4gICAgICAgIGtleTogJ3RvU3RyaW5nJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRGVmYXVsdCBgdG9TdHJpbmcoKWAgbWV0aG9kIGZvciBlbnVtIGNvbnN0YW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSArICcuJyArIHRoaXMubmFtZTtcbiAgICAgICAgfVxuICAgIH1dLCBbe1xuICAgICAgICBrZXk6ICdpbml0RW51bScsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0RW51bShhcmcpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZW51bVZhbHVlcycsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogW10sXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW51bVZhbHVlc0Zyb21BcnJheShhcmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbnVtVmFsdWVzRnJvbU9iamVjdChhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmVudW1WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpc1tJTklUSUFMSVpFRF0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19lbnVtVmFsdWVzRnJvbUFycmF5JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnVtVmFsdWVzRnJvbUFycmF5KGFycikge1xuICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gX3N0ZXAudmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVzaEVudW1WYWx1ZShuZXcgdGhpcygpLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19lbnVtVmFsdWVzRnJvbU9iamVjdCcsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZW51bVZhbHVlc0Zyb21PYmplY3Qob2JqKSB7XG4gICAgICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMiA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yMiA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IyID0gT2JqZWN0LmtleXMob2JqKVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IChfc3RlcDIgPSBfaXRlcmF0b3IyLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gX3N0ZXAyLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG5ldyB0aGlzKG9ialtrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVzaEVudW1WYWx1ZSh2YWx1ZSwga2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF9pdGVyYXRvckVycm9yMiA9IGVycjtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiAmJiBfaXRlcmF0b3IyLnJldHVybikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yMi5yZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnX3B1c2hFbnVtVmFsdWUnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3B1c2hFbnVtVmFsdWUoZW51bVZhbHVlLCBuYW1lKSB7XG4gICAgICAgICAgICBlbnVtVmFsdWUubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICBlbnVtVmFsdWUub3JkaW5hbCA9IHRoaXMuZW51bVZhbHVlcy5sZW5ndGg7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBlbnVtVmFsdWUsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVudW1WYWx1ZXMucHVzaChlbnVtVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIHRoZSBuYW1lIG9mIGFuIGVudW0gY29uc3RhbnQsIHJldHVybiBpdHMgdmFsdWUuXG4gICAgICAgICAqL1xuXG4gICAgfSwge1xuICAgICAgICBrZXk6ICdlbnVtVmFsdWVPZicsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnVtVmFsdWVPZihuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbnVtVmFsdWVzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC5uYW1lID09PSBuYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogTWFrZSBlbnVtIGNsYXNzZXMgaXRlcmFibGVcbiAgICAgICAgICovXG5cbiAgICB9LCB7XG4gICAgICAgIGtleTogU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbnVtVmFsdWVzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBFbnVtO1xufSgpO1xuXG5mdW5jdGlvbiBjb3B5UHJvcGVydGllcyh0YXJnZXQsIHNvdXJjZSkge1xuICAgIC8vIElkZWFsbHksIHdl4oCZZCB1c2UgUmVmbGVjdC5vd25LZXlzKCkgaGVyZSxcbiAgICAvLyBidXQgSSBkb27igJl0IHdhbnQgdG8gZGVwZW5kIG9uIGEgcG9seWZpbGxcbiAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlO1xuICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjMgPSBmYWxzZTtcbiAgICB2YXIgX2l0ZXJhdG9yRXJyb3IzID0gdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSlbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDM7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSAoX3N0ZXAzID0gX2l0ZXJhdG9yMy5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWUpIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBfc3RlcDMudmFsdWU7XG5cbiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9kaWRJdGVyYXRvckVycm9yMyA9IHRydWU7XG4gICAgICAgIF9pdGVyYXRvckVycm9yMyA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyAmJiBfaXRlcmF0b3IzLnJldHVybikge1xuICAgICAgICAgICAgICAgIF9pdGVyYXRvcjMucmV0dXJuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbn0iLCJjb25zdCB7IEVudW0gfSA9IHJlcXVpcmUoJ2VudW1pZnknKVxuXG4vLyBUaGUgZm9ybWF0IG9mIGEgd29yZCBlbGVtZW50XG5jbGFzcyBXb3JkRm9ybWF0IGV4dGVuZHMgRW51bSB7XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBXb3JkRm9ybWF0XG5cbldvcmRGb3JtYXQuaW5pdEVudW0oe1xuICBCT0xEOiB7XG4gICAgc3RhcnRTeW1ib2w6ICcqKicsXG4gICAgZW5kU3ltYm9sOiAnKionLFxuICB9LFxuICBPQkxJUVVFOiB7XG4gICAgc3RhcnRTeW1ib2w6ICdfJyxcbiAgICBlbmRTeW1ib2w6ICdfJyxcbiAgfSxcbiAgQk9MRF9PQkxJUVVFOiB7XG4gICAgc3RhcnRTeW1ib2w6ICcqKl8nLFxuICAgIGVuZFN5bWJvbDogJ18qKicsXG4gIH0sXG59KVxuIiwiLy8gQGZsb3dcblxuY29uc3QgVG9UZXh0SXRlbVRyYW5zZm9ybWF0aW9uID0gcmVxdWlyZSgnLi4vVG9UZXh0SXRlbVRyYW5zZm9ybWF0aW9uJylcbmNvbnN0IFBhcnNlUmVzdWx0ID0gcmVxdWlyZSgnLi4vLi4vUGFyc2VSZXN1bHQnKVxuY29uc3QgV29yZEZvcm1hdCA9IHJlcXVpcmUoJy4uLy4uL21hcmtkb3duL1dvcmRGb3JtYXQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIENhbGN1bGF0ZUdsb2JhbFN0YXRzIGV4dGVuZHMgVG9UZXh0SXRlbVRyYW5zZm9ybWF0aW9uIHtcbiAgY29uc3RydWN0b3IgKGZvbnRNYXApIHtcbiAgICBzdXBlcignJDEnKVxuICAgIHRoaXMuZm9udE1hcCA9IGZvbnRNYXBcbiAgfVxuXG4gIHRyYW5zZm9ybSAocGFyc2VSZXN1bHQgLyo6IFBhcnNlUmVzdWx0ICovKSAvKjogUGFyc2VSZXN1bHQgKi8ge1xuICAgIC8vIFBhcnNlIGhlaWdodHNcbiAgICBjb25zdCBoZWlnaHRUb09jY3VycmVuY2UgPSB7fVxuICAgIGNvbnN0IGZvbnRUb09jY3VycmVuY2UgPSB7fVxuICAgIHZhciBtYXhIZWlnaHQgPSAwXG4gICAgdmFyIG1heEhlaWdodEZvbnRcbiAgICBwYXJzZVJlc3VsdC5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xuICAgICAgcGFnZS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBoZWlnaHRUb09jY3VycmVuY2VbaXRlbS5oZWlnaHRdID0gaGVpZ2h0VG9PY2N1cnJlbmNlW2l0ZW0uaGVpZ2h0XSA/IGhlaWdodFRvT2NjdXJyZW5jZVtpdGVtLmhlaWdodF0gKyAxIDogMVxuICAgICAgICBmb250VG9PY2N1cnJlbmNlW2l0ZW0uZm9udF0gPSBmb250VG9PY2N1cnJlbmNlW2l0ZW0uZm9udF0gPyBmb250VG9PY2N1cnJlbmNlW2l0ZW0uZm9udF0gKyAxIDogMVxuICAgICAgICBpZiAoaXRlbS5oZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICBtYXhIZWlnaHQgPSBpdGVtLmhlaWdodFxuICAgICAgICAgIG1heEhlaWdodEZvbnQgPSBpdGVtLmZvbnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICAgIGNvbnN0IG1vc3RVc2VkSGVpZ2h0ID0gcGFyc2VJbnQoZ2V0TW9zdFVzZWRLZXkoaGVpZ2h0VG9PY2N1cnJlbmNlKSlcbiAgICBjb25zdCBtb3N0VXNlZEZvbnQgPSBnZXRNb3N0VXNlZEtleShmb250VG9PY2N1cnJlbmNlKVxuXG4gICAgLy8gUGFyc2UgbGluZSBkaXN0YW5jZXNcbiAgICBjb25zdCBkaXN0YW5jZVRvT2NjdXJyZW5jZSA9IHt9XG4gICAgcGFyc2VSZXN1bHQucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcbiAgICAgIHZhciBsYXN0SXRlbU9mTW9zdFVzZWRIZWlnaHRcbiAgICAgIHBhZ2UuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uaGVpZ2h0ID09PSBtb3N0VXNlZEhlaWdodCAmJiBpdGVtLnRleHQudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAobGFzdEl0ZW1PZk1vc3RVc2VkSGVpZ2h0ICYmIGl0ZW0ueSAhPT0gbGFzdEl0ZW1PZk1vc3RVc2VkSGVpZ2h0LnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gbGFzdEl0ZW1PZk1vc3RVc2VkSGVpZ2h0LnkgLSBpdGVtLnlcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDApIHtcbiAgICAgICAgICAgICAgZGlzdGFuY2VUb09jY3VycmVuY2VbZGlzdGFuY2VdID0gZGlzdGFuY2VUb09jY3VycmVuY2VbZGlzdGFuY2VdID8gZGlzdGFuY2VUb09jY3VycmVuY2VbZGlzdGFuY2VdICsgMSA6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbGFzdEl0ZW1PZk1vc3RVc2VkSGVpZ2h0ID0gaXRlbVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RJdGVtT2ZNb3N0VXNlZEhlaWdodCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICAgIGNvbnN0IG1vc3RVc2VkRGlzdGFuY2UgPSBwYXJzZUludChnZXRNb3N0VXNlZEtleShkaXN0YW5jZVRvT2NjdXJyZW5jZSkpXG4gICAgY29uc3QgZm9udElkVG9OYW1lID0gW11cbiAgICBjb25zdCBmb250VG9Gb3JtYXRzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5mb250TWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIGZvbnRJZFRvTmFtZS5wdXNoKGtleSArICcgPSAnICsgdmFsdWUubmFtZSlcbiAgICAgIGNvbnN0IGZvbnROYW1lID0gdmFsdWUubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICB2YXIgZm9ybWF0XG4gICAgICBpZiAoa2V5ID09PSBtb3N0VXNlZEZvbnQpIHtcbiAgICAgICAgZm9ybWF0ID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChmb250TmFtZS5pbmNsdWRlcygnYm9sZCcpICYmIChmb250TmFtZS5pbmNsdWRlcygnb2JsaXF1ZScpIHx8IGZvbnROYW1lLmluY2x1ZGVzKCdpdGFsaWMnKSkpIHtcbiAgICAgICAgZm9ybWF0ID0gV29yZEZvcm1hdC5CT0xEX09CTElRVUVcbiAgICAgIH0gZWxzZSBpZiAoZm9udE5hbWUuaW5jbHVkZXMoJ2JvbGQnKSkge1xuICAgICAgICBmb3JtYXQgPSBXb3JkRm9ybWF0LkJPTERcbiAgICAgIH0gZWxzZSBpZiAoZm9udE5hbWUuaW5jbHVkZXMoJ29ibGlxdWUnKSB8fCBmb250TmFtZS5pbmNsdWRlcygnaXRhbGljJykpIHtcbiAgICAgICAgZm9ybWF0ID0gV29yZEZvcm1hdC5PQkxJUVVFXG4gICAgICB9IGVsc2UgaWYgKGZvbnROYW1lID09PSBtYXhIZWlnaHRGb250KSB7XG4gICAgICAgIGZvcm1hdCA9IFdvcmRGb3JtYXQuQk9MRFxuICAgICAgfVxuICAgICAgaWYgKGZvcm1hdCkge1xuICAgICAgICBmb250VG9Gb3JtYXRzLnNldChrZXksIGZvcm1hdC5uYW1lKVxuICAgICAgfVxuICAgIH0pXG4gICAgZm9udElkVG9OYW1lLnNvcnQoKVxuXG4gICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFscyBzbyBhbGwgZm9sbG93aW5nIHRyYW5zZm9ybWF0aW9uIGRvbid0IG1vZGlmeSB0aGVtXG4gICAgY29uc3QgbmV3UGFnZXMgPSBwYXJzZVJlc3VsdC5wYWdlcy5tYXAocGFnZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wYWdlLFxuICAgICAgICBpdGVtczogcGFnZS5pdGVtcy5tYXAodGV4dEl0ZW0gPT4gKHsgLi4udGV4dEl0ZW0gfSkpLFxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIG5ldyBQYXJzZVJlc3VsdCh7XG4gICAgICAuLi5wYXJzZVJlc3VsdCxcbiAgICAgIHBhZ2VzOiBuZXdQYWdlcyxcbiAgICAgIGdsb2JhbHM6IHtcbiAgICAgICAgbW9zdFVzZWRIZWlnaHQsXG4gICAgICAgIG1vc3RVc2VkRm9udCxcbiAgICAgICAgbW9zdFVzZWREaXN0YW5jZSxcbiAgICAgICAgbWF4SGVpZ2h0LFxuICAgICAgICBtYXhIZWlnaHRGb250LFxuICAgICAgICBmb250VG9Gb3JtYXRzLFxuICAgICAgfSxcbiAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICdJdGVtcyBwZXIgaGVpZ2h0OiAnICsgSlNPTi5zdHJpbmdpZnkoaGVpZ2h0VG9PY2N1cnJlbmNlKSxcbiAgICAgICAgJ0l0ZW1zIHBlciBmb250OiAnICsgSlNPTi5zdHJpbmdpZnkoZm9udFRvT2NjdXJyZW5jZSksXG4gICAgICAgICdJdGVtcyBwZXIgZGlzdGFuY2U6ICcgKyBKU09OLnN0cmluZ2lmeShkaXN0YW5jZVRvT2NjdXJyZW5jZSksXG4gICAgICAgICdGb250czonICsgSlNPTi5zdHJpbmdpZnkoZm9udElkVG9OYW1lKSxcbiAgICAgIF0sXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNb3N0VXNlZEtleSAoa2V5VG9PY2N1cnJlbmNlKSB7XG4gIHZhciBtYXhPY2N1cmVuY2UgPSAwXG4gIHZhciBtYXhLZXlcbiAgT2JqZWN0LmtleXMoa2V5VG9PY2N1cnJlbmNlKS5tYXAoKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoIW1heEtleSB8fCBrZXlUb09jY3VycmVuY2VbZWxlbWVudF0gPiBtYXhPY2N1cmVuY2UpIHtcbiAgICAgIG1heE9jY3VyZW5jZSA9IGtleVRvT2NjdXJyZW5jZVtlbGVtZW50XVxuICAgICAgbWF4S2V5ID0gZWxlbWVudFxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1heEtleVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBXb3JkIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICB0aGlzLnN0cmluZyA9IG9wdGlvbnMuc3RyaW5nXG4gICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlIC8vIFdvcmRUeXBlXG4gICAgdGhpcy5mb3JtYXQgPSBvcHRpb25zLmZvcm1hdCAvLyBXb3JkRm9ybWF0XG4gIH1cbn1cbiIsImNvbnN0IFBhZ2VJdGVtID0gcmVxdWlyZSgnLi9QYWdlSXRlbScpXG5jb25zdCBXb3JkID0gcmVxdWlyZSgnLi9Xb3JkJylcblxuLy8gQSBsaW5lIHdpdGhpbiBhIHBhZ2Vcbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgTGluZUl0ZW0gZXh0ZW5kcyBQYWdlSXRlbSB7XG4gIGNvbnN0cnVjdG9yIChvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucylcbiAgICB0aGlzLnggPSBvcHRpb25zLnhcbiAgICB0aGlzLnkgPSBvcHRpb25zLnlcbiAgICB0aGlzLndpZHRoID0gb3B0aW9ucy53aWR0aFxuICAgIHRoaXMuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHRcbiAgICB0aGlzLndvcmRzID0gb3B0aW9ucy53b3JkcyB8fCBbXVxuICAgIGlmIChvcHRpb25zLnRleHQgJiYgIW9wdGlvbnMud29yZHMpIHtcbiAgICAgIHRoaXMud29yZHMgPSBvcHRpb25zLnRleHQuc3BsaXQoJyAnKVxuICAgICAgICAuZmlsdGVyKHN0cmluZyA9PiBzdHJpbmcudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgIC5tYXAod29yZEFzU3RyaW5nID0+IG5ldyBXb3JkKHtcbiAgICAgICAgICBzdHJpbmc6IHdvcmRBc1N0cmluZyxcbiAgICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgdGV4dCAoKSB7XG4gICAgcmV0dXJuIHRoaXMud29yZFN0cmluZ3MoKS5qb2luKCcgJylcbiAgfVxuXG4gIHdvcmRTdHJpbmdzICgpIHtcbiAgICByZXR1cm4gdGhpcy53b3Jkcy5tYXAod29yZCA9PiB3b3JkLnN0cmluZylcbiAgfVxufVxuIiwiLy8gQGZsb3dcblxuLyo6OlxuaW1wb3J0IFBhcnNlUmVzdWx0IGZyb20gJy4uL1BhcnNlUmVzdWx0J1xuKi9cblxuY29uc3QgVHJhbnNmb3JtYXRpb24gPSByZXF1aXJlKCcuL1RyYW5zZm9ybWF0aW9uJylcbmNvbnN0IExpbmVJdGVtID0gcmVxdWlyZSgnLi4vTGluZUl0ZW0nKVxuY29uc3QgeyBSRU1PVkVEX0FOTk9UQVRJT04gfSA9IHJlcXVpcmUoJy4uL0Fubm90YXRpb24nKVxuXG4vLyBBYnN0cmFjdCBjbGFzcyBmb3IgdHJhbnNmb3JtYXRpb25zIHByb2R1Y2luZyBMaW5lSXRlbShzKSB0byBiZSBzaG93biBpbiB0aGUgTGluZUl0ZW1QYWdlVmlld1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBUb0xpbmVJdGVtVHJhbnNmb3JtYXRpb24gZXh0ZW5kcyBUcmFuc2Zvcm1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yIChuYW1lKSB7XG4gICAgc3VwZXIobmFtZSwgTGluZUl0ZW0ubmFtZSlcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gVG9MaW5lSXRlbVRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW4gbm90IGNvbnN0cnVjdCBhYnN0cmFjdCBjbGFzcy4nKVxuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlVHJhbnNmb3JtIChwYXJzZVJlc3VsdCAvKjogUGFyc2VSZXN1bHQgKi8pIC8qOiBQYXJzZVJlc3VsdCAqLyB7XG4gICAgLy8gVGhlIHVzdWFsIGNsZWFudXBcbiAgICBwYXJzZVJlc3VsdC5tZXNzYWdlcyA9IFtdXG4gICAgcGFyc2VSZXN1bHQucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcbiAgICAgIHBhZ2UuaXRlbXMgPSBwYWdlLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmFubm90YXRpb24gfHwgaXRlbS5hbm5vdGF0aW9uICE9PSBSRU1PVkVEX0FOTk9UQVRJT04pXG4gICAgICBwYWdlLml0ZW1zLmZvckVhY2goaXRlbSA9PiAoaXRlbS5hbm5vdGF0aW9uID0gbnVsbCkpXG4gICAgfSlcbiAgICByZXR1cm4gcGFyc2VSZXN1bHRcbiAgfVxufVxuIiwiLy8gQGZsb3dcblxuLyo6OlxuaW1wb3J0IFBhZ2VJdGVtIGZyb20gJy4uL21vZGVscy9QYWdlSXRlbSdcbmltcG9ydCBMaW5lSXRlbUJsb2NrIGZyb20gJy4uL21vZGVscy9MaW5lSXRlbUJsb2NrJ1xuKi9cblxuZXhwb3J0cy5taW5YRnJvbUJsb2NrcyA9IGZ1bmN0aW9uIG1pblhGcm9tQmxvY2tzIChibG9ja3MgLyo6IExpbmVJdGVtQmxvY2tbXSAqLykgLyo6IG51bWJlciAqLyB7XG4gIHZhciBtaW5YID0gOTk5XG4gIGJsb2Nrcy5mb3JFYWNoKGJsb2NrID0+IHtcbiAgICBibG9jay5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIGl0ZW0ueClcbiAgICB9KVxuICB9KVxuICBpZiAobWluWCA9PT0gOTk5KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gbWluWFxufVxuXG5leHBvcnRzLm1pblhGcm9tUGFnZUl0ZW1zID0gZnVuY3Rpb24gbWluWEZyb21QYWdlSXRlbXMgKGl0ZW1zIC8qOiBQYWdlSXRlbSAqLykgLyo6IG51bWJlciAqLyB7XG4gIHZhciBtaW5YID0gOTk5XG4gIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgbWluWCA9IE1hdGgubWluKG1pblgsIGl0ZW0ueClcbiAgfSlcbiAgaWYgKG1pblggPT09IDk5OSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG1pblhcbn1cblxuZXhwb3J0cy5zb3J0QnlYID0gZnVuY3Rpb24gc29ydEJ5WCAoaXRlbXMgLyo6IFBhZ2VJdGVtICovKSB7XG4gIGl0ZW1zLnNvcnQoKGEsIGIpID0+IGEueCAtIGIueClcbn1cbiIsIi8vIEBmbG93XG5cbi8qOjpcbmltcG9ydCBUZXh0SXRlbSBmcm9tICcuL1RleHRJdGVtJ1xuKi9cblxuY29uc3QgeyBzb3J0QnlYIH0gPSByZXF1aXJlKCcuLi91dGlsL3BhZ2UtaXRlbS1mdW5jdGlvbnMnKVxuXG4vLyBHcm91cHMgYWxsIHRleHQgaXRlbXMgd2hpY2ggYXJlIG9uIHRoZSBzYW1lIHkgbGluZVxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBUZXh0SXRlbUxpbmVHcm91cGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICB0aGlzLm1vc3RVc2VkRGlzdGFuY2UgPSBvcHRpb25zLm1vc3RVc2VkRGlzdGFuY2UgfHwgMTJcbiAgfVxuXG4gIC8vIHJldHVybnMgYSBDb21iaW5lUmVzdWx0XG4gIGdyb3VwICh0ZXh0SXRlbXMgLyo6IFRleHRJdGVtW10gKi8pIC8qOiBUZXh0SXRlbVtdW10gKi8ge1xuICAgIGNvbnN0IGxpbmVzID0gW11cbiAgICB2YXIgY3VycmVudExpbmUgPSBbXVxuICAgIHRleHRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGN1cnJlbnRMaW5lLmxlbmd0aCA+IDAgJiYgTWF0aC5hYnMoY3VycmVudExpbmVbMF0ueSAtIGl0ZW0ueSkgPj0gdGhpcy5tb3N0VXNlZERpc3RhbmNlIC8gMikge1xuICAgICAgICBsaW5lcy5wdXNoKGN1cnJlbnRMaW5lKVxuICAgICAgICBjdXJyZW50TGluZSA9IFtdXG4gICAgICB9XG4gICAgICBjdXJyZW50TGluZS5wdXNoKGl0ZW0pXG4gICAgfSlcbiAgICBsaW5lcy5wdXNoKGN1cnJlbnRMaW5lKVxuXG4gICAgbGluZXMuZm9yRWFjaCh0ZXh0SXRlbXMgPT4ge1xuICAgICAgLy8gd2UgY2FuJ3QgdHJ1c3Qgb3JkZXIgb2Ygb2NjdXJlbmNlLCBlc3AuIGZvb3Rub3RlTGlua3MgbGlrZSB0byBjb21lIGxhc3RcbiAgICAgIHNvcnRCeVgodGV4dEl0ZW1zKVxuICAgIH0pXG4gICAgcmV0dXJuIGxpbmVzXG4gIH1cbn1cbiIsImNvbnN0IHsgRW51bSB9ID0gcmVxdWlyZSgnZW51bWlmeScpXG5cbi8vIEFuIE1hcmtkb3duIHdvcmQgZWxlbWVudFxuY2xhc3MgV29yZFR5cGUgZXh0ZW5kcyBFbnVtIHtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFdvcmRUeXBlXG5cbldvcmRUeXBlLmluaXRFbnVtKHtcbiAgTElOSzoge1xuICAgIHRvVGV4dCAoc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYFske3N0cmluZ31dKCR7c3RyaW5nfSlgXG4gICAgfSxcbiAgfSxcbiAgRk9PVE5PVEVfTElOSzoge1xuICAgIGF0dGFjaFdpdGhvdXRXaGl0ZXNwYWNlOiB0cnVlLFxuICAgIHBsYWluVGV4dEZvcm1hdDogdHJ1ZSxcbiAgICB0b1RleHQgKHN0cmluZykge1xuICAgICAgcmV0dXJuIGBeJHtzdHJpbmd9YFxuICAgIC8vIHJldHVybiBgPHN1cD5bJHtzdHJpbmd9XSgjJHtzdHJpbmd9KTwvc3VwPmBcbiAgICB9LFxuICB9LFxuICBGT09UTk9URToge1xuICAgIHRvVGV4dCAoc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYCheJHtzdHJpbmd9KWBcbiAgICB9LFxuICB9LFxufSlcbiIsIi8vIEFic3RyYWN0IHN0cmVhbSB3aGljaCBhbGxvd3Mgc3Rhc2ggaXRlbXMgdGVtcG9yYXJpbHlcbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgU3Rhc2hpbmdTdHJlYW0ge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFN0YXNoaW5nU3RyZWFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW4gbm90IGNvbnN0cnVjdCBhYnN0cmFjdCBjbGFzcy4nKVxuICAgIH1cbiAgICB0aGlzLnJlc3VsdHMgPSBbXVxuICAgIHRoaXMuc3Rhc2ggPSBbXVxuICB9XG5cbiAgY29uc3VtZUFsbCAoaXRlbXMpIHtcbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5jb25zdW1lKGl0ZW0pKVxuICB9XG5cbiAgY29uc3VtZSAoaXRlbSkge1xuICAgIGlmICh0aGlzLnNob3VsZFN0YXNoKGl0ZW0pKSB7XG4gICAgICBpZiAoIXRoaXMubWF0Y2hlc1N0YXNoKGl0ZW0pKSB7XG4gICAgICAgIHRoaXMuZmx1c2hTdGFzaCgpXG4gICAgICB9XG4gICAgICB0aGlzLnB1c2hPblN0YXNoKGl0ZW0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN0YXNoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5mbHVzaFN0YXNoKClcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdWx0cy5wdXNoKGl0ZW0pXG4gICAgfVxuICB9XG5cbiAgcHVzaE9uU3Rhc2ggKGl0ZW0pIHtcbiAgICB0aGlzLm9uUHVzaE9uU3Rhc2goaXRlbSlcbiAgICB0aGlzLnN0YXNoLnB1c2goaXRlbSlcbiAgfVxuXG4gIGNvbXBsZXRlICgpIHtcbiAgICBpZiAodGhpcy5zdGFzaC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmZsdXNoU3Rhc2goKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXN1bHRzXG4gIH1cblxuICAvLyByZXR1cm4gdHJ1ZSBpZiB0aGUgaXRlbSBtYXRjaGVzIHRoZSBpdGVtcyBvZiB0aGUgc3RhY2tcbiAgbWF0Y2hlc1N0YXNoIChpdGVtKSB7XG4gICAgaWYgKHRoaXMuc3Rhc2gubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBjb25zdCBsYXN0SXRlbSA9IHRoaXMuc3Rhc2hbdGhpcy5zdGFzaC5sZW5ndGggLSAxXVxuICAgIHJldHVybiB0aGlzLmRvTWF0Y2hlc1N0YXNoKGxhc3RJdGVtLCBpdGVtKVxuICB9XG5cbiAgZmx1c2hTdGFzaCAoKSB7XG4gICAgaWYgKHRoaXMuc3Rhc2gubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kb0ZsdXNoU3Rhc2godGhpcy5zdGFzaCwgdGhpcy5yZXN1bHRzKVxuICAgICAgdGhpcy5zdGFzaCA9IFtdXG4gICAgfVxuICB9XG5cbiAgb25QdXNoT25TdGFzaCAoaXRlbSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgLy8gc3ViLWNsYXNzZXMgbWF5IG92ZXJyaWRlXG4gIH1cblxuICBzaG91bGRTdGFzaCAoaXRlbSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyBEbyBub3QgY2FsbCBhYnN0cmFjdCBtZXRob2QgZm9vIGZyb20gY2hpbGQuJyArIGl0ZW0pXG4gIH1cblxuICBkb01hdGNoZXNTdGFzaCAobGFzdEl0ZW0sIGl0ZW0pIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgRG8gbm90IGNhbGwgYWJzdHJhY3QgbWV0aG9kIGZvbyBmcm9tIGNoaWxkLicgKyBsYXN0SXRlbSArIGl0ZW0pXG4gIH1cblxuICBkb0ZsdXNoU3Rhc2ggKHN0YXNoLCByZXN1bHRzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignIERvIG5vdCBjYWxsIGFic3RyYWN0IG1ldGhvZCBmb28gZnJvbSBjaGlsZC4nICsgc3Rhc2ggKyByZXN1bHRzKVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBhcnNlZEVsZW1lbnRzIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmZvb3Rub3RlTGlua3MgPSBvcHRpb25zLmZvb3Rub3RlTGlua3MgfHwgW11cbiAgICB0aGlzLmZvb3Rub3RlcyA9IG9wdGlvbnMuZm9vdG5vdGVzIHx8IFtdXG4gICAgdGhpcy5jb250YWluTGlua3MgPSBvcHRpb25zLmNvbnRhaW5MaW5rc1xuICAgIHRoaXMuZm9ybWF0dGVkV29yZHMgPSBvcHRpb25zLmZvcm1hdHRlZFdvcmRzXG4gIH1cblxuICBhZGQgKHBhcnNlZEVsZW1lbnRzKSB7XG4gICAgdGhpcy5mb290bm90ZUxpbmtzID0gdGhpcy5mb290bm90ZUxpbmtzLmNvbmNhdChwYXJzZWRFbGVtZW50cy5mb290bm90ZUxpbmtzKVxuICAgIHRoaXMuZm9vdG5vdGVzID0gdGhpcy5mb290bm90ZXMuY29uY2F0KHBhcnNlZEVsZW1lbnRzLmZvb3Rub3RlcylcbiAgICB0aGlzLmNvbnRhaW5MaW5rcyA9IHRoaXMuY29udGFpbkxpbmtzIHx8IHBhcnNlZEVsZW1lbnRzLmNvbnRhaW5MaW5rc1xuICAgIHRoaXMuZm9ybWF0dGVkV29yZHMgKz0gcGFyc2VkRWxlbWVudHMuZm9ybWF0dGVkV29yZHNcbiAgfVxufVxuIiwiY29uc3QgVGV4dEl0ZW0gPSByZXF1aXJlKCcuL1RleHRJdGVtJylcbmNvbnN0IFdvcmQgPSByZXF1aXJlKCcuL1dvcmQnKVxuY29uc3QgV29yZFR5cGUgPSByZXF1aXJlKCcuL21hcmtkb3duL1dvcmRUeXBlJylcbmNvbnN0IFdvcmRGb3JtYXQgPSByZXF1aXJlKCcuL21hcmtkb3duL1dvcmRGb3JtYXQnKVxuY29uc3QgTGluZUl0ZW0gPSByZXF1aXJlKCcuL0xpbmVJdGVtJylcbmNvbnN0IFN0YXNoaW5nU3RyZWFtID0gcmVxdWlyZSgnLi9TdGFzaGluZ1N0cmVhbScpXG5jb25zdCBQYXJzZWRFbGVtZW50cyA9IHJlcXVpcmUoJy4vUGFyc2VkRWxlbWVudHMnKVxuY29uc3QgeyBpc051bWJlciwgaXNMaXN0SXRlbUNoYXJhY3RlciB9ID0gcmVxdWlyZSgnLi4vdXRpbC9zdHJpbmctZnVuY3Rpb25zJylcbmNvbnN0IHsgc29ydEJ5WCB9ID0gcmVxdWlyZSgnLi4vdXRpbC9wYWdlLWl0ZW0tZnVuY3Rpb25zJylcblxuLy8gQ29udmVydHMgdGV4dCBpdGVtcyB3aGljaCBoYXZlIGJlZW4gZ3JvdXBlZCB0byBhIGxpbmUgKHRocm91Z2ggVGV4dEl0ZW1MaW5lR3JvdXBlcikgdG8gYSBzaW5nbGUgTGluZUl0ZW0gZG9pbmcgaW5saW5lIHRyYW5zZm9ybWF0aW9ucyBsaWtlXG4vLyAnd2hpdGVzcGFjZSByZW1vdmFsJywgYm9sZC9lbXBoYXNpcyBhbm5vdGF0aW9uLCBsaW5rLWRldGVjdGlvbiwgZXRjLi5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgTGluZUNvbnZlcnRlciB7XG4gIGNvbnN0cnVjdG9yIChmb250VG9Gb3JtYXRzKSB7XG4gICAgdGhpcy5mb250VG9Gb3JtYXRzID0gZm9udFRvRm9ybWF0c1xuICB9XG5cbiAgLy8gcmV0dXJucyBhIENvbWJpbmVSZXN1bHRcbiAgY29tcGFjdCAodGV4dEl0ZW1zIC8qOiBUZXh0SXRlbVtdICovKSAvKjogTGluZUl0ZW0gKi8ge1xuICAgIC8vIHdlIGNhbid0IHRydXN0IG9yZGVyIG9mIG9jY3VyZW5jZSwgZXNwLiBmb290bm90ZUxpbmtzIGxpa2UgdG8gY29tZSBsYXN0XG4gICAgc29ydEJ5WCh0ZXh0SXRlbXMpXG5cbiAgICBjb25zdCB3b3JkU3RyZWFtID0gbmV3IFdvcmREZXRlY3Rpb25TdHJlYW0odGhpcy5mb250VG9Gb3JtYXRzKVxuICAgIHdvcmRTdHJlYW0uY29uc3VtZUFsbCh0ZXh0SXRlbXMubWFwKGl0ZW0gPT4gbmV3IFRleHRJdGVtKHsgLi4uaXRlbSB9KSkpXG4gICAgY29uc3Qgd29yZHMgPSB3b3JkU3RyZWFtLmNvbXBsZXRlKClcblxuICAgIHZhciBtYXhIZWlnaHQgPSAwXG4gICAgdmFyIHdpZHRoU3VtID0gMFxuICAgIHRleHRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgbWF4SGVpZ2h0ID0gTWF0aC5tYXgobWF4SGVpZ2h0LCBpdGVtLmhlaWdodClcbiAgICAgIHdpZHRoU3VtICs9IGl0ZW0ud2lkdGhcbiAgICB9KVxuICAgIHJldHVybiBuZXcgTGluZUl0ZW0oe1xuICAgICAgeDogdGV4dEl0ZW1zWzBdLngsXG4gICAgICB5OiB0ZXh0SXRlbXNbMF0ueSxcbiAgICAgIGhlaWdodDogbWF4SGVpZ2h0LFxuICAgICAgd2lkdGg6IHdpZHRoU3VtLFxuICAgICAgd29yZHM6IHdvcmRzLFxuICAgICAgcGFyc2VkRWxlbWVudHM6IG5ldyBQYXJzZWRFbGVtZW50cyh7XG4gICAgICAgIGZvb3Rub3RlTGlua3M6IHdvcmRTdHJlYW0uZm9vdG5vdGVMaW5rcyxcbiAgICAgICAgZm9vdG5vdGVzOiB3b3JkU3RyZWFtLmZvb3Rub3RlcyxcbiAgICAgICAgY29udGFpbkxpbmtzOiB3b3JkU3RyZWFtLmNvbnRhaW5MaW5rcyxcbiAgICAgICAgZm9ybWF0dGVkV29yZHM6IHdvcmRTdHJlYW0uZm9ybWF0dGVkV29yZHMsXG4gICAgICB9KSxcbiAgICB9KVxuICB9XG59XG5cbmNsYXNzIFdvcmREZXRlY3Rpb25TdHJlYW0gZXh0ZW5kcyBTdGFzaGluZ1N0cmVhbSB7XG4gIGNvbnN0cnVjdG9yIChmb250VG9Gb3JtYXRzKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuZm9udFRvRm9ybWF0cyA9IGZvbnRUb0Zvcm1hdHNcbiAgICB0aGlzLmZvb3Rub3RlTGlua3MgPSBbXVxuICAgIHRoaXMuZm9vdG5vdGVzID0gW11cbiAgICB0aGlzLmZvcm1hdHRlZFdvcmRzID0gMFxuICAgIHRoaXMuY29udGFpbkxpbmtzID0gZmFsc2VcbiAgICB0aGlzLnN0YXNoZWROdW1iZXIgPSBmYWxzZVxuICB9XG5cbiAgc2hvdWxkU3Rhc2ggKGl0ZW0pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGlmICghdGhpcy5maXJzdFkpIHtcbiAgICAgIHRoaXMuZmlyc3RZID0gaXRlbS55XG4gICAgfVxuICAgIHRoaXMuY3VycmVudEl0ZW0gPSBpdGVtXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIG9uUHVzaE9uU3Rhc2ggKGl0ZW0pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRoaXMuc3Rhc2hlZE51bWJlciA9IGlzTnVtYmVyKGl0ZW0udGV4dC50cmltKCkpXG4gIH1cblxuICBkb01hdGNoZXNTdGFzaCAobGFzdEl0ZW0sIGl0ZW0pIHtcbiAgICBjb25zdCBsYXN0SXRlbUZvcm1hdCA9IHRoaXMuZm9udFRvRm9ybWF0cy5nZXQobGFzdEl0ZW0uZm9udClcbiAgICBjb25zdCBpdGVtRm9ybWF0ID0gdGhpcy5mb250VG9Gb3JtYXRzLmdldChpdGVtLmZvbnQpXG4gICAgaWYgKGxhc3RJdGVtRm9ybWF0ICE9PSBpdGVtRm9ybWF0KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgY29uc3QgaXRlbUlzQU51bWJlciA9IGlzTnVtYmVyKGl0ZW0udGV4dC50cmltKCkpXG4gICAgcmV0dXJuIHRoaXMuc3Rhc2hlZE51bWJlciA9PT0gaXRlbUlzQU51bWJlclxuICB9XG5cbiAgZG9GbHVzaFN0YXNoIChzdGFzaCwgcmVzdWx0cykge1xuICAgIGlmICh0aGlzLnN0YXNoZWROdW1iZXIpIHtcbiAgICAgIGNvbnN0IGpvaW5lZE51bWJlciA9IHN0YXNoLm1hcChpdGVtID0+IGl0ZW0udGV4dClcbiAgICAgICAgLmpvaW4oJycpXG4gICAgICAgIC50cmltKClcbiAgICAgIGlmIChzdGFzaFswXS55ID4gdGhpcy5maXJzdFkpIHsgLy8gZm9vdG5vdGUgbGlua1xuICAgICAgICByZXN1bHRzLnB1c2gobmV3IFdvcmQoe1xuICAgICAgICAgIHN0cmluZzogYCR7am9pbmVkTnVtYmVyfWAsXG4gICAgICAgICAgdHlwZTogV29yZFR5cGUuRk9PVE5PVEVfTElOSyxcbiAgICAgICAgfSkpXG4gICAgICAgIHRoaXMuZm9vdG5vdGVMaW5rcy5wdXNoKHBhcnNlSW50KGpvaW5lZE51bWJlcikpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudEl0ZW0gJiYgdGhpcy5jdXJyZW50SXRlbS55IDwgc3Rhc2hbMF0ueSkgeyAvLyBmb290bm90ZVxuICAgICAgICByZXN1bHRzLnB1c2gobmV3IFdvcmQoe1xuICAgICAgICAgIHN0cmluZzogYCR7am9pbmVkTnVtYmVyfWAsXG4gICAgICAgICAgdHlwZTogV29yZFR5cGUuRk9PVE5PVEUsXG4gICAgICAgIH0pKVxuICAgICAgICB0aGlzLmZvb3Rub3Rlcy5wdXNoKGpvaW5lZE51bWJlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29weVN0YXNoSXRlbXNBc1RleHQoc3Rhc2gsIHJlc3VsdHMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29weVN0YXNoSXRlbXNBc1RleHQoc3Rhc2gsIHJlc3VsdHMpXG4gICAgfVxuICB9XG5cbiAgY29weVN0YXNoSXRlbXNBc1RleHQgKHN0YXNoLCByZXN1bHRzKSB7XG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5mb250VG9Gb3JtYXRzLmdldChzdGFzaFswXS5mb250KVxuICAgIHJlc3VsdHMucHVzaCguLi50aGlzLml0ZW1zVG9Xb3JkcyhzdGFzaCwgZm9ybWF0KSlcbiAgfVxuXG4gIGl0ZW1zVG9Xb3JkcyAoaXRlbXMsIGZvcm1hdE5hbWUpIHtcbiAgICBjb25zdCBjb21iaW5lZFRleHQgPSBjb21iaW5lVGV4dChpdGVtcylcbiAgICBjb25zdCB3b3JkcyA9IGNvbWJpbmVkVGV4dC5zcGxpdCgnICcpXG4gICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0TmFtZSA/IFdvcmRGb3JtYXQuZW51bVZhbHVlT2YoZm9ybWF0TmFtZSkgOiBudWxsXG4gICAgcmV0dXJuIHdvcmRzLmZpbHRlcih3ID0+IHcudHJpbSgpLmxlbmd0aCA+IDApLm1hcCh3b3JkID0+IHtcbiAgICAgIHZhciB0eXBlID0gbnVsbFxuICAgICAgaWYgKHdvcmQuc3RhcnRzV2l0aCgnaHR0cDonKSkge1xuICAgICAgICB0aGlzLmNvbnRhaW5MaW5rcyA9IHRydWVcbiAgICAgICAgdHlwZSA9IFdvcmRUeXBlLkxJTktcbiAgICAgIH0gZWxzZSBpZiAod29yZC5zdGFydHNXaXRoKCd3d3cuJykpIHtcbiAgICAgICAgdGhpcy5jb250YWluTGlua3MgPSB0cnVlXG4gICAgICAgIHdvcmQgPSBgaHR0cDovLyR7d29yZH1gXG4gICAgICAgIHR5cGUgPSBXb3JkVHlwZS5MSU5LXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAgdGhpcy5mb3JtYXR0ZWRXb3JkcysrXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFdvcmQoeyBzdHJpbmc6IHdvcmQsIHR5cGUsIGZvcm1hdCB9KVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gY29tYmluZVRleHQgKHRleHRJdGVtcykge1xuICB2YXIgdGV4dCA9ICcnXG4gIHZhciBsYXN0SXRlbVxuICB0ZXh0SXRlbXMuZm9yRWFjaCh0ZXh0SXRlbSA9PiB7XG4gICAgdmFyIHRleHRUb0FkZCA9IHRleHRJdGVtLnRleHRcbiAgICBpZiAoIXRleHQuZW5kc1dpdGgoJyAnKSAmJiAhdGV4dFRvQWRkLnN0YXJ0c1dpdGgoJyAnKSkge1xuICAgICAgaWYgKGxhc3RJdGVtKSB7XG4gICAgICAgIGNvbnN0IHhEaXN0YW5jZSA9IHRleHRJdGVtLnggLSBsYXN0SXRlbS54IC0gbGFzdEl0ZW0ud2lkdGhcbiAgICAgICAgaWYgKHhEaXN0YW5jZSA+IDUpIHtcbiAgICAgICAgICB0ZXh0ICs9ICcgJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNMaXN0SXRlbUNoYXJhY3Rlcih0ZXh0SXRlbS50ZXh0KSkge1xuICAgICAgICAgIHRleHRUb0FkZCArPSAnICdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0ZXh0ICs9IHRleHRUb0FkZFxuICAgIGxhc3RJdGVtID0gdGV4dEl0ZW1cbiAgfSlcbiAgcmV0dXJuIHRleHRcbn1cbiIsIi8vIEBmbG93XG5cbi8qOjpcbmltcG9ydCBMaW5lSXRlbUJsb2NrIGZyb20gJy4uL0xpbmVJdGVtQmxvY2snXG4qL1xuXG5jb25zdCB7IEVudW0gfSA9IHJlcXVpcmUoJ2VudW1pZnknKVxuXG5mdW5jdGlvbiBmaXJzdEZvcm1hdCAobGluZUl0ZW0pIHtcbiAgaWYgKGxpbmVJdGVtLndvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIGxpbmVJdGVtLndvcmRzWzBdLmZvcm1hdFxufVxuXG5mdW5jdGlvbiBpc1B1bmN0YXRpb25DaGFyYWN0ZXIgKHN0cmluZykge1xuICBpZiAoc3RyaW5nLmxlbmd0aCAhPT0gMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBzdHJpbmdbMF0gPT09ICcuJyB8fCBzdHJpbmdbMF0gPT09ICchJyB8fCBzdHJpbmdbMF0gPT09ICc/J1xufVxuXG5mdW5jdGlvbiBsaW5lc1RvVGV4dCAobGluZUl0ZW1zLCBkaXNhYmxlSW5saW5lRm9ybWF0cykge1xuICB2YXIgdGV4dCA9ICcnXG4gIHZhciBvcGVuRm9ybWF0XG5cbiAgY29uc3QgY2xvc2VGb3JtYXQgPSAoKSA9PiB7XG4gICAgdGV4dCArPSBvcGVuRm9ybWF0LmVuZFN5bWJvbFxuICAgIG9wZW5Gb3JtYXQgPSBudWxsXG4gIH1cblxuICBsaW5lSXRlbXMuZm9yRWFjaCgobGluZSwgbGluZUluZGV4KSA9PiB7XG4gICAgbGluZS53b3Jkcy5mb3JFYWNoKCh3b3JkLCBpKSA9PiB7XG4gICAgICBjb25zdCB3b3JkVHlwZSA9IHdvcmQudHlwZVxuICAgICAgY29uc3Qgd29yZEZvcm1hdCA9IHdvcmQuZm9ybWF0XG4gICAgICBpZiAob3BlbkZvcm1hdCAmJiAoIXdvcmRGb3JtYXQgfHwgd29yZEZvcm1hdCAhPT0gb3BlbkZvcm1hdCkpIHtcbiAgICAgICAgY2xvc2VGb3JtYXQoKVxuICAgICAgfVxuXG4gICAgICBpZiAoaSA+IDAgJiYgISh3b3JkVHlwZSAmJiB3b3JkVHlwZS5hdHRhY2hXaXRob3V0V2hpdGVzcGFjZSkgJiYgIWlzUHVuY3RhdGlvbkNoYXJhY3Rlcih3b3JkLnN0cmluZykpIHtcbiAgICAgICAgdGV4dCArPSAnICdcbiAgICAgIH1cblxuICAgICAgaWYgKHdvcmRGb3JtYXQgJiYgIW9wZW5Gb3JtYXQgJiYgKCFkaXNhYmxlSW5saW5lRm9ybWF0cykpIHtcbiAgICAgICAgb3BlbkZvcm1hdCA9IHdvcmRGb3JtYXRcbiAgICAgICAgdGV4dCArPSBvcGVuRm9ybWF0LnN0YXJ0U3ltYm9sXG4gICAgICB9XG5cbiAgICAgIGlmICh3b3JkVHlwZSAmJiAoIWRpc2FibGVJbmxpbmVGb3JtYXRzIHx8IHdvcmRUeXBlLnBsYWluVGV4dEZvcm1hdCkpIHtcbiAgICAgICAgdGV4dCArPSB3b3JkVHlwZS50b1RleHQod29yZC5zdHJpbmcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ICs9IHdvcmQuc3RyaW5nXG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAob3BlbkZvcm1hdCAmJiAobGluZUluZGV4ID09PSBsaW5lSXRlbXMubGVuZ3RoIC0gMSB8fCBmaXJzdEZvcm1hdChsaW5lSXRlbXNbbGluZUluZGV4ICsgMV0pICE9PSBvcGVuRm9ybWF0KSkge1xuICAgICAgY2xvc2VGb3JtYXQoKVxuICAgIH1cbiAgICB0ZXh0ICs9ICdcXG4nXG4gIH0pXG4gIHJldHVybiB0ZXh0XG59XG5cbi8vIEFuIE1hcmtkb3duIGJsb2NrXG5jbGFzcyBCbG9ja1R5cGUgZXh0ZW5kcyBFbnVtIHtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJsb2NrVHlwZVxuXG5CbG9ja1R5cGUuaW5pdEVudW0oe1xuICBIMToge1xuICAgIGhlYWRsaW5lOiB0cnVlLFxuICAgIGhlYWRsaW5lTGV2ZWw6IDEsXG4gICAgdG9UZXh0IChibG9jayAvKjogTGluZUl0ZW1CbG9jayAqLykgLyo6IHN0cmluZyAqLyB7XG4gICAgICByZXR1cm4gJyMgJyArIGxpbmVzVG9UZXh0KGJsb2NrLml0ZW1zLCB0cnVlKVxuICAgIH0sXG4gIH0sXG4gIEgyOiB7XG4gICAgaGVhZGxpbmU6IHRydWUsXG4gICAgaGVhZGxpbmVMZXZlbDogMixcbiAgICB0b1RleHQgKGJsb2NrIC8qOiBMaW5lSXRlbUJsb2NrICovKSAvKjogc3RyaW5nICovIHtcbiAgICAgIHJldHVybiAnIyMgJyArIGxpbmVzVG9UZXh0KGJsb2NrLml0ZW1zLCB0cnVlKVxuICAgIH0sXG4gIH0sXG4gIEgzOiB7XG4gICAgaGVhZGxpbmU6IHRydWUsXG4gICAgaGVhZGxpbmVMZXZlbDogMyxcbiAgICB0b1RleHQgKGJsb2NrIC8qOiBMaW5lSXRlbUJsb2NrICovKSAvKjogc3RyaW5nICovIHtcbiAgICAgIHJldHVybiAnIyMjICcgKyBsaW5lc1RvVGV4dChibG9jay5pdGVtcywgdHJ1ZSlcbiAgICB9LFxuICB9LFxuICBINDoge1xuICAgIGhlYWRsaW5lOiB0cnVlLFxuICAgIGhlYWRsaW5lTGV2ZWw6IDQsXG4gICAgdG9UZXh0IChibG9jayAvKjogTGluZUl0ZW1CbG9jayAqLykgLyo6IHN0cmluZyAqLyB7XG4gICAgICByZXR1cm4gJyMjIyMgJyArIGxpbmVzVG9UZXh0KGJsb2NrLml0ZW1zLCB0cnVlKVxuICAgIH0sXG4gIH0sXG4gIEg1OiB7XG4gICAgaGVhZGxpbmU6IHRydWUsXG4gICAgaGVhZGxpbmVMZXZlbDogNSxcbiAgICB0b1RleHQgKGJsb2NrIC8qOiBMaW5lSXRlbUJsb2NrICovKSAvKjogc3RyaW5nICovIHtcbiAgICAgIHJldHVybiAnIyMjIyMgJyArIGxpbmVzVG9UZXh0KGJsb2NrLml0ZW1zLCB0cnVlKVxuICAgIH0sXG4gIH0sXG4gIEg2OiB7XG4gICAgaGVhZGxpbmU6IHRydWUsXG4gICAgaGVhZGxpbmVMZXZlbDogNixcbiAgICB0b1RleHQgKGJsb2NrIC8qOiBMaW5lSXRlbUJsb2NrICovKSAvKjogc3RyaW5nICovIHtcbiAgICAgIHJldHVybiAnIyMjIyMjICcgKyBsaW5lc1RvVGV4dChibG9jay5pdGVtcywgdHJ1ZSlcbiAgICB9LFxuICB9LFxuICBUT0M6IHtcbiAgICBtZXJnZVRvQmxvY2s6IHRydWUsXG4gICAgdG9UZXh0IChibG9jayAvKjogTGluZUl0ZW1CbG9jayAqLykgLyo6IHN0cmluZyAqLyB7XG4gICAgICByZXR1cm4gbGluZXNUb1RleHQoYmxvY2suaXRlbXMsIHRydWUpXG4gICAgfSxcbiAgfSxcbiAgRk9PVE5PVEVTOiB7XG4gICAgbWVyZ2VUb0Jsb2NrOiB0cnVlLFxuICAgIG1lcmdlRm9sbG93aW5nTm9uVHlwZWRJdGVtczogdHJ1ZSxcbiAgICB0b1RleHQgKGJsb2NrIC8qOiBMaW5lSXRlbUJsb2NrICovKSAvKjogc3RyaW5nICovIHtcbiAgICAgIHJldHVybiBsaW5lc1RvVGV4dChibG9jay5pdGVtcywgZmFsc2UpXG4gICAgfSxcbiAgfSxcbiAgQ09ERToge1xuICAgIG1lcmdlVG9CbG9jazogdHJ1ZSxcbiAgICB0b1RleHQgKGJsb2NrIC8qOiBMaW5lSXRlbUJsb2NrICovKSAvKjogc3RyaW5nICovIHtcbiAgICAgIHJldHVybiAnYGBgXFxuJyArIGxpbmVzVG9UZXh0KGJsb2NrLml0ZW1zLCB0cnVlKSArICdgYGAnXG4gICAgfSxcbiAgfSxcbiAgTElTVDoge1xuICAgIG1lcmdlVG9CbG9jazogZmFsc2UsXG4gICAgbWVyZ2VGb2xsb3dpbmdOb25UeXBlZEl0ZW1zV2l0aFNtYWxsRGlzdGFuY2U6IHRydWUsXG4gICAgdG9UZXh0IChibG9jayAvKjogTGluZUl0ZW1CbG9jayAqLykgLyo6IHN0cmluZyAqLyB7XG4gICAgICByZXR1cm4gbGluZXNUb1RleHQoYmxvY2suaXRlbXMsIGZhbHNlKVxuICAgIH0sXG4gIH0sXG4gIFBBUkFHUkFQSDoge1xuICAgIHRvVGV4dCAoYmxvY2sgLyo6IExpbmVJdGVtQmxvY2sgKi8pIC8qOiBzdHJpbmcgKi8ge1xuICAgICAgcmV0dXJuIGxpbmVzVG9UZXh0KGJsb2NrLml0ZW1zLCBmYWxzZSlcbiAgICB9LFxuICB9LFxufSlcblxubW9kdWxlLmV4cG9ydHMuaXNIZWFkbGluZSA9IGZ1bmN0aW9uIGlzSGVhZGxpbmUgKHR5cGUgLyo6IEJsb2NrVHlwZSAqLykgLyo6IGJvb2xlYW4gKi8ge1xuICByZXR1cm4gdHlwZSAmJiB0eXBlLm5hbWUubGVuZ3RoID09PSAyICYmIHR5cGUubmFtZVswXSA9PT0gJ0gnXG59XG5cbm1vZHVsZS5leHBvcnRzLmJsb2NrVG9UZXh0ID0gZnVuY3Rpb24gYmxvY2tUb1RleHQgKGJsb2NrIC8qOiBMaW5lSXRlbUJsb2NrICovKSAvKjogc3RyaW5nICovIHtcbiAgaWYgKCFibG9jay50eXBlKSB7XG4gICAgcmV0dXJuIGxpbmVzVG9UZXh0KGJsb2NrLml0ZW1zLCBmYWxzZSlcbiAgfVxuICByZXR1cm4gYmxvY2sudHlwZS50b1RleHQoYmxvY2spXG59XG5cbm1vZHVsZS5leHBvcnRzLmhlYWRsaW5lQnlMZXZlbCA9IGZ1bmN0aW9uIGhlYWRsaW5lQnlMZXZlbCAobGV2ZWwpIHtcbiAgaWYgKGxldmVsID09PSAxKSB7XG4gICAgcmV0dXJuIEJsb2NrVHlwZS5IMVxuICB9IGVsc2UgaWYgKGxldmVsID09PSAyKSB7XG4gICAgcmV0dXJuIEJsb2NrVHlwZS5IMlxuICB9IGVsc2UgaWYgKGxldmVsID09PSAzKSB7XG4gICAgcmV0dXJuIEJsb2NrVHlwZS5IM1xuICB9IGVsc2UgaWYgKGxldmVsID09PSA0KSB7XG4gICAgcmV0dXJuIEJsb2NrVHlwZS5INFxuICB9IGVsc2UgaWYgKGxldmVsID09PSA1KSB7XG4gICAgcmV0dXJuIEJsb2NrVHlwZS5INVxuICB9IGVsc2UgaWYgKGxldmVsID09PSA2KSB7XG4gICAgcmV0dXJuIEJsb2NrVHlwZS5INlxuICB9IGVsc2Uge1xuICAgIC8vIGlmIGxldmVsIGlzID49IDYsIGp1c3QgdXNlIEJsb2NrVHlwZSBINlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKCdVbnN1cHBvcnRlZCBoZWFkbGluZSBsZXZlbDogJyArIGxldmVsICsgJyAoc3VwcG9ydGVkIGFyZSAxLTYpLCBkZWZhdWx0aW5nIHRvIGxldmVsIDYnKVxuICAgIHJldHVybiBCbG9ja1R5cGUuSDZcbiAgfVxufVxuIiwiLy8gQGZsb3dcblxuY29uc3QgVG9MaW5lSXRlbVRyYW5zZm9ybWF0aW9uID0gcmVxdWlyZSgnLi4vVG9MaW5lSXRlbVRyYW5zZm9ybWF0aW9uJylcbmNvbnN0IFBhcnNlUmVzdWx0ID0gcmVxdWlyZSgnLi4vLi4vUGFyc2VSZXN1bHQnKVxuY29uc3QgTGluZUl0ZW0gPSByZXF1aXJlKCcuLi8uLi9MaW5lSXRlbScpXG5jb25zdCBUZXh0SXRlbUxpbmVHcm91cGVyID0gcmVxdWlyZSgnLi4vLi4vVGV4dEl0ZW1MaW5lR3JvdXBlcicpXG5jb25zdCBMaW5lQ29udmVydGVyID0gcmVxdWlyZSgnLi4vLi4vTGluZUNvbnZlcnRlcicpXG5jb25zdCBCbG9ja1R5cGUgPSByZXF1aXJlKCcuLi8uLi9tYXJrZG93bi9CbG9ja1R5cGUnKVxuY29uc3QgeyBSRU1PVkVEX0FOTk9UQVRJT04sIEFEREVEX0FOTk9UQVRJT04gfSA9IHJlcXVpcmUoJy4uLy4uL0Fubm90YXRpb24nKVxuXG4vLyBnYXRoZXJzIHRleHQgaXRlbXMgb24gdGhlIHNhbWUgeSBsaW5lIHRvIG9uZSBsaW5lIGl0ZW1cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgQ29tcGFjdExpbmVzIGV4dGVuZHMgVG9MaW5lSXRlbVRyYW5zZm9ybWF0aW9uIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKCdDb21wYWN0IFRvIExpbmVzJylcbiAgfVxuXG4gIHRyYW5zZm9ybSAocGFyc2VSZXN1bHQgLyo6IFBhcnNlUmVzdWx0ICovKSAvKjogUGFyc2VSZXN1bHQgKi8ge1xuICAgIGNvbnN0IHsgbW9zdFVzZWREaXN0YW5jZSwgZm9udFRvRm9ybWF0cyB9ID0gcGFyc2VSZXN1bHQuZ2xvYmFsc1xuICAgIGNvbnN0IGZvdW5kRm9vdG5vdGVzID0gW11cbiAgICBjb25zdCBmb3VuZEZvb3Rub3RlTGlua3MgPSBbXVxuICAgIHZhciBsaW5rQ291bnQgPSAwXG4gICAgdmFyIGZvcm1hdHRlZFdvcmRzID0gMFxuXG4gICAgY29uc3QgbGluZUdyb3VwZXIgPSBuZXcgVGV4dEl0ZW1MaW5lR3JvdXBlcih7XG4gICAgICBtb3N0VXNlZERpc3RhbmNlOiBtb3N0VXNlZERpc3RhbmNlLFxuICAgIH0pXG4gICAgY29uc3QgbGluZUNvbXBhY3RvciA9IG5ldyBMaW5lQ29udmVydGVyKGZvbnRUb0Zvcm1hdHMpXG5cbiAgICBwYXJzZVJlc3VsdC5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xuICAgICAgaWYgKHBhZ2UuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBsaW5lSXRlbXMgPSBbXVxuICAgICAgICBjb25zdCB0ZXh0SXRlbXNHcm91cGVkQnlMaW5lID0gbGluZUdyb3VwZXIuZ3JvdXAocGFnZS5pdGVtcylcbiAgICAgICAgdGV4dEl0ZW1zR3JvdXBlZEJ5TGluZS5mb3JFYWNoKGxpbmVUZXh0SXRlbXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGxpbmVJdGVtID0gbGluZUNvbXBhY3Rvci5jb21wYWN0KGxpbmVUZXh0SXRlbXMpXG4gICAgICAgICAgaWYgKGxpbmVUZXh0SXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgbGluZUl0ZW0uYW5ub3RhdGlvbiA9IEFEREVEX0FOTk9UQVRJT05cbiAgICAgICAgICAgIGxpbmVUZXh0SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5hbm5vdGF0aW9uID0gUkVNT1ZFRF9BTk5PVEFUSU9OXG4gICAgICAgICAgICAgIGxpbmVJdGVtcy5wdXNoKG5ldyBMaW5lSXRlbSh7XG4gICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGluZUl0ZW0ud29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBsaW5lSXRlbS5hbm5vdGF0aW9uID0gUkVNT1ZFRF9BTk5PVEFUSU9OXG4gICAgICAgICAgfVxuICAgICAgICAgIGxpbmVJdGVtcy5wdXNoKGxpbmVJdGVtKVxuXG4gICAgICAgICAgaWYgKGxpbmVJdGVtLnBhcnNlZEVsZW1lbnRzLmZvcm1hdHRlZFdvcmRzKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRXb3JkcyArPSBsaW5lSXRlbS5wYXJzZWRFbGVtZW50cy5mb3JtYXR0ZWRXb3Jkc1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGluZUl0ZW0ucGFyc2VkRWxlbWVudHMuY29udGFpbkxpbmtzID4gMCkge1xuICAgICAgICAgICAgbGlua0NvdW50KytcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxpbmVJdGVtLnBhcnNlZEVsZW1lbnRzLmZvb3Rub3RlTGlua3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZm9vdG5vdGVMaW5rcyA9IGxpbmVJdGVtLnBhcnNlZEVsZW1lbnRzLmZvb3Rub3RlTGlua3MubWFwKGZvb3Rub3RlTGluayA9PiAoeyBmb290bm90ZUxpbmssIHBhZ2U6IHBhZ2UuaW5kZXggKyAxIH0pKVxuICAgICAgICAgICAgZm91bmRGb290bm90ZUxpbmtzLnB1c2guYXBwbHkoZm91bmRGb290bm90ZUxpbmtzLCBmb290bm90ZUxpbmtzKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGluZUl0ZW0ucGFyc2VkRWxlbWVudHMuZm9vdG5vdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxpbmVJdGVtLnR5cGUgPSBCbG9ja1R5cGUuRk9PVE5PVEVTXG4gICAgICAgICAgICBjb25zdCBmb290bm90ZXMgPSBsaW5lSXRlbS5wYXJzZWRFbGVtZW50cy5mb290bm90ZXMubWFwKGZvb3Rub3RlID0+ICh7IGZvb3Rub3RlLCBwYWdlOiBwYWdlLmluZGV4ICsgMSB9KSlcbiAgICAgICAgICAgIGZvdW5kRm9vdG5vdGVzLnB1c2guYXBwbHkoZm91bmRGb290bm90ZXMsIGZvb3Rub3RlcylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHBhZ2UuaXRlbXMgPSBsaW5lSXRlbXNcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIG5ldyBQYXJzZVJlc3VsdCh7XG4gICAgICAuLi5wYXJzZVJlc3VsdCxcbiAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICdEZXRlY3RlZCAnICsgZm9ybWF0dGVkV29yZHMgKyAnIGZvcm1hdHRlZCB3b3JkcycsXG4gICAgICAgICdGb3VuZCAnICsgbGlua0NvdW50ICsgJyBsaW5rcycsXG4gICAgICAgICdEZXRlY3RlZCAnICsgZm91bmRGb290bm90ZUxpbmtzLmxlbmd0aCArICcgZm9vdG5vdGVzIGxpbmtzJyxcbiAgICAgICAgJ0RldGVjdGVkICcgKyBmb3VuZEZvb3Rub3Rlcy5sZW5ndGggKyAnIGZvb3Rub3RlcycsXG4gICAgICBdLFxuICAgIH0pXG4gIH1cbn1cbiIsIi8vIEBmbG93XG5cbmNvbnN0IFRvTGluZUl0ZW1UcmFuc2Zvcm1hdGlvbiA9IHJlcXVpcmUoJy4uL1RvTGluZUl0ZW1UcmFuc2Zvcm1hdGlvbicpXG5jb25zdCBQYXJzZVJlc3VsdCA9IHJlcXVpcmUoJy4uLy4uL1BhcnNlUmVzdWx0JylcbmNvbnN0IHsgUkVNT1ZFRF9BTk5PVEFUSU9OIH0gPSByZXF1aXJlKCcuLi8uLi9Bbm5vdGF0aW9uJylcblxuY29uc3QgeyBpc0RpZ2l0IH0gPSByZXF1aXJlKCcuLi8uLi8uLi91dGlsL3N0cmluZy1mdW5jdGlvbnMnKVxuXG5mdW5jdGlvbiBoYXNoQ29kZUlnbm9yaW5nU3BhY2VzQW5kTnVtYmVycyAoc3RyaW5nKSB7XG4gIHZhciBoYXNoID0gMFxuICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiBoYXNoXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhckNvZGUgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuICAgIGlmICghaXNEaWdpdChjaGFyQ29kZSkgJiYgY2hhckNvZGUgIT09IDMyICYmIGNoYXJDb2RlICE9PSAxNjApIHtcbiAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNoYXJDb2RlXG4gICAgICBoYXNoIHw9IDAgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gICAgfVxuICB9XG4gIHJldHVybiBoYXNoXG59XG5cbi8vIFJlbW92ZSBlbGVtZW50cyB3aXRoIHNpbWlsYXIgY29udGVudCBvbiBzYW1lIHBhZ2UgcG9zaXRpb25zLCBsaWtlIHBhZ2UgbnVtYmVycywgbGljZW5lcyBpbmZvcm1hdGlvbiwgZXRjLi4uXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFJlbW92ZVJlcGV0aXRpdmVFbGVtZW50cyBleHRlbmRzIFRvTGluZUl0ZW1UcmFuc2Zvcm1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcignUmVtb3ZlIFJlcGV0aXRpdmUgRWxlbWVudHMnKVxuICB9XG5cbiAgLy8gVGhlIGlkZWEgaXMgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBGb3IgZWFjaCBwYWdlLCBjb2xsZWN0IGFsbCBpdGVtcyBvZiB0aGUgZmlyc3QsIGFuZCBhbGwgaXRlbXMgb2YgdGhlIGxhc3QgbGluZVxuICAvLyAtIENhbGN1bGF0ZSBob3cgb2Z0ZW4gdGhlc2UgaXRlbXMgb2NjdXIgYWNjcm9zIGFsbCBwYWdlcyAoaGFzaCBpZ25vcmluZyBudW1iZXJzLCB3aGl0ZXNwYWNlLCB1cHBlci9sb3dlcmNhc2UpXG4gIC8vIC0gRGVsZXRlIGl0ZW1zIG9jY3VyaW5nIG9uIG1vcmUgdGhlbiAyLzMgb2YgYWxsIHBhZ2VzXG4gIHRyYW5zZm9ybSAocGFyc2VSZXN1bHQgLyo6IFBhcnNlUmVzdWx0ICovKSAvKjogUGFyc2VSZXN1bHQgKi8ge1xuICAgIC8vIGZpbmQgZmlyc3QgYW5kIGxhc3QgbGluZXMgcGVyIHBhZ2VcbiAgICBjb25zdCBwYWdlU3RvcmUgPSBbXVxuICAgIGNvbnN0IG1pbkxpbmVIYXNoUmVwZXRpdGlvbnMgPSB7fVxuICAgIGNvbnN0IG1heExpbmVIYXNoUmVwZXRpdGlvbnMgPSB7fVxuICAgIHBhcnNlUmVzdWx0LnBhZ2VzLmZvckVhY2gocGFnZSA9PiB7XG4gICAgICBjb25zdCBtaW5NYXhJdGVtcyA9IHBhZ2UuaXRlbXMucmVkdWNlKChpdGVtU3RvcmUsIGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ueSA8IGl0ZW1TdG9yZS5taW5ZKSB7XG4gICAgICAgICAgaXRlbVN0b3JlLm1pbkVsZW1lbnRzID0gW2l0ZW1dXG4gICAgICAgICAgaXRlbVN0b3JlLm1pblkgPSBpdGVtLnlcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnkgPT09IGl0ZW1TdG9yZS5taW5ZKSB7XG4gICAgICAgICAgaXRlbVN0b3JlLm1pbkVsZW1lbnRzLnB1c2goaXRlbSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS55ID4gaXRlbVN0b3JlLm1heFkpIHtcbiAgICAgICAgICBpdGVtU3RvcmUubWF4RWxlbWVudHMgPSBbaXRlbV1cbiAgICAgICAgICBpdGVtU3RvcmUubWF4WSA9IGl0ZW0ueVxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ueSA9PT0gaXRlbVN0b3JlLm1heFkpIHtcbiAgICAgICAgICBpdGVtU3RvcmUubWF4RWxlbWVudHMucHVzaChpdGVtKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtU3RvcmVcbiAgICAgIH0sIHtcbiAgICAgICAgbWluWTogOTk5LFxuICAgICAgICBtYXhZOiAwLFxuICAgICAgICBtaW5FbGVtZW50czogW10sXG4gICAgICAgIG1heEVsZW1lbnRzOiBbXSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG1pbkxpbmVIYXNoID0gaGFzaENvZGVJZ25vcmluZ1NwYWNlc0FuZE51bWJlcnMobWluTWF4SXRlbXMubWluRWxlbWVudHMucmVkdWNlKChjb21iaW5lZFN0cmluZywgaXRlbSkgPT4gY29tYmluZWRTdHJpbmcgKyBpdGVtLnRleHQoKS50b1VwcGVyQ2FzZSgpLCAnJykpXG4gICAgICBjb25zdCBtYXhMaW5lSGFzaCA9IGhhc2hDb2RlSWdub3JpbmdTcGFjZXNBbmROdW1iZXJzKG1pbk1heEl0ZW1zLm1heEVsZW1lbnRzLnJlZHVjZSgoY29tYmluZWRTdHJpbmcsIGl0ZW0pID0+IGNvbWJpbmVkU3RyaW5nICsgaXRlbS50ZXh0KCkudG9VcHBlckNhc2UoKSwgJycpKVxuICAgICAgcGFnZVN0b3JlLnB1c2goe1xuICAgICAgICBtaW5FbGVtZW50czogbWluTWF4SXRlbXMubWluRWxlbWVudHMsXG4gICAgICAgIG1heEVsZW1lbnRzOiBtaW5NYXhJdGVtcy5tYXhFbGVtZW50cyxcbiAgICAgICAgbWluTGluZUhhc2g6IG1pbkxpbmVIYXNoLFxuICAgICAgICBtYXhMaW5lSGFzaDogbWF4TGluZUhhc2gsXG4gICAgICB9KVxuICAgICAgbWluTGluZUhhc2hSZXBldGl0aW9uc1ttaW5MaW5lSGFzaF0gPSBtaW5MaW5lSGFzaFJlcGV0aXRpb25zW21pbkxpbmVIYXNoXSA/IG1pbkxpbmVIYXNoUmVwZXRpdGlvbnNbbWluTGluZUhhc2hdICsgMSA6IDFcbiAgICAgIG1heExpbmVIYXNoUmVwZXRpdGlvbnNbbWF4TGluZUhhc2hdID0gbWF4TGluZUhhc2hSZXBldGl0aW9uc1ttYXhMaW5lSGFzaF0gPyBtYXhMaW5lSGFzaFJlcGV0aXRpb25zW21heExpbmVIYXNoXSArIDEgOiAxXG4gICAgfSlcblxuICAgIC8vIG5vdyBhbm5vYXRlIGFsbCByZW1vdmVkIGl0ZW1zXG4gICAgdmFyIHJlbW92ZWRIZWFkZXIgPSAwXG4gICAgdmFyIHJlbW92ZWRGb290ZXIgPSAwXG4gICAgcGFyc2VSZXN1bHQucGFnZXMuZm9yRWFjaCgocGFnZSwgaSkgPT4ge1xuICAgICAgaWYgKG1pbkxpbmVIYXNoUmVwZXRpdGlvbnNbcGFnZVN0b3JlW2ldLm1pbkxpbmVIYXNoXSA+PSBNYXRoLm1heCgzLCBwYXJzZVJlc3VsdC5wYWdlcy5sZW5ndGggKiAyIC8gMykpIHtcbiAgICAgICAgcGFnZVN0b3JlW2ldLm1pbkVsZW1lbnRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgaXRlbS5hbm5vdGF0aW9uID0gUkVNT1ZFRF9BTk5PVEFUSU9OXG4gICAgICAgIH0pXG4gICAgICAgIHJlbW92ZWRGb290ZXIrK1xuICAgICAgfVxuICAgICAgaWYgKG1heExpbmVIYXNoUmVwZXRpdGlvbnNbcGFnZVN0b3JlW2ldLm1heExpbmVIYXNoXSA+PSBNYXRoLm1heCgzLCBwYXJzZVJlc3VsdC5wYWdlcy5sZW5ndGggKiAyIC8gMykpIHtcbiAgICAgICAgcGFnZVN0b3JlW2ldLm1heEVsZW1lbnRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgaXRlbS5hbm5vdGF0aW9uID0gUkVNT1ZFRF9BTk5PVEFUSU9OXG4gICAgICAgIH0pXG4gICAgICAgIHJlbW92ZWRIZWFkZXIrK1xuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gbmV3IFBhcnNlUmVzdWx0KHtcbiAgICAgIC4uLnBhcnNlUmVzdWx0LFxuICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgJ1JlbW92ZWQgSGVhZGVyOiAnICsgcmVtb3ZlZEhlYWRlcixcbiAgICAgICAgJ1JlbW92ZWQgRm9vdGVyczogJyArIHJlbW92ZWRGb290ZXIsXG4gICAgICBdLFxuICAgIH0pXG4gIH1cbn1cbiIsIi8vIEBmbG93XG5cbmNvbnN0IFRvTGluZUl0ZW1UcmFuc2Zvcm1hdGlvbiA9IHJlcXVpcmUoJy4uL1RvTGluZUl0ZW1UcmFuc2Zvcm1hdGlvbicpXG5jb25zdCBQYXJzZVJlc3VsdCA9IHJlcXVpcmUoJy4uLy4uL1BhcnNlUmVzdWx0JylcbmNvbnN0IExpbmVJdGVtID0gcmVxdWlyZSgnLi4vLi4vTGluZUl0ZW0nKVxuY29uc3QgU3Rhc2hpbmdTdHJlYW0gPSByZXF1aXJlKCcuLi8uLi9TdGFzaGluZ1N0cmVhbScpXG5jb25zdCB7IFJFTU9WRURfQU5OT1RBVElPTiwgQURERURfQU5OT1RBVElPTiB9ID0gcmVxdWlyZSgnLi4vLi4vQW5ub3RhdGlvbicpXG5cbi8vIENvbnZlcnRzIHZlcnRpY2FsIHRleHQgdG8gaG9yaXpvbnRhbFxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBWZXJ0aWNhbFRvSG9yaXpvbnRhbCBleHRlbmRzIFRvTGluZUl0ZW1UcmFuc2Zvcm1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcignVmVydGljYWwgdG8gSG9yaXpvbnRhbCBUZXh0JylcbiAgfVxuXG4gIHRyYW5zZm9ybSAocGFyc2VSZXN1bHQgLyo6IFBhcnNlUmVzdWx0ICovKSAvKjogUGFyc2VSZXN1bHQgKi8ge1xuICAgIHZhciBmb3VuZFZlcnRpY2FscyA9IDBcbiAgICBwYXJzZVJlc3VsdC5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xuICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IFZlcnRpY2Fsc1N0cmVhbSgpXG4gICAgICBzdHJlYW0uY29uc3VtZUFsbChwYWdlLml0ZW1zKVxuICAgICAgcGFnZS5pdGVtcyA9IHN0cmVhbS5jb21wbGV0ZSgpXG4gICAgICBmb3VuZFZlcnRpY2FscyArPSBzdHJlYW0uZm91bmRWZXJ0aWNhbHNcbiAgICB9KVxuXG4gICAgcmV0dXJuIG5ldyBQYXJzZVJlc3VsdCh7XG4gICAgICAuLi5wYXJzZVJlc3VsdCxcbiAgICAgIG1lc3NhZ2VzOiBbJ0NvbnZlcnRlZCAnICsgZm91bmRWZXJ0aWNhbHMgKyAnIHZlcnRpY2FscyddLFxuICAgIH0pXG4gIH1cbn1cblxuY2xhc3MgVmVydGljYWxzU3RyZWFtIGV4dGVuZHMgU3Rhc2hpbmdTdHJlYW0ge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuZm91bmRWZXJ0aWNhbHMgPSAwXG4gIH1cblxuICBzaG91bGRTdGFzaCAoaXRlbSkge1xuICAgIHJldHVybiBpdGVtLndvcmRzLmxlbmd0aCA9PT0gMSAmJiBpdGVtLndvcmRzWzBdLnN0cmluZy5sZW5ndGggPT09IDFcbiAgfVxuXG4gIGRvTWF0Y2hlc1N0YXNoIChsYXN0SXRlbSwgaXRlbSkge1xuICAgIHJldHVybiBsYXN0SXRlbS55IC0gaXRlbS55ID4gNSAmJiBsYXN0SXRlbS53b3Jkc1swXS50eXBlID09PSBpdGVtLndvcmRzWzBdLnR5cGVcbiAgfVxuXG4gIGRvRmx1c2hTdGFzaCAoc3Rhc2gsIHJlc3VsdHMpIHtcbiAgICBpZiAoc3Rhc2gubGVuZ3RoID4gNSkgeyAvLyB1bml0ZVxuICAgICAgdmFyIGNvbWJpbmVkV29yZHMgPSBbXVxuICAgICAgdmFyIG1pblggPSA5OTlcbiAgICAgIHZhciBtYXhZID0gMFxuICAgICAgdmFyIHN1bVdpZHRoID0gMFxuICAgICAgdmFyIG1heEhlaWdodCA9IDBcbiAgICAgIHN0YXNoLmZvckVhY2gob25lQ2hhcmFjdGVyTGluZSA9PiB7XG4gICAgICAgIG9uZUNoYXJhY3RlckxpbmUuYW5ub3RhdGlvbiA9IFJFTU9WRURfQU5OT1RBVElPTlxuICAgICAgICByZXN1bHRzLnB1c2gob25lQ2hhcmFjdGVyTGluZSlcbiAgICAgICAgY29tYmluZWRXb3Jkcy5wdXNoKG9uZUNoYXJhY3RlckxpbmUud29yZHNbMF0pXG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBvbmVDaGFyYWN0ZXJMaW5lLngpXG4gICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBvbmVDaGFyYWN0ZXJMaW5lLnkpXG4gICAgICAgIHN1bVdpZHRoICs9IG9uZUNoYXJhY3RlckxpbmUud2lkdGhcbiAgICAgICAgbWF4SGVpZ2h0ID0gTWF0aC5tYXgobWF4SGVpZ2h0LCBvbmVDaGFyYWN0ZXJMaW5lLmhlaWdodClcbiAgICAgIH0pXG4gICAgICByZXN1bHRzLnB1c2gobmV3IExpbmVJdGVtKHtcbiAgICAgICAgLi4uc3Rhc2hbMF0sXG4gICAgICAgIHg6IG1pblgsXG4gICAgICAgIHk6IG1heFksXG4gICAgICAgIHdpZHRoOiBzdW1XaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBtYXhIZWlnaHQsXG4gICAgICAgIHdvcmRzOiBjb21iaW5lZFdvcmRzLFxuICAgICAgICBhbm5vdGF0aW9uOiBBRERFRF9BTk5PVEFUSU9OLFxuICAgICAgfSkpXG4gICAgICB0aGlzLmZvdW5kVmVydGljYWxzKytcbiAgICB9IGVsc2UgeyAvLyBhZGQgYXMgc2luZ2xlc1xuICAgICAgcmVzdWx0cy5wdXNoKC4uLnN0YXNoKVxuICAgIH1cbiAgfVxufVxuIiwiY29uc3QgeyBub3JtYWxpemVkQ2hhckNvZGVBcnJheSB9ID0gcmVxdWlyZSgnLi4vdXRpbC9zdHJpbmctZnVuY3Rpb25zJylcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBIZWFkbGluZUZpbmRlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRpb25zKSB7XG4gICAgdGhpcy5oZWFkbGluZUNoYXJDb2RlcyA9IG5vcm1hbGl6ZWRDaGFyQ29kZUFycmF5KG9wdGlvbnMuaGVhZGxpbmUpXG4gICAgdGhpcy5zdGFja2VkTGluZUl0ZW1zID0gW11cbiAgICB0aGlzLnN0YWNrZWRDaGFycyA9IDBcbiAgfVxuXG4gIGNvbnN1bWUgKGxpbmVJdGVtKSB7XG4gICAgLy8gVE9ETyBhdm9pZCBqb2luXG4gICAgY29uc3Qgbm9ybWFsaXplZENoYXJDb2RlcyA9IG5vcm1hbGl6ZWRDaGFyQ29kZUFycmF5KGxpbmVJdGVtLnRleHQoKSlcbiAgICBjb25zdCBtYXRjaEFsbCA9IHRoaXMubWF0Y2hBbGwobm9ybWFsaXplZENoYXJDb2RlcylcbiAgICBpZiAobWF0Y2hBbGwpIHtcbiAgICAgIHRoaXMuc3RhY2tlZExpbmVJdGVtcy5wdXNoKGxpbmVJdGVtKVxuICAgICAgdGhpcy5zdGFja2VkQ2hhcnMgKz0gbm9ybWFsaXplZENoYXJDb2Rlcy5sZW5ndGhcbiAgICAgIGlmICh0aGlzLnN0YWNrZWRDaGFycyA9PT0gdGhpcy5oZWFkbGluZUNoYXJDb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2tlZExpbmVJdGVtc1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdGFja2VkQ2hhcnMgPiAwKSB7XG4gICAgICAgIHRoaXMuc3RhY2tlZENoYXJzID0gMFxuICAgICAgICB0aGlzLnN0YWNrZWRMaW5lSXRlbXMgPSBbXVxuICAgICAgICB0aGlzLmNvbnN1bWUobGluZUl0ZW0pIC8vIHRlc3QgYWdhaW4gd2l0aG91dCBzdGFja1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgbWF0Y2hBbGwgKG5vcm1hbGl6ZWRDaGFyQ29kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vcm1hbGl6ZWRDaGFyQ29kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGhlYWRsaW5lQ2hhciA9IHRoaXMuaGVhZGxpbmVDaGFyQ29kZXNbdGhpcy5zdGFja2VkQ2hhcnMgKyBpXVxuICAgICAgY29uc3QgdGV4dEl0ZW1DaGFyID0gbm9ybWFsaXplZENoYXJDb2Rlc1tpXVxuICAgICAgaWYgKHRleHRJdGVtQ2hhciAhPT0gaGVhZGxpbmVDaGFyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG4iLCIvLyBAZmxvd1xuXG5jb25zdCBUb0xpbmVJdGVtVHJhbnNmb3JtYXRpb24gPSByZXF1aXJlKCcuLi9Ub0xpbmVJdGVtVHJhbnNmb3JtYXRpb24nKVxuY29uc3QgUGFyc2VSZXN1bHQgPSByZXF1aXJlKCcuLi8uLi9QYXJzZVJlc3VsdCcpXG5jb25zdCBMaW5lSXRlbSA9IHJlcXVpcmUoJy4uLy4uL0xpbmVJdGVtJylcbmNvbnN0IFdvcmQgPSByZXF1aXJlKCcuLi8uLi9Xb3JkJylcbmNvbnN0IEhlYWRsaW5lRmluZGVyID0gcmVxdWlyZSgnLi4vLi4vSGVhZGxpbmVGaW5kZXInKVxuY29uc3QgeyBSRU1PVkVEX0FOTk9UQVRJT04sIEFEREVEX0FOTk9UQVRJT04gfSA9IHJlcXVpcmUoJy4uLy4uL0Fubm90YXRpb24nKVxuY29uc3QgQmxvY2tUeXBlID0gcmVxdWlyZSgnLi4vLi4vbWFya2Rvd24vQmxvY2tUeXBlJylcbmNvbnN0IHsgaGVhZGxpbmVCeUxldmVsIH0gPSByZXF1aXJlKCcuLi8uLi9tYXJrZG93bi9CbG9ja1R5cGUnKVxuY29uc3QgeyBpc0RpZ2l0LCBpc051bWJlciwgd29yZE1hdGNoLCBoYXNPbmx5IH0gPSByZXF1aXJlKCcuLi8uLi8uLi91dGlsL3N0cmluZy1mdW5jdGlvbnMnKVxuXG4vLyBEZXRlY3QgdGFibGUgb2YgY29udGVudHMgcGFnZXMgcGx1cyBsaW5rZWQgaGVhZGxpbmVzXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERldGVjdFRPQyBleHRlbmRzIFRvTGluZUl0ZW1UcmFuc2Zvcm1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcignRGV0ZWN0IFRPQycpXG4gIH1cblxuICB0cmFuc2Zvcm0gKHBhcnNlUmVzdWx0IC8qOiBQYXJzZVJlc3VsdCAqLykgLyo6IFBhcnNlUmVzdWx0ICovIHtcbiAgICBjb25zdCB0b2NQYWdlcyA9IFtdXG4gICAgY29uc3QgbWF4UGFnZXNUb0V2YWx1YXRlID0gTWF0aC5taW4oMjAsIHBhcnNlUmVzdWx0LnBhZ2VzLmxlbmd0aClcbiAgICBjb25zdCBsaW5rTGV2ZWxlciA9IG5ldyBMaW5rTGV2ZWxlcigpXG5cbiAgICB2YXIgdG9jTGlua3MgPSBbXVxuICAgIHZhciBsYXN0VG9jUGFnZVxuICAgIHZhciBoZWFkbGluZUl0ZW1cbiAgICBwYXJzZVJlc3VsdC5wYWdlcy5zbGljZSgwLCBtYXhQYWdlc1RvRXZhbHVhdGUpLmZvckVhY2gocGFnZSA9PiB7XG4gICAgICB2YXIgbGluZUl0ZW1zV2l0aERpZ2l0cyA9IDBcbiAgICAgIGNvbnN0IHVua25vd25MaW5lcyA9IG5ldyBTZXQoKVxuICAgICAgY29uc3QgcGFnZVRvY0xpbmtzID0gW11cbiAgICAgIHZhciBsYXN0V29yZHNXaXRob3V0TnVtYmVyXG4gICAgICB2YXIgbGFzdExpbmVcbiAgICAgIC8vIGZpbmQgbGluZXMgd2l0aCB3b3JkcyBjb250YWluaW5nIG9ubHkgXCIuXCIgLi4uXG4gICAgICBjb25zdCB0b2NMaW5lcyA9IHBhZ2UuaXRlbXMuZmlsdGVyKGxpbmUgPT4gbGluZS53b3Jkcy5pbmNsdWRlcyh3b3JkID0+IGhhc09ubHkod29yZC5zdHJpbmcsICcuJykpKVxuICAgICAgLy8gLi4uIGFuZCBlbmRpbmcgd2l0aCBhIG51bWJlciBwZXIgcGFnZVxuICAgICAgdG9jTGluZXMuZm9yRWFjaChsaW5lID0+IHtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZS53b3Jkcy5maWx0ZXIod29yZCA9PiAhaGFzT25seSh3b3JkLnN0cmluZywgJy4nKSlcbiAgICAgICAgY29uc3QgZGlnaXRzID0gW11cbiAgICAgICAgd2hpbGUgKHdvcmRzLmxlbmd0aCA+IDAgJiYgaXNOdW1iZXIod29yZHNbd29yZHMubGVuZ3RoIC0gMV0uc3RyaW5nKSkge1xuICAgICAgICAgIGNvbnN0IGxhc3RXb3JkID0gd29yZHMucG9wKClcbiAgICAgICAgICBkaWdpdHMudW5zaGlmdChsYXN0V29yZC5zdHJpbmcpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlnaXRzLmxlbmd0aCA9PT0gMCAmJiB3b3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbGFzdFdvcmQgPSB3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxXVxuICAgICAgICAgIHdoaWxlIChpc0RpZ2l0KGxhc3RXb3JkLnN0cmluZy5jaGFyQ29kZUF0KGxhc3RXb3JkLnN0cmluZy5sZW5ndGggLSAxKSkpIHtcbiAgICAgICAgICAgIGRpZ2l0cy51bnNoaWZ0KGxhc3RXb3JkLnN0cmluZy5jaGFyQXQobGFzdFdvcmQuc3RyaW5nLmxlbmd0aCAtIDEpKVxuICAgICAgICAgICAgbGFzdFdvcmQuc3RyaW5nID0gbGFzdFdvcmQuc3RyaW5nLnN1YnN0cmluZygwLCBsYXN0V29yZC5zdHJpbmcubGVuZ3RoIC0gMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVuZHNXaXRoRGlnaXQgPSBkaWdpdHMubGVuZ3RoID4gMFxuICAgICAgICBpZiAoZW5kc1dpdGhEaWdpdCkge1xuICAgICAgICAgIGVuZHNXaXRoRGlnaXQgPSB0cnVlXG4gICAgICAgICAgaWYgKGxhc3RXb3Jkc1dpdGhvdXROdW1iZXIpIHsgLy8gMi1saW5lIGl0ZW0gP1xuICAgICAgICAgICAgd29yZHMucHVzaCguLi5sYXN0V29yZHNXaXRob3V0TnVtYmVyKVxuICAgICAgICAgICAgbGFzdFdvcmRzV2l0aG91dE51bWJlciA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZVRvY0xpbmtzLnB1c2gobmV3IFRvY0xpbmsoe1xuICAgICAgICAgICAgcGFnZU51bWJlcjogcGFyc2VJbnQoZGlnaXRzLmpvaW4oJycpKSxcbiAgICAgICAgICAgIGxpbmVJdGVtOiBuZXcgTGluZUl0ZW0oeyAuLi5saW5lLCB3b3JkcyB9KSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgICBsaW5lSXRlbXNXaXRoRGlnaXRzKytcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWhlYWRsaW5lSXRlbSkge1xuICAgICAgICAgICAgaGVhZGxpbmVJdGVtID0gbGluZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobGFzdFdvcmRzV2l0aG91dE51bWJlcikge1xuICAgICAgICAgICAgICB1bmtub3duTGluZXMuYWRkKGxhc3RMaW5lKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFdvcmRzV2l0aG91dE51bWJlciA9IHdvcmRzXG4gICAgICAgICAgICBsYXN0TGluZSA9IGxpbmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIHBhZ2UgaGFzIGJlZW4gcHJvY2Vzc2VkXG4gICAgICBpZiAobGluZUl0ZW1zV2l0aERpZ2l0cyAqIDEwMCAvIHBhZ2UuaXRlbXMubGVuZ3RoID4gNzUpIHtcbiAgICAgICAgdG9jUGFnZXMucHVzaChwYWdlLmluZGV4ICsgMSlcbiAgICAgICAgbGFzdFRvY1BhZ2UgPSBwYWdlXG4gICAgICAgIGxpbmtMZXZlbGVyLmxldmVsUGFnZUl0ZW1zKHBhZ2VUb2NMaW5rcylcbiAgICAgICAgdG9jTGlua3MucHVzaCguLi5wYWdlVG9jTGlua3MpXG5cbiAgICAgICAgY29uc3QgbmV3QmxvY2tzID0gW11cbiAgICAgICAgcGFnZS5pdGVtcy5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICAgICAgaWYgKCF1bmtub3duTGluZXMuaGFzKGxpbmUpKSB7XG4gICAgICAgICAgICBsaW5lLmFubm90YXRpb24gPSBSRU1PVkVEX0FOTk9UQVRJT05cbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3QmxvY2tzLnB1c2gobGluZSlcbiAgICAgICAgICBpZiAobGluZSA9PT0gaGVhZGxpbmVJdGVtKSB7XG4gICAgICAgICAgICBuZXdCbG9ja3MucHVzaChuZXcgTGluZUl0ZW0oe1xuICAgICAgICAgICAgICAuLi5saW5lLFxuICAgICAgICAgICAgICB0eXBlOiBCbG9ja1R5cGUuSDIsXG4gICAgICAgICAgICAgIGFubm90YXRpb246IEFEREVEX0FOTk9UQVRJT04sXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHBhZ2UuaXRlbXMgPSBuZXdCbG9ja3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWRsaW5lSXRlbSA9IG51bGxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gYWxsIHBhZ2VzIGhhdmUgYmVlbiBwcm9jZXNzZWRcbiAgICB2YXIgZm91bmRIZWFkbGluZXMgPSB0b2NMaW5rcy5sZW5ndGhcbiAgICBjb25zdCBub3RGb3VuZEhlYWRsaW5lcyA9IFtdXG4gICAgY29uc3QgZm91bmRCeVNpemUgPSBbXVxuICAgIGNvbnN0IGhlYWRsaW5lVHlwZVRvSGVpZ2h0UmFuZ2UgPSB7fSAvLyBIMT17bWluOjIzLCBtYXg6MjV9XG5cbiAgICBpZiAodG9jUGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQWRkIFRPQyBpdGVtc1xuICAgICAgdG9jTGlua3MuZm9yRWFjaCh0b2NMaW5rID0+IHtcbiAgICAgICAgbGFzdFRvY1BhZ2UuaXRlbXMucHVzaChuZXcgTGluZUl0ZW0oe1xuICAgICAgICAgIHdvcmRzOiBbbmV3IFdvcmQoe1xuICAgICAgICAgICAgc3RyaW5nOiAnICcucmVwZWF0KHRvY0xpbmsubGV2ZWwgKiAzKSArICctJyxcbiAgICAgICAgICB9KV0uY29uY2F0KHRvY0xpbmsubGluZUl0ZW0ud29yZHMpLFxuICAgICAgICAgIHR5cGU6IEJsb2NrVHlwZS5UT0MsXG4gICAgICAgICAgYW5ub3RhdGlvbjogQURERURfQU5OT1RBVElPTixcbiAgICAgICAgfSkpXG4gICAgICB9KVxuXG4gICAgICAvLyBBZGQgbGlua2VkIGhlYWRlcnNcbiAgICAgIGNvbnN0IHBhZ2VNYXBwaW5nID0gZGV0ZWN0UGFnZU1hcHBpbmdOdW1iZXIocGFyc2VSZXN1bHQucGFnZXMuZmlsdGVyKHBhZ2UgPT4gcGFnZS5pbmRleCA+IGxhc3RUb2NQYWdlLmluZGV4KSwgdG9jTGlua3MpXG4gICAgICB0b2NMaW5rcy5mb3JFYWNoKHRvY0xpbmsgPT4ge1xuICAgICAgICB2YXIgbGlua2VkUGFnZSA9IHBhcnNlUmVzdWx0LnBhZ2VzW3RvY0xpbmsucGFnZU51bWJlciArIHBhZ2VNYXBwaW5nXVxuICAgICAgICB2YXIgZm91bmRIZWFsaW5lSXRlbXNcbiAgICAgICAgaWYgKGxpbmtlZFBhZ2UpIHtcbiAgICAgICAgICBmb3VuZEhlYWxpbmVJdGVtcyA9IGZpbmRIZWFkbGluZUl0ZW1zKGxpbmtlZFBhZ2UsIHRvY0xpbmsubGluZUl0ZW0udGV4dCgpKVxuICAgICAgICAgIGlmICghZm91bmRIZWFsaW5lSXRlbXMpIHsgLy8gcGFnZXMgYXJlIG9mZiBieSAxID9cbiAgICAgICAgICAgIGxpbmtlZFBhZ2UgPSBwYXJzZVJlc3VsdC5wYWdlc1t0b2NMaW5rLnBhZ2VOdW1iZXIgKyBwYWdlTWFwcGluZyArIDFdXG4gICAgICAgICAgICBpZiAobGlua2VkUGFnZSkge1xuICAgICAgICAgICAgICBmb3VuZEhlYWxpbmVJdGVtcyA9IGZpbmRIZWFkbGluZUl0ZW1zKGxpbmtlZFBhZ2UsIHRvY0xpbmsubGluZUl0ZW0udGV4dCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmRIZWFsaW5lSXRlbXMpIHtcbiAgICAgICAgICBhZGRIZWFkbGluZUl0ZW1zKGxpbmtlZFBhZ2UsIHRvY0xpbmssIGZvdW5kSGVhbGluZUl0ZW1zLCBoZWFkbGluZVR5cGVUb0hlaWdodFJhbmdlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vdEZvdW5kSGVhZGxpbmVzLnB1c2godG9jTGluaylcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gVHJ5IHRvIGZpbmQgbGlua2VkIGhlYWRlcnMgYnkgaGVpZ2h0XG4gICAgICB2YXIgZnJvbVBhZ2UgPSBsYXN0VG9jUGFnZS5pbmRleCArIDJcbiAgICAgIHZhciBsYXN0Tm90Rm91bmQgPSBbXVxuICAgICAgY29uc3Qgcm9sbHVwTGFzdE5vdEZvdW5kID0gKGN1cnJlbnRQYWdlTnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChsYXN0Tm90Rm91bmQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxhc3ROb3RGb3VuZC5mb3JFYWNoKG5vdEZvdW5kVG9jTGluayA9PiB7XG4gICAgICAgICAgICBjb25zdCBoZWFkbGluZVR5cGUgPSBoZWFkbGluZUJ5TGV2ZWwobm90Rm91bmRUb2NMaW5rLmxldmVsICsgMilcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodFJhbmdlID0gaGVhZGxpbmVUeXBlVG9IZWlnaHRSYW5nZVtoZWFkbGluZVR5cGUubmFtZV1cbiAgICAgICAgICAgIGlmIChoZWlnaHRSYW5nZSkge1xuICAgICAgICAgICAgICBjb25zdCBbcGFnZUluZGV4LCBsaW5lSW5kZXhdID0gZmluZFBhZ2VBbmRMaW5lRnJvbUhlYWRsaW5lKHBhcnNlUmVzdWx0LnBhZ2VzLCBub3RGb3VuZFRvY0xpbmssIGhlaWdodFJhbmdlLCBmcm9tUGFnZSwgY3VycmVudFBhZ2VOdW1iZXIpXG4gICAgICAgICAgICAgIGlmIChsaW5lSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZVJlc3VsdC5wYWdlc1twYWdlSW5kZXhdXG4gICAgICAgICAgICAgICAgcGFnZS5pdGVtc1tsaW5lSW5kZXhdLmFubm90YXRpb24gPSBSRU1PVkVEX0FOTk9UQVRJT05cbiAgICAgICAgICAgICAgICBwYWdlLml0ZW1zLnNwbGljZShsaW5lSW5kZXggKyAxLCAwLCBuZXcgTGluZUl0ZW0oe1xuICAgICAgICAgICAgICAgICAgLi4ubm90Rm91bmRUb2NMaW5rLmxpbmVJdGVtLFxuICAgICAgICAgICAgICAgICAgdHlwZTogaGVhZGxpbmVUeXBlLFxuICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbjogQURERURfQU5OT1RBVElPTixcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICBmb3VuZEJ5U2l6ZS5wdXNoKG5vdEZvdW5kVG9jTGluaylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgbGFzdE5vdEZvdW5kID0gW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdEZvdW5kSGVhZGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG9jTGlua3MuZm9yRWFjaCh0b2NMaW5rID0+IHtcbiAgICAgICAgICBpZiAobm90Rm91bmRIZWFkbGluZXMuaW5jbHVkZXModG9jTGluaykpIHtcbiAgICAgICAgICAgIGxhc3ROb3RGb3VuZC5wdXNoKHRvY0xpbmspXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvbGx1cExhc3ROb3RGb3VuZCh0b2NMaW5rLnBhZ2VOdW1iZXIpXG4gICAgICAgICAgICBmcm9tUGFnZSA9IHRvY0xpbmsucGFnZU51bWJlclxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGxhc3ROb3RGb3VuZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcm9sbHVwTGFzdE5vdEZvdW5kKHBhcnNlUmVzdWx0LnBhZ2VzLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2VzID0gW11cbiAgICBtZXNzYWdlcy5wdXNoKCdEZXRlY3RlZCAnICsgdG9jUGFnZXMubGVuZ3RoICsgJyB0YWJsZSBvZiBjb250ZW50IHBhZ2VzJylcbiAgICBpZiAodG9jUGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgbWVzc2FnZXMucHVzaCgnVE9DIGhlYWRsaW5lIGhlaWdodHM6ICcgKyBKU09OLnN0cmluZ2lmeShoZWFkbGluZVR5cGVUb0hlaWdodFJhbmdlKSlcbiAgICAgIG1lc3NhZ2VzLnB1c2goJ0ZvdW5kIFRPQyBoZWFkbGluZXM6ICcgKyAoZm91bmRIZWFkbGluZXMgLSBub3RGb3VuZEhlYWRsaW5lcy5sZW5ndGggKyBmb3VuZEJ5U2l6ZS5sZW5ndGgpICsgJy8nICsgZm91bmRIZWFkbGluZXMpXG4gICAgfVxuICAgIGlmIChub3RGb3VuZEhlYWRsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICBtZXNzYWdlcy5wdXNoKCdGb3VuZCBUT0MgaGVhZGxpbmVzIChieSBzaXplKTogJyArIGZvdW5kQnlTaXplLm1hcCh0b2NMaW5rID0+IHRvY0xpbmsubGluZUl0ZW0udGV4dCgpKSlcbiAgICAgIG1lc3NhZ2VzLnB1c2goJ01pc3NpbmcgVE9DIGhlYWRsaW5lczogJyArIG5vdEZvdW5kSGVhZGxpbmVzLmZpbHRlcihmVG9jTGluayA9PiAhZm91bmRCeVNpemUuaW5jbHVkZXMoZlRvY0xpbmspKS5tYXAodG9jTGluayA9PiB0b2NMaW5rLmxpbmVJdGVtLnRleHQoKSArICc9PicgKyB0b2NMaW5rLnBhZ2VOdW1iZXIpKVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFBhcnNlUmVzdWx0KHtcbiAgICAgIC4uLnBhcnNlUmVzdWx0LFxuICAgICAgZ2xvYmFsczoge1xuICAgICAgICAuLi5wYXJzZVJlc3VsdC5nbG9iYWxzLFxuICAgICAgICB0b2NQYWdlcyxcbiAgICAgICAgaGVhZGxpbmVUeXBlVG9IZWlnaHRSYW5nZSxcbiAgICAgIH0sXG4gICAgICBtZXNzYWdlcyxcbiAgICB9KVxuICB9XG59XG5cbi8vIEZpbmQgb3V0IGhvdyB0aGUgVE9DIHBhZ2UgbGluayBhY3R1YWx5IHRyYW5zbGF0ZXMgdG8gdGhlIHBhZ2UuaW5kZXhcbmZ1bmN0aW9uIGRldGVjdFBhZ2VNYXBwaW5nTnVtYmVyIChwYWdlcywgdG9jTGlua3MpIHtcbiAgZm9yICh2YXIgdG9jTGluayBvZiB0b2NMaW5rcykge1xuICAgIGNvbnN0IHBhZ2UgPSBmaW5kUGFnZVdpdGhIZWFkbGluZShwYWdlcywgdG9jTGluay5saW5lSXRlbS50ZXh0KCkpXG4gICAgaWYgKHBhZ2UpIHtcbiAgICAgIHJldHVybiBwYWdlLmluZGV4IC0gdG9jTGluay5wYWdlTnVtYmVyXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGZpbmRQYWdlV2l0aEhlYWRsaW5lIChwYWdlcywgaGVhZGxpbmUpIHtcbiAgZm9yICh2YXIgcGFnZSBvZiBwYWdlcykge1xuICAgIGlmIChmaW5kSGVhZGxpbmVJdGVtcyhwYWdlLCBoZWFkbGluZSkpIHtcbiAgICAgIHJldHVybiBwYWdlXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGZpbmRIZWFkbGluZUl0ZW1zIChwYWdlLCBoZWFkbGluZSkge1xuICBjb25zdCBoZWFkbGluZUZpbmRlciA9IG5ldyBIZWFkbGluZUZpbmRlcih7IGhlYWRsaW5lIH0pXG4gIHZhciBsaW5lSW5kZXggPSAwXG4gIGZvciAodmFyIGxpbmUgb2YgcGFnZS5pdGVtcykge1xuICAgIGNvbnN0IGhlYWRsaW5lSXRlbXMgPSBoZWFkbGluZUZpbmRlci5jb25zdW1lKGxpbmUpXG4gICAgaWYgKGhlYWRsaW5lSXRlbXMpIHtcbiAgICAgIHJldHVybiB7IGxpbmVJbmRleCwgaGVhZGxpbmVJdGVtcyB9XG4gICAgfVxuICAgIGxpbmVJbmRleCsrXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gYWRkSGVhZGxpbmVJdGVtcyAocGFnZSwgdG9jTGluaywgZm91bmRJdGVtcywgaGVhZGxpbmVUeXBlVG9IZWlnaHRSYW5nZSkge1xuICBmb3VuZEl0ZW1zLmhlYWRsaW5lSXRlbXMuZm9yRWFjaChpdGVtID0+IChpdGVtLmFubm90YXRpb24gPSBSRU1PVkVEX0FOTk9UQVRJT04pKVxuICBjb25zdCBoZWFkbGluZVR5cGUgPSBoZWFkbGluZUJ5TGV2ZWwodG9jTGluay5sZXZlbCArIDIpXG4gIGNvbnN0IGhlYWRsaW5lSGVpZ2h0ID0gZm91bmRJdGVtcy5oZWFkbGluZUl0ZW1zLnJlZHVjZSgobWF4LCBpdGVtKSA9PiBNYXRoLm1heChtYXgsIGl0ZW0uaGVpZ2h0KSwgMClcbiAgcGFnZS5pdGVtcy5zcGxpY2UoZm91bmRJdGVtcy5saW5lSW5kZXggKyAxLCAwLCBuZXcgTGluZUl0ZW0oe1xuICAgIC4uLmZvdW5kSXRlbXMuaGVhZGxpbmVJdGVtc1swXSxcbiAgICB3b3JkczogdG9jTGluay5saW5lSXRlbS53b3JkcyxcbiAgICBoZWlnaHQ6IGhlYWRsaW5lSGVpZ2h0LFxuICAgIHR5cGU6IGhlYWRsaW5lVHlwZSxcbiAgICBhbm5vdGF0aW9uOiBBRERFRF9BTk5PVEFUSU9OLFxuICB9KSlcbiAgdmFyIHJhbmdlID0gaGVhZGxpbmVUeXBlVG9IZWlnaHRSYW5nZVtoZWFkbGluZVR5cGUubmFtZV1cbiAgaWYgKHJhbmdlKSB7XG4gICAgcmFuZ2UubWluID0gTWF0aC5taW4ocmFuZ2UubWluLCBoZWFkbGluZUhlaWdodClcbiAgICByYW5nZS5tYXggPSBNYXRoLm1heChyYW5nZS5tYXgsIGhlYWRsaW5lSGVpZ2h0KVxuICB9IGVsc2Uge1xuICAgIHJhbmdlID0ge1xuICAgICAgbWluOiBoZWFkbGluZUhlaWdodCxcbiAgICAgIG1heDogaGVhZGxpbmVIZWlnaHQsXG4gICAgfVxuICAgIGhlYWRsaW5lVHlwZVRvSGVpZ2h0UmFuZ2VbaGVhZGxpbmVUeXBlLm5hbWVdID0gcmFuZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kUGFnZUFuZExpbmVGcm9tSGVhZGxpbmUgKHBhZ2VzLCB0b2NMaW5rLCBoZWlnaHRSYW5nZSwgZnJvbVBhZ2UsIHRvUGFnZSkge1xuICBjb25zdCBsaW5rVGV4dCA9IHRvY0xpbmsubGluZUl0ZW0udGV4dCgpLnRvVXBwZXJDYXNlKClcbiAgZm9yICh2YXIgaSA9IGZyb21QYWdlOyBpIDw9IHRvUGFnZTsgaSsrKSB7XG4gICAgY29uc3QgcGFnZSA9IHBhZ2VzW2kgLSAxXVxuICAgIGlmIChwYWdlKSB7XG4gICAgICBjb25zdCBsaW5lSW5kZXggPSBwYWdlLml0ZW1zLmZpbmRJbmRleChsaW5lID0+IHtcbiAgICAgICAgaWYgKCFsaW5lLnR5cGUgJiYgIWxpbmUuYW5ub3RhdGlvbiAmJiBsaW5lLmhlaWdodCA+PSBoZWlnaHRSYW5nZS5taW4gJiYgbGluZS5oZWlnaHQgPD0gaGVpZ2h0UmFuZ2UubWF4KSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSB3b3JkTWF0Y2gobGlua1RleHQsIGxpbmUudGV4dCgpKVxuICAgICAgICAgIHJldHVybiBtYXRjaCA+PSAwLjVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH0pXG4gICAgICBpZiAobGluZUluZGV4ID4gLTEpIHJldHVybiBbaSAtIDEsIGxpbmVJbmRleF1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFstMSwgLTFdXG59XG5cbmNsYXNzIExpbmtMZXZlbGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMubGV2ZWxCeU1ldGhvZCA9IG51bGxcbiAgICB0aGlzLnVuaXF1ZUZvbnRzID0gW11cbiAgfVxuXG4gIGxldmVsUGFnZUl0ZW1zICh0b2NMaW5rcyAvKjogVG9jTGlua1tdICovKSB7XG4gICAgaWYgKCF0aGlzLmxldmVsQnlNZXRob2QpIHtcbiAgICAgIGNvbnN0IHVuaXF1ZVggPSB0aGlzLmNhbGN1bGF0ZVVuaXF1ZVgodG9jTGlua3MpXG4gICAgICBpZiAodW5pcXVlWC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMubGV2ZWxCeU1ldGhvZCA9IHRoaXMubGV2ZWxCeVhEaWZmXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB1bmlxdWVGb250cyA9IHRoaXMuY2FsY3VsYXRlVW5pcXVlRm9udHModG9jTGlua3MpXG4gICAgICAgIGlmICh1bmlxdWVGb250cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhpcy51bmlxdWVGb250cyA9IHVuaXF1ZUZvbnRzXG4gICAgICAgICAgdGhpcy5sZXZlbEJ5TWV0aG9kID0gdGhpcy5sZXZlbEJ5Rm9udFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubGV2ZWxCeU1ldGhvZCA9IHRoaXMubGV2ZWxUb1plcm9cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxldmVsQnlNZXRob2QodG9jTGlua3MpXG4gIH1cblxuICBsZXZlbEJ5WERpZmYgKHRvY0xpbmtzKSB7XG4gICAgY29uc3QgdW5pcXVlWCA9IHRoaXMuY2FsY3VsYXRlVW5pcXVlWCh0b2NMaW5rcylcbiAgICB0b2NMaW5rcy5mb3JFYWNoKGxpbmsgPT4ge1xuICAgICAgbGluay5sZXZlbCA9IHVuaXF1ZVguaW5kZXhPZihsaW5rLmxpbmVJdGVtLngpXG4gICAgfSlcbiAgfVxuXG4gIGxldmVsQnlGb250ICh0b2NMaW5rcykge1xuICAgIHRvY0xpbmtzLmZvckVhY2gobGluayA9PiB7XG4gICAgICBsaW5rLmxldmVsID0gdGhpcy51bmlxdWVGb250cy5pbmRleE9mKGxpbmsubGluZUl0ZW0uZm9udClcbiAgICB9KVxuICB9XG5cbiAgbGV2ZWxUb1plcm8gKHRvY0xpbmtzKSB7XG4gICAgdG9jTGlua3MuZm9yRWFjaChsaW5rID0+IHtcbiAgICAgIGxpbmsubGV2ZWwgPSAwXG4gICAgfSlcbiAgfVxuXG4gIGNhbGN1bGF0ZVVuaXF1ZVggKHRvY0xpbmtzKSB7XG4gICAgdmFyIHVuaXF1ZVggPSB0b2NMaW5rcy5yZWR1Y2UoZnVuY3Rpb24gKHVuaXF1ZXNBcnJheSwgbGluaykge1xuICAgICAgaWYgKHVuaXF1ZXNBcnJheS5pbmRleE9mKGxpbmsubGluZUl0ZW0ueCkgPCAwKSB1bmlxdWVzQXJyYXkucHVzaChsaW5rLmxpbmVJdGVtLngpXG4gICAgICByZXR1cm4gdW5pcXVlc0FycmF5XG4gICAgfSwgW10pXG5cbiAgICB1bmlxdWVYLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhIC0gYlxuICAgIH0pXG5cbiAgICByZXR1cm4gdW5pcXVlWFxuICB9XG5cbiAgY2FsY3VsYXRlVW5pcXVlRm9udHMgKHRvY0xpbmtzKSB7XG4gICAgdmFyIHVuaXF1ZUZvbnQgPSB0b2NMaW5rcy5yZWR1Y2UoZnVuY3Rpb24gKHVuaXF1ZXNBcnJheSwgbGluaykge1xuICAgICAgaWYgKHVuaXF1ZXNBcnJheS5pbmRleE9mKGxpbmsubGluZUl0ZW0uZm9udCkgPCAwKSB1bmlxdWVzQXJyYXkucHVzaChsaW5rLmxpbmVJdGVtLmZvbnQpXG4gICAgICByZXR1cm4gdW5pcXVlc0FycmF5XG4gICAgfSwgW10pXG5cbiAgICByZXR1cm4gdW5pcXVlRm9udFxuICB9XG59XG5cbmNsYXNzIFRvY0xpbmsge1xuICBjb25zdHJ1Y3RvciAob3B0aW9ucykge1xuICAgIHRoaXMubGluZUl0ZW0gPSBvcHRpb25zLmxpbmVJdGVtXG4gICAgdGhpcy5wYWdlTnVtYmVyID0gb3B0aW9ucy5wYWdlTnVtYmVyXG4gICAgdGhpcy5sZXZlbCA9IDBcbiAgfVxufVxuIiwiLy8gQGZsb3dcblxuY29uc3QgVG9MaW5lSXRlbVRyYW5zZm9ybWF0aW9uID0gcmVxdWlyZSgnLi4vVG9MaW5lSXRlbVRyYW5zZm9ybWF0aW9uJylcbmNvbnN0IFBhcnNlUmVzdWx0ID0gcmVxdWlyZSgnLi4vLi4vUGFyc2VSZXN1bHQnKVxuY29uc3QgTGluZUl0ZW0gPSByZXF1aXJlKCcuLi8uLi9MaW5lSXRlbScpXG5jb25zdCBXb3JkID0gcmVxdWlyZSgnLi4vLi4vV29yZCcpXG5jb25zdCB7IFJFTU9WRURfQU5OT1RBVElPTiwgQURERURfQU5OT1RBVElPTiwgREVURUNURURfQU5OT1RBVElPTiB9ID0gcmVxdWlyZSgnLi4vLi4vQW5ub3RhdGlvbicpXG5jb25zdCBCbG9ja1R5cGUgPSByZXF1aXJlKCcuLi8uLi9tYXJrZG93bi9CbG9ja1R5cGUnKVxuY29uc3QgeyBpc0xpc3RJdGVtQ2hhcmFjdGVyLCBpc051bWJlcmVkTGlzdEl0ZW0gfSA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWwvc3RyaW5nLWZ1bmN0aW9ucycpXG5cbi8vIERldGVjdCBpdGVtcyBzdGFydGluZyB3aXRoIC0sIOKAoiwgZXRjLi4uXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERldGVjdExpc3RJdGVtcyBleHRlbmRzIFRvTGluZUl0ZW1UcmFuc2Zvcm1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcignRGV0ZWN0IExpc3QgSXRlbXMnKVxuICB9XG5cbiAgdHJhbnNmb3JtIChwYXJzZVJlc3VsdCAvKjogUGFyc2VSZXN1bHQgKi8pIC8qOiBQYXJzZVJlc3VsdCAqLyB7XG4gICAgdmFyIGZvdW5kTGlzdEl0ZW1zID0gMFxuICAgIHZhciBmb3VuZE51bWJlcmVkSXRlbXMgPSAwXG4gICAgcGFyc2VSZXN1bHQucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zID0gW11cbiAgICAgIHBhZ2UuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgbmV3SXRlbXMucHVzaChpdGVtKVxuICAgICAgICBpZiAoIWl0ZW0udHlwZSkge1xuICAgICAgICAgIHZhciB0ZXh0ID0gaXRlbS50ZXh0KClcbiAgICAgICAgICBpZiAoaXNMaXN0SXRlbUNoYXJhY3RlcihpdGVtLndvcmRzWzBdLnN0cmluZykpIHtcbiAgICAgICAgICAgIGZvdW5kTGlzdEl0ZW1zKytcbiAgICAgICAgICAgIGlmIChpdGVtLndvcmRzWzBdLnN0cmluZyA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgIGl0ZW0uYW5ub3RhdGlvbiA9IERFVEVDVEVEX0FOTk9UQVRJT05cbiAgICAgICAgICAgICAgaXRlbS50eXBlID0gQmxvY2tUeXBlLkxJU1RcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGl0ZW0uYW5ub3RhdGlvbiA9IFJFTU9WRURfQU5OT1RBVElPTlxuICAgICAgICAgICAgICBjb25zdCBuZXdXb3JkcyA9IGl0ZW0ud29yZHMubWFwKHdvcmQgPT4gbmV3IFdvcmQoe1xuICAgICAgICAgICAgICAgIC4uLndvcmQsXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICBuZXdXb3Jkc1swXS5zdHJpbmcgPSAnLSdcbiAgICAgICAgICAgICAgbmV3SXRlbXMucHVzaChuZXcgTGluZUl0ZW0oe1xuICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgd29yZHM6IG5ld1dvcmRzLFxuICAgICAgICAgICAgICAgIGFubm90YXRpb246IEFEREVEX0FOTk9UQVRJT04sXG4gICAgICAgICAgICAgICAgdHlwZTogQmxvY2tUeXBlLkxJU1QsXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJlZExpc3RJdGVtKHRleHQpKSB7IC8vIFRPRE8gY2hlY2sgdGhhdCBzdGFydHMgd2l0aCAxIChrYWxhIGNoYWtyYSlcbiAgICAgICAgICAgIGZvdW5kTnVtYmVyZWRJdGVtcysrXG4gICAgICAgICAgICBpdGVtLmFubm90YXRpb24gPSBERVRFQ1RFRF9BTk5PVEFUSU9OXG4gICAgICAgICAgICBpdGVtLnR5cGUgPSBCbG9ja1R5cGUuTElTVFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHBhZ2UuaXRlbXMgPSBuZXdJdGVtc1xuICAgIH0pXG5cbiAgICByZXR1cm4gbmV3IFBhcnNlUmVzdWx0KHtcbiAgICAgIC4uLnBhcnNlUmVzdWx0LFxuICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgJ0RldGVjdGVkICcgKyBmb3VuZExpc3RJdGVtcyArICcgcGxhaW4gbGlzdCBpdGVtcy4nLFxuICAgICAgICAnRGV0ZWN0ZWQgJyArIGZvdW5kTnVtYmVyZWRJdGVtcyArICcgbnVtYmVyZWQgbGlzdCBpdGVtcy4nLFxuICAgICAgXSxcbiAgICB9KVxuICB9XG59XG4iLCIvLyBAZmxvd1xuXG5jb25zdCBUb0xpbmVJdGVtVHJhbnNmb3JtYXRpb24gPSByZXF1aXJlKCcuLi9Ub0xpbmVJdGVtVHJhbnNmb3JtYXRpb24nKVxuY29uc3QgUGFyc2VSZXN1bHQgPSByZXF1aXJlKCcuLi8uLi9QYXJzZVJlc3VsdCcpXG5jb25zdCB7IERFVEVDVEVEX0FOTk9UQVRJT04gfSA9IHJlcXVpcmUoJy4uLy4uL0Fubm90YXRpb24nKVxuY29uc3QgQmxvY2tUeXBlID0gcmVxdWlyZSgnLi4vLi4vbWFya2Rvd24vQmxvY2tUeXBlJylcbmNvbnN0IHsgaGVhZGxpbmVCeUxldmVsIH0gPSByZXF1aXJlKCcuLi8uLi9tYXJrZG93bi9CbG9ja1R5cGUnKVxuY29uc3QgeyBpc0xpc3RJdGVtIH0gPSByZXF1aXJlKCcuLi8uLi8uLi91dGlsL3N0cmluZy1mdW5jdGlvbnMnKVxuXG4vLyBEZXRlY3QgaGVhZGxpbmVzIGJhc2VkIG9uIGhlaWdodHNcbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGV0ZWN0SGVhZGVycyBleHRlbmRzIFRvTGluZUl0ZW1UcmFuc2Zvcm1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcignRGV0ZWN0IEhlYWRlcnMnKVxuICB9XG5cbiAgdHJhbnNmb3JtIChwYXJzZVJlc3VsdCAvKjogUGFyc2VSZXN1bHQgKi8pIC8qOiBQYXJzZVJlc3VsdCAqLyB7XG4gICAgY29uc3QgeyB0b2NQYWdlcywgaGVhZGxpbmVUeXBlVG9IZWlnaHRSYW5nZSwgbW9zdFVzZWRIZWlnaHQsIG1vc3RVc2VkRGlzdGFuY2UsIG1vc3RVc2VkRm9udCwgbWF4SGVpZ2h0IH0gPSBwYXJzZVJlc3VsdC5nbG9iYWxzXG4gICAgY29uc3QgaGFzVG9jID0gdG9jUGFnZXMubGVuZ3RoID4gMFxuICAgIHZhciBkZXRlY3RlZEhlYWRlcnMgPSAwXG5cbiAgICAvLyBIYW5kbGUgdGl0bGUgcGFnZXNcbiAgICBjb25zdCBwYWdlc1dpdGhNYXhIZWlnaHQgPSBmaW5kUGFnZXNXaXRoTWF4SGVpZ2h0KHBhcnNlUmVzdWx0LnBhZ2VzLCBtYXhIZWlnaHQpXG4gICAgY29uc3QgbWluMm5kTGV2ZWxIZWFkZXJIZWlndGhPbk1heFBhZ2UgPSBtb3N0VXNlZEhlaWdodCArICgobWF4SGVpZ2h0IC0gbW9zdFVzZWRIZWlnaHQpIC8gNClcbiAgICBwYWdlc1dpdGhNYXhIZWlnaHQuZm9yRWFjaCh0aXRsZVBhZ2UgPT4ge1xuICAgICAgdGl0bGVQYWdlLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGl0ZW0uaGVpZ2h0XG4gICAgICAgIGlmICghaXRlbS50eXBlICYmIGhlaWdodCA+IG1pbjJuZExldmVsSGVhZGVySGVpZ3RoT25NYXhQYWdlKSB7XG4gICAgICAgICAgaWYgKGhlaWdodCA9PT0gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICBpdGVtLnR5cGUgPSBCbG9ja1R5cGUuSDFcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS50eXBlID0gQmxvY2tUeXBlLkgyXG4gICAgICAgICAgfVxuICAgICAgICAgIGl0ZW0uYW5ub3RhdGlvbiA9IERFVEVDVEVEX0FOTk9UQVRJT05cbiAgICAgICAgICBkZXRlY3RlZEhlYWRlcnMrK1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoaGFzVG9jKSB7IC8vIFVzZSBleGlzdGluZyBoZWFkbGluZSBoZWlnaHRzIHRvIGZpbmQgYWRkaXRpb25hbCBoZWFkbGluZXNcbiAgICAgIGNvbnN0IGhlYWRsaW5lVHlwZXMgPSBPYmplY3Qua2V5cyhoZWFkbGluZVR5cGVUb0hlaWdodFJhbmdlKVxuICAgICAgaGVhZGxpbmVUeXBlcy5mb3JFYWNoKGhlYWRsaW5lVHlwZSA9PiB7XG4gICAgICAgIHZhciByYW5nZSA9IGhlYWRsaW5lVHlwZVRvSGVpZ2h0UmFuZ2VbaGVhZGxpbmVUeXBlXVxuICAgICAgICBpZiAocmFuZ2UubWF4ID4gbW9zdFVzZWRIZWlnaHQpIHsgLy8gdXNlIG9ubHkgdmVyeSBjbGVhciBoZWFkbGluZXMsIG9ubHkgdXNlIG1heFxuICAgICAgICAgIHBhcnNlUmVzdWx0LnBhZ2VzLmZvckVhY2gocGFnZSA9PiB7XG4gICAgICAgICAgICBwYWdlLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaXRlbS50eXBlICYmIGl0ZW0uaGVpZ2h0ID09PSByYW5nZS5tYXgpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmFubm90YXRpb24gPSBERVRFQ1RFRF9BTk5PVEFUSU9OXG4gICAgICAgICAgICAgICAgaXRlbS50eXBlID0gQmxvY2tUeXBlLmVudW1WYWx1ZU9mKGhlYWRsaW5lVHlwZSlcbiAgICAgICAgICAgICAgICBkZXRlY3RlZEhlYWRlcnMrK1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBlbHNlIHsgLy8gQ2F0ZWdvcml6ZSBoZWFkbGluZXMgYnkgdGhlIHRleHQgaGVpZ2h0c1xuICAgICAgY29uc3QgaGVpZ2h0cyA9IFtdXG4gICAgICB2YXIgbGFzdEhlaWdodFxuICAgICAgcGFyc2VSZXN1bHQucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcbiAgICAgICAgcGFnZS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmICghaXRlbS50eXBlICYmIGl0ZW0uaGVpZ2h0ID4gbW9zdFVzZWRIZWlnaHQgJiYgIWlzTGlzdEl0ZW0oaXRlbS50ZXh0KCkpKSB7XG4gICAgICAgICAgICBpZiAoIWhlaWdodHMuaW5jbHVkZXMoaXRlbS5oZWlnaHQpICYmICghbGFzdEhlaWdodCB8fCBsYXN0SGVpZ2h0ID4gaXRlbS5oZWlnaHQpKSB7XG4gICAgICAgICAgICAgIGhlaWdodHMucHVzaChpdGVtLmhlaWdodClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgaGVpZ2h0cy5zb3J0KChhLCBiKSA9PiBiIC0gYSlcblxuICAgICAgaGVpZ2h0cy5mb3JFYWNoKChoZWlnaHQsIGkpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGxpbmVMZXZlbCA9IGkgKyAyXG4gICAgICAgIGlmIChoZWFkbGluZUxldmVsIDw9IDYpIHtcbiAgICAgICAgICBjb25zdCBoZWFkbGluZVR5cGUgPSBoZWFkbGluZUJ5TGV2ZWwoMiArIGkpXG4gICAgICAgICAgcGFyc2VSZXN1bHQucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcbiAgICAgICAgICAgIHBhZ2UuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFpdGVtLnR5cGUgJiYgaXRlbS5oZWlnaHQgPT09IGhlaWdodCAmJiAhaXNMaXN0SXRlbShpdGVtLnRleHQoKSkpIHtcbiAgICAgICAgICAgICAgICBkZXRlY3RlZEhlYWRlcnMrK1xuICAgICAgICAgICAgICAgIGl0ZW0uYW5ub3RhdGlvbiA9IERFVEVDVEVEX0FOTk9UQVRJT05cbiAgICAgICAgICAgICAgICBpdGVtLnR5cGUgPSBoZWFkbGluZVR5cGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIGZpbmQgaGVhZGxpbmVzIHdoaWNoIGhhdmUgcGFyYWdyYXBoIGhlaWdodFxuICAgIHZhciBzbWFsbGVzSGVhZGxpbmVMZXZlbCA9IDFcbiAgICBwYXJzZVJlc3VsdC5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xuICAgICAgcGFnZS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS50eXBlICYmIGl0ZW0udHlwZS5oZWFkbGluZSkge1xuICAgICAgICAgIHNtYWxsZXNIZWFkbGluZUxldmVsID0gTWF0aC5tYXgoc21hbGxlc0hlYWRsaW5lTGV2ZWwsIGl0ZW0udHlwZS5oZWFkbGluZUxldmVsKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gICAgaWYgKHNtYWxsZXNIZWFkbGluZUxldmVsIDwgNikge1xuICAgICAgY29uc3QgbmV4dEhlYWRsaW5lVHlwZSA9IGhlYWRsaW5lQnlMZXZlbChzbWFsbGVzSGVhZGxpbmVMZXZlbCArIDEpXG4gICAgICBwYXJzZVJlc3VsdC5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xuICAgICAgICB2YXIgbGFzdEl0ZW1cbiAgICAgICAgcGFnZS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmICghaXRlbS50eXBlICYmXG4gICAgICAgICAgICAgIGl0ZW0uaGVpZ2h0ID09PSBtb3N0VXNlZEhlaWdodCAmJlxuICAgICAgICAgICAgICBpdGVtLmZvbnQgIT09IG1vc3RVc2VkRm9udCAmJlxuICAgICAgICAgICAgICAoIWxhc3RJdGVtIHx8IGxhc3RJdGVtLnkgPCBpdGVtLnkgfHwgKGxhc3RJdGVtLnR5cGUgJiYgbGFzdEl0ZW0udHlwZS5oZWFkbGluZSkgfHwgKGxhc3RJdGVtLnkgLSBpdGVtLnkgPiBtb3N0VXNlZERpc3RhbmNlICogMikpICYmXG4gICAgICAgICAgICAgIGl0ZW0udGV4dCgpID09PSBpdGVtLnRleHQoKS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkZXRlY3RlZEhlYWRlcnMrK1xuICAgICAgICAgICAgaXRlbS5hbm5vdGF0aW9uID0gREVURUNURURfQU5OT1RBVElPTlxuICAgICAgICAgICAgaXRlbS50eXBlID0gbmV4dEhlYWRsaW5lVHlwZVxuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0SXRlbSA9IGl0ZW1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQYXJzZVJlc3VsdCh7XG4gICAgICAuLi5wYXJzZVJlc3VsdCxcbiAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICdEZXRlY3RlZCAnICsgZGV0ZWN0ZWRIZWFkZXJzICsgJyBoZWFkbGluZXMuJyxcbiAgICAgIF0sXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kUGFnZXNXaXRoTWF4SGVpZ2h0IChwYWdlcywgbWF4SGVpZ2h0KSB7XG4gIGNvbnN0IG1heEhlYWRlclBhZ2VzU2V0ID0gbmV3IFNldCgpXG4gIHBhZ2VzLmZvckVhY2gocGFnZSA9PiB7XG4gICAgcGFnZS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKCFpdGVtLnR5cGUgJiYgaXRlbS5oZWlnaHQgPT09IG1heEhlaWdodCkge1xuICAgICAgICBtYXhIZWFkZXJQYWdlc1NldC5hZGQocGFnZSlcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuICByZXR1cm4gbWF4SGVhZGVyUGFnZXNTZXRcbn1cbiIsImNvbnN0IFBhZ2VJdGVtID0gcmVxdWlyZSgnLi9QYWdlSXRlbScpXG5jb25zdCBMaW5lSXRlbSA9IHJlcXVpcmUoJy4vTGluZUl0ZW0nKVxuXG4vLyBBIGJsb2NrIG9mIExpbmVJdGVtW10gd2l0aGluIGEgUGFnZVxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBMaW5lSXRlbUJsb2NrIGV4dGVuZHMgUGFnZUl0ZW0ge1xuICBjb25zdHJ1Y3RvciAob3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpXG4gICAgdGhpcy5pdGVtcyA9IFtdXG4gICAgaWYgKG9wdGlvbnMuaXRlbXMpIHtcbiAgICAgIG9wdGlvbnMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuYWRkSXRlbShpdGVtKSlcbiAgICB9XG4gIH1cblxuICBhZGRJdGVtIChpdGVtIC8qOiBMaW5lSXRlbSAqLykge1xuICAgIGlmICh0aGlzLnR5cGUgJiYgaXRlbS50eXBlICYmIHRoaXMudHlwZSAhPT0gaXRlbS50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFkZGluZyBpdGVtIG9mIHR5cGUgJHtpdGVtLnR5cGV9IHRvIGJsb2NrIG9mIHR5cGUgJHt0aGlzLnR5cGV9YClcbiAgICB9XG4gICAgaWYgKCF0aGlzLnR5cGUpIHtcbiAgICAgIHRoaXMudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAoaXRlbS5wYXJzZWRFbGVtZW50cykge1xuICAgICAgaWYgKHRoaXMucGFyc2VkRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5wYXJzZWRFbGVtZW50cy5hZGQoaXRlbS5wYXJzZWRFbGVtZW50cylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VkRWxlbWVudHMgPSBpdGVtLnBhcnNlZEVsZW1lbnRzXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvcGllZEl0ZW0gPSBuZXcgTGluZUl0ZW0oeyAuLi5pdGVtIH0pXG4gICAgY29waWVkSXRlbS50eXBlID0gbnVsbFxuICAgIHRoaXMuaXRlbXMucHVzaChjb3BpZWRJdGVtKVxuICB9XG59XG4iLCIvLyBAZmxvd1xuXG4vKjo6XG5pbXBvcnQgUGFyc2VSZXN1bHQgZnJvbSAnLi4vLi4vUGFyc2VSZXN1bHQnXG4qL1xuXG5jb25zdCBUcmFuc2Zvcm1hdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNmb3JtYXRpb24nKVxuY29uc3QgTGluZUl0ZW1CbG9jayA9IHJlcXVpcmUoJy4uL0xpbmVJdGVtQmxvY2snKVxuY29uc3QgeyBSRU1PVkVEX0FOTk9UQVRJT04gfSA9IHJlcXVpcmUoJy4uL0Fubm90YXRpb24nKVxuXG4vLyBBYnN0cmFjdCBjbGFzcyBmb3IgdHJhbnNmb3JtYXRpb25zIHByb2R1Y2luZyBMaW5lSXRlbUJsb2NrKHMpIHRvIGJlIHNob3duIGluIHRoZSBMaW5lSXRlbUJsb2NrUGFnZVZpZXdcbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgVG9MaW5lSXRlbUJsb2NrVHJhbnNmb3JtYXRpb24gZXh0ZW5kcyBUcmFuc2Zvcm1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yIChuYW1lKSB7XG4gICAgc3VwZXIobmFtZSwgTGluZUl0ZW1CbG9jay5uYW1lKVxuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBUb0xpbmVJdGVtQmxvY2tUcmFuc2Zvcm1hdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2FuIG5vdCBjb25zdHJ1Y3QgYWJzdHJhY3QgY2xhc3MuJylcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZVRyYW5zZm9ybSAocGFyc2VSZXN1bHQgLyo6IFBhcnNlUmVzdWx0ICovKSAvKjogUGFyc2VSZXN1bHQgKi97XG4gICAgLy8gVGhlIHVzdWFsIGNsZWFudXBcbiAgICBwYXJzZVJlc3VsdC5tZXNzYWdlcyA9IFtdXG4gICAgcGFyc2VSZXN1bHQucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcbiAgICAgIHBhZ2UuaXRlbXMgPSBwYWdlLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmFubm90YXRpb24gfHwgaXRlbS5hbm5vdGF0aW9uICE9PSBSRU1PVkVEX0FOTk9UQVRJT04pXG4gICAgICBwYWdlLml0ZW1zLmZvckVhY2goaXRlbSA9PiAoaXRlbS5hbm5vdGF0aW9uID0gbnVsbCkpXG4gICAgfSlcbiAgICByZXR1cm4gcGFyc2VSZXN1bHRcbiAgfVxufVxuIiwiLy8gQGZsb3dcblxuY29uc3QgVG9MaW5lSXRlbUJsb2NrVHJhbnNmb3JtYXRpb24gPSByZXF1aXJlKCcuLi9Ub0xpbmVJdGVtQmxvY2tUcmFuc2Zvcm1hdGlvbicpXG5jb25zdCBQYXJzZVJlc3VsdCA9IHJlcXVpcmUoJy4uLy4uL1BhcnNlUmVzdWx0JylcbmNvbnN0IExpbmVJdGVtQmxvY2sgPSByZXF1aXJlKCcuLi8uLi9MaW5lSXRlbUJsb2NrJylcbmNvbnN0IHsgREVURUNURURfQU5OT1RBVElPTiB9ID0gcmVxdWlyZSgnLi4vLi4vQW5ub3RhdGlvbicpXG5jb25zdCB7IG1pblhGcm9tUGFnZUl0ZW1zIH0gPSByZXF1aXJlKCcuLi8uLi8uLi91dGlsL3BhZ2UtaXRlbS1mdW5jdGlvbnMnKVxuXG4vLyBHYXRoZXJzIGxpbmVzIHRvIGJsb2Nrc1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBHYXRoZXJCbG9ja3MgZXh0ZW5kcyBUb0xpbmVJdGVtQmxvY2tUcmFuc2Zvcm1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcignR2F0aGVyIEJsb2NrcycpXG4gIH1cblxuICB0cmFuc2Zvcm0gKHBhcnNlUmVzdWx0IC8qOiBQYXJzZVJlc3VsdCAqLykgLyo6IFBhcnNlUmVzdWx0ICovIHtcbiAgICBjb25zdCB7IG1vc3RVc2VkRGlzdGFuY2UgfSA9IHBhcnNlUmVzdWx0Lmdsb2JhbHNcbiAgICB2YXIgY3JlYXRlZEJsb2NrcyA9IDBcbiAgICB2YXIgbGluZUl0ZW1Db3VudCA9IDBcbiAgICBwYXJzZVJlc3VsdC5wYWdlcy5tYXAocGFnZSA9PiB7XG4gICAgICBsaW5lSXRlbUNvdW50ICs9IHBhZ2UuaXRlbXMubGVuZ3RoXG4gICAgICBjb25zdCBibG9ja3MgPSBbXVxuICAgICAgdmFyIHN0YXNoZWRCbG9jayA9IG5ldyBMaW5lSXRlbUJsb2NrKHt9KVxuICAgICAgY29uc3QgZmx1c2hTdGFzaGVkSXRlbXMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzdGFzaGVkQmxvY2suaXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHN0YXNoZWRCbG9jay5hbm5vdGF0aW9uID0gREVURUNURURfQU5OT1RBVElPTlxuICAgICAgICB9XG5cbiAgICAgICAgYmxvY2tzLnB1c2goc3Rhc2hlZEJsb2NrKVxuICAgICAgICBzdGFzaGVkQmxvY2sgPSBuZXcgTGluZUl0ZW1CbG9jayh7fSlcbiAgICAgICAgY3JlYXRlZEJsb2NrcysrXG4gICAgICB9XG5cbiAgICAgIHZhciBtaW5YID0gbWluWEZyb21QYWdlSXRlbXMocGFnZS5pdGVtcylcbiAgICAgIHBhZ2UuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKHN0YXNoZWRCbG9jay5pdGVtcy5sZW5ndGggPiAwICYmIHNob3VsZEZsdXNoQmxvY2soc3Rhc2hlZEJsb2NrLCBpdGVtLCBtaW5YLCBtb3N0VXNlZERpc3RhbmNlKSkge1xuICAgICAgICAgIGZsdXNoU3Rhc2hlZEl0ZW1zKClcbiAgICAgICAgfVxuICAgICAgICBzdGFzaGVkQmxvY2suYWRkSXRlbShpdGVtKVxuICAgICAgfSlcbiAgICAgIGlmIChzdGFzaGVkQmxvY2suaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmbHVzaFN0YXNoZWRJdGVtcygpXG4gICAgICB9XG4gICAgICBwYWdlLml0ZW1zID0gYmxvY2tzXG4gICAgfSlcblxuICAgIHJldHVybiBuZXcgUGFyc2VSZXN1bHQoe1xuICAgICAgLi4ucGFyc2VSZXN1bHQsXG4gICAgICBtZXNzYWdlczogWydHYXRoZXJlZCAnICsgY3JlYXRlZEJsb2NrcyArICcgYmxvY2tzIG91dCBvZiAnICsgbGluZUl0ZW1Db3VudCArICcgbGluZSBpdGVtcyddLFxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkRmx1c2hCbG9jayAoc3Rhc2hlZEJsb2NrLCBpdGVtLCBtaW5YLCBtb3N0VXNlZERpc3RhbmNlKSB7XG4gIGlmIChzdGFzaGVkQmxvY2sudHlwZSAmJiBzdGFzaGVkQmxvY2sudHlwZS5tZXJnZUZvbGxvd2luZ05vblR5cGVkSXRlbXMgJiYgIWl0ZW0udHlwZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IGxhc3RJdGVtID0gc3Rhc2hlZEJsb2NrLml0ZW1zW3N0YXNoZWRCbG9jay5pdGVtcy5sZW5ndGggLSAxXVxuICBjb25zdCBoYXNCaWdEaXN0YW5jZSA9IGJpZ0Rpc3RhbmNlKGxhc3RJdGVtLCBpdGVtLCBtaW5YLCBtb3N0VXNlZERpc3RhbmNlKVxuICBpZiAoc3Rhc2hlZEJsb2NrLnR5cGUgJiYgc3Rhc2hlZEJsb2NrLnR5cGUubWVyZ2VGb2xsb3dpbmdOb25UeXBlZEl0ZW1zV2l0aFNtYWxsRGlzdGFuY2UgJiYgIWl0ZW0udHlwZSAmJiAhaGFzQmlnRGlzdGFuY2UpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAoaXRlbS50eXBlICE9PSBzdGFzaGVkQmxvY2sudHlwZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGl0ZW0udHlwZSkge1xuICAgIHJldHVybiAhaXRlbS50eXBlLm1lcmdlVG9CbG9ja1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBoYXNCaWdEaXN0YW5jZVxuICB9XG59XG5cbmZ1bmN0aW9uIGJpZ0Rpc3RhbmNlIChsYXN0SXRlbSwgaXRlbSwgbWluWCwgbW9zdFVzZWREaXN0YW5jZSkge1xuICBjb25zdCBkaXN0YW5jZSA9IGxhc3RJdGVtLnkgLSBpdGVtLnlcbiAgaWYgKGRpc3RhbmNlIDwgMCAtIG1vc3RVc2VkRGlzdGFuY2UgLyAyKSB7XG4gICAgLy8gZGlzdGFuY2UgaXMgbmVnYXRpdmUgLSBhbmQgbm90IG9ubHkgYSBiaXRcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHZhciBhbGxvd2VkRGlzY3RhbmNlID0gbW9zdFVzZWREaXN0YW5jZSArIDFcbiAgaWYgKGxhc3RJdGVtLnggPiBtaW5YICYmIGl0ZW0ueCA+IG1pblgpIHtcbiAgICAvLyBpbnRlbmRlZCBlbGVtZW50cyBsaWtlIGxpc3RzIG9mdGVuIGhhdmUgZ3JlYXRlciBzcGFjaW5nXG4gICAgYWxsb3dlZERpc2N0YW5jZSA9IG1vc3RVc2VkRGlzdGFuY2UgKyBtb3N0VXNlZERpc3RhbmNlIC8gMlxuICB9XG4gIGlmIChkaXN0YW5jZSA+IGFsbG93ZWREaXNjdGFuY2UpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuIiwiLy8gQGZsb3dcblxuY29uc3QgVG9MaW5lSXRlbUJsb2NrVHJhbnNmb3JtYXRpb24gPSByZXF1aXJlKCcuLi9Ub0xpbmVJdGVtQmxvY2tUcmFuc2Zvcm1hdGlvbicpXG5jb25zdCBQYXJzZVJlc3VsdCA9IHJlcXVpcmUoJy4uLy4uL1BhcnNlUmVzdWx0JylcbmNvbnN0IHsgREVURUNURURfQU5OT1RBVElPTiB9ID0gcmVxdWlyZSgnLi4vLi4vQW5ub3RhdGlvbicpXG5jb25zdCBCbG9ja1R5cGUgPSByZXF1aXJlKCcuLi8uLi9tYXJrZG93bi9CbG9ja1R5cGUnKVxuY29uc3QgeyBtaW5YRnJvbUJsb2NrcyB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbC9wYWdlLWl0ZW0tZnVuY3Rpb25zJylcblxuLy8gRGV0ZWN0IGl0ZW1zIHdoaWNoIGFyZSBjb2RlL3F1b3RlIGJsb2Nrc1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBEZXRlY3RDb2RlUXVvdGVCbG9ja3MgZXh0ZW5kcyBUb0xpbmVJdGVtQmxvY2tUcmFuc2Zvcm1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcignJDEnKVxuICB9XG5cbiAgdHJhbnNmb3JtIChwYXJzZVJlc3VsdCAvKjogUGFyc2VSZXN1bHQgKi8pIC8qOiBQYXJzZVJlc3VsdCAqLyB7XG4gICAgY29uc3QgeyBtb3N0VXNlZEhlaWdodCB9ID0gcGFyc2VSZXN1bHQuZ2xvYmFsc1xuICAgIHZhciBmb3VuZENvZGVJdGVtcyA9IDBcbiAgICBwYXJzZVJlc3VsdC5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xuICAgICAgdmFyIG1pblggPSBtaW5YRnJvbUJsb2NrcyhwYWdlLml0ZW1zKVxuICAgICAgcGFnZS5pdGVtcy5mb3JFYWNoKGJsb2NrID0+IHtcbiAgICAgICAgaWYgKCFibG9jay50eXBlICYmIGxvb2tzTGlrZUNvZGVCbG9jayhtaW5YLCBibG9jay5pdGVtcywgbW9zdFVzZWRIZWlnaHQpKSB7XG4gICAgICAgICAgYmxvY2suYW5ub3RhdGlvbiA9IERFVEVDVEVEX0FOTk9UQVRJT05cbiAgICAgICAgICBibG9jay50eXBlID0gQmxvY2tUeXBlLkNPREVcbiAgICAgICAgICBmb3VuZENvZGVJdGVtcysrXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiBuZXcgUGFyc2VSZXN1bHQoe1xuICAgICAgLi4ucGFyc2VSZXN1bHQsXG4gICAgICBtZXNzYWdlczogW1xuICAgICAgICAnRGV0ZWN0ZWQgJyArIGZvdW5kQ29kZUl0ZW1zICsgJyBjb2RlL3F1b3RlIGl0ZW1zLicsXG4gICAgICBdLFxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gbG9va3NMaWtlQ29kZUJsb2NrIChtaW5YLCBpdGVtcywgbW9zdFVzZWRIZWlnaHQpIHtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gaXRlbXNbMF0ueCA+IG1pblggJiYgaXRlbXNbMF0uaGVpZ2h0IDw9IG1vc3RVc2VkSGVpZ2h0ICsgMVxuICB9XG4gIGZvciAodmFyIGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBpZiAoaXRlbS54ID09PSBtaW5YKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cbiIsIi8vIEBmbG93XG5cbmNvbnN0IFRvTGluZUl0ZW1CbG9ja1RyYW5zZm9ybWF0aW9uID0gcmVxdWlyZSgnLi4vVG9MaW5lSXRlbUJsb2NrVHJhbnNmb3JtYXRpb24nKVxuY29uc3QgUGFyc2VSZXN1bHQgPSByZXF1aXJlKCcuLi8uLi9QYXJzZVJlc3VsdCcpXG5jb25zdCBXb3JkID0gcmVxdWlyZSgnLi4vLi4vV29yZCcpXG5jb25zdCB7IE1PRElGSUVEX0FOTk9UQVRJT04sIFVOQ0hBTkdFRF9BTk5PVEFUSU9OIH0gPSByZXF1aXJlKCcuLi8uLi9Bbm5vdGF0aW9uJylcbmNvbnN0IEJsb2NrVHlwZSA9IHJlcXVpcmUoJy4uLy4uL21hcmtkb3duL0Jsb2NrVHlwZScpXG5cbi8vIENhcmVzIGZvciBwcm9wZXIgc3ViLWl0ZW0gc3BhY2luZy9sZXZlbGluZ1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBEZXRlY3RMaXN0TGV2ZWxzIGV4dGVuZHMgVG9MaW5lSXRlbUJsb2NrVHJhbnNmb3JtYXRpb24ge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ0xldmVsIExpc3RzJylcbiAgfVxuXG4gIHRyYW5zZm9ybSAocGFyc2VSZXN1bHQgLyo6IFBhcnNlUmVzdWx0ICovKSAvKjogUGFyc2VSZXN1bHQgKi8ge1xuICAgIHZhciBsaXN0QmxvY2tzID0gMFxuICAgIHZhciBtb2RpZmllZEJsb2NrcyA9IDBcbiAgICBwYXJzZVJlc3VsdC5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xuICAgICAgcGFnZS5pdGVtcy5maWx0ZXIoYmxvY2sgPT4gYmxvY2sudHlwZSA9PT0gQmxvY2tUeXBlLkxJU1QpLmZvckVhY2gobGlzdEJsb2NrID0+IHtcbiAgICAgICAgdmFyIGxhc3RJdGVtWFxuICAgICAgICB2YXIgY3VycmVudExldmVsID0gMFxuICAgICAgICBjb25zdCB4QnlMZXZlbCA9IHt9XG4gICAgICAgIHZhciBtb2RpZmllZEJsb2NrID0gZmFsc2VcbiAgICAgICAgbGlzdEJsb2NrLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNMaXN0SXRlbSA9IHRydWVcbiAgICAgICAgICBpZiAobGFzdEl0ZW1YICYmIGlzTGlzdEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnggPiBsYXN0SXRlbVgpIHtcbiAgICAgICAgICAgICAgY3VycmVudExldmVsKytcbiAgICAgICAgICAgICAgeEJ5TGV2ZWxbaXRlbS54XSA9IGN1cnJlbnRMZXZlbFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnggPCBsYXN0SXRlbVgpIHtcbiAgICAgICAgICAgICAgY3VycmVudExldmVsID0geEJ5TGV2ZWxbaXRlbS54XVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4QnlMZXZlbFtpdGVtLnhdID0gMFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudExldmVsID4gMCkge1xuICAgICAgICAgICAgaXRlbS53b3JkcyA9IFtcbiAgICAgICAgICAgICAgbmV3IFdvcmQoeyBzdHJpbmc6ICcgJy5yZXBlYXQoY3VycmVudExldmVsICogMykgfSksXG4gICAgICAgICAgICBdLmNvbmNhdChpdGVtLndvcmRzKVxuICAgICAgICAgICAgbW9kaWZpZWRCbG9jayA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgbGFzdEl0ZW1YID0gaXRlbS54XG4gICAgICAgIH0pXG4gICAgICAgIGxpc3RCbG9ja3MrK1xuICAgICAgICBpZiAobW9kaWZpZWRCbG9jaykge1xuICAgICAgICAgIG1vZGlmaWVkQmxvY2tzKytcbiAgICAgICAgICBsaXN0QmxvY2suYW5ub3RhdGlvbiA9IE1PRElGSUVEX0FOTk9UQVRJT05cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaXN0QmxvY2suYW5ub3RhdGlvbiA9IFVOQ0hBTkdFRF9BTk5PVEFUSU9OXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiBuZXcgUGFyc2VSZXN1bHQoe1xuICAgICAgLi4ucGFyc2VSZXN1bHQsXG4gICAgICBtZXNzYWdlczogWydNb2RpZmllZCAnICsgbW9kaWZpZWRCbG9ja3MgKyAnIC8gJyArIGxpc3RCbG9ja3MgKyAnIGxpc3QgYmxvY2tzLiddLFxuICAgIH0pXG4gIH1cbn1cbiIsImNvbnN0IFRyYW5zZm9ybWF0aW9uID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1hdGlvbicpXG5jb25zdCBQYXJzZVJlc3VsdCA9IHJlcXVpcmUoJy4uL1BhcnNlUmVzdWx0JylcbmNvbnN0IHsgYmxvY2tUb1RleHQgfSA9IHJlcXVpcmUoJy4uL21hcmtkb3duL0Jsb2NrVHlwZScpXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgVG9UZXh0QmxvY2tzIGV4dGVuZHMgVHJhbnNmb3JtYXRpb24ge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ1RvIFRleHQgQmxvY2tzJywgJ1RleHRCbG9jaycpXG4gIH1cblxuICB0cmFuc2Zvcm0gKHBhcnNlUmVzdWx0IC8qOiBQYXJzZVJlc3VsdCAqLykgLyo6IFBhcnNlUmVzdWx0ICovIHtcbiAgICBwYXJzZVJlc3VsdC5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xuICAgICAgY29uc3QgdGV4dEl0ZW1zID0gW11cbiAgICAgIHBhZ2UuaXRlbXMuZm9yRWFjaChibG9jayA9PiB7XG4gICAgICAgIC8vIFRPRE8gY2F0ZWdvcnkgdG8gdHlwZSAoYmVmb3JlIGhhdmUgbm8gdW5rbm93bnMsIGhhdmUgcGFyYWdyYXBoKVxuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGJsb2NrLnR5cGUgPyBibG9jay50eXBlLm5hbWUgOiAnVW5rbm93bidcbiAgICAgICAgdGV4dEl0ZW1zLnB1c2goe1xuICAgICAgICAgIGNhdGVnb3J5OiBjYXRlZ29yeSxcbiAgICAgICAgICB0ZXh0OiBibG9ja1RvVGV4dChibG9jayksXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgcGFnZS5pdGVtcyA9IHRleHRJdGVtc1xuICAgIH0pXG4gICAgcmV0dXJuIG5ldyBQYXJzZVJlc3VsdCh7XG4gICAgICAuLi5wYXJzZVJlc3VsdCxcbiAgICB9KVxuICB9XG59XG4iLCIvLyBAZmxvd1xuXG5jb25zdCBUcmFuc2Zvcm1hdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNmb3JtYXRpb24nKVxuY29uc3QgUGFyc2VSZXN1bHQgPSByZXF1aXJlKCcuLi9QYXJzZVJlc3VsdCcpXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgVG9NYXJrZG93biBleHRlbmRzIFRyYW5zZm9ybWF0aW9uIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKCdUbyBNYXJrZG93bicsICdTdHJpbmcnKVxuICB9XG5cbiAgdHJhbnNmb3JtIChwYXJzZVJlc3VsdCAvKjogUGFyc2VSZXN1bHQgKi8pIC8qOiBQYXJzZVJlc3VsdCAqLyB7XG4gICAgcGFyc2VSZXN1bHQucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcbiAgICAgIHZhciB0ZXh0ID0gJydcbiAgICAgIHBhZ2UuaXRlbXMuZm9yRWFjaChibG9jayA9PiB7XG4gICAgICAgIC8vIENvbmNhdGVuYXRlIGFsbCB3b3JkcyBpbiB0aGUgc2FtZSBibG9jaywgdW5sZXNzIGl0J3MgYSBUYWJsZSBvZiBDb250ZW50cyBibG9ja1xuICAgICAgICBsZXQgY29uY2F0VGV4dFxuICAgICAgICBpZiAoYmxvY2suY2F0ZWdvcnkgPT09ICdUT0MnKSB7XG4gICAgICAgICAgY29uY2F0VGV4dCA9IGJsb2NrLnRleHRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25jYXRUZXh0ID0gYmxvY2sudGV4dC5yZXBsYWNlKC8oXFxyXFxufFxcbnxcXHIpL2dtLCAnICcpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25jYXRlbmF0ZSB3b3JkcyB0aGF0IHdlcmUgcHJldmlvdXNseSBicm9rZW4gdXAgYnkgbmV3bGluZVxuICAgICAgICBpZiAoYmxvY2suY2F0ZWdvcnkgIT09ICdMSVNUJykge1xuICAgICAgICAgIGNvbmNhdFRleHQgPSBjb25jYXRUZXh0LnNwbGl0KCctICcpLmpvaW4oJycpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBBc3N1bWUgdGhlcmUgYXJlIG5vIGNvZGUgYmxvY2tzIGluIG91ciBkb2N1bWVudHNcbiAgICAgICAgaWYgKGJsb2NrLmNhdGVnb3J5ID09PSAnQ09ERScpIHtcbiAgICAgICAgICBjb25jYXRUZXh0ID0gY29uY2F0VGV4dC5zcGxpdCgnYCcpLmpvaW4oJycpXG4gICAgICAgIH1cblxuICAgICAgICB0ZXh0ICs9IGNvbmNhdFRleHQgKyAnXFxuXFxuJ1xuICAgICAgfSlcblxuICAgICAgcGFnZS5pdGVtcyA9IFt0ZXh0XVxuICAgIH0pXG4gICAgcmV0dXJuIG5ldyBQYXJzZVJlc3VsdCh7XG4gICAgICAuLi5wYXJzZVJlc3VsdCxcbiAgICB9KVxuICB9XG59XG4iLCJjb25zdCBDYWxjdWxhdGVHbG9iYWxTdGF0cyA9IHJlcXVpcmUoJy4uL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvdGV4dC1pdGVtL0NhbGN1bGF0ZUdsb2JhbFN0YXRzJylcblxuY29uc3QgQ29tcGFjdExpbmVzID0gcmVxdWlyZSgnLi4vbW9kZWxzL3RyYW5zZm9ybWF0aW9ucy9saW5lLWl0ZW0vQ29tcGFjdExpbmVzJylcbmNvbnN0IFJlbW92ZVJlcGV0aXRpdmVFbGVtZW50cyA9IHJlcXVpcmUoJy4uL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvbGluZS1pdGVtL1JlbW92ZVJlcGV0aXRpdmVFbGVtZW50cycpXG5jb25zdCBWZXJ0aWNhbFRvSG9yaXpvbnRhbCA9IHJlcXVpcmUoJy4uL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvbGluZS1pdGVtL1ZlcnRpY2FsVG9Ib3Jpem9udGFsJylcbmNvbnN0IERldGVjdFRPQyA9IHJlcXVpcmUoJy4uL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvbGluZS1pdGVtL0RldGVjdFRPQycpXG5jb25zdCBEZXRlY3RMaXN0SXRlbXMgPSByZXF1aXJlKCcuLi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL2xpbmUtaXRlbS9EZXRlY3RMaXN0SXRlbXMnKVxuY29uc3QgRGV0ZWN0SGVhZGVycyA9IHJlcXVpcmUoJy4uL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvbGluZS1pdGVtL0RldGVjdEhlYWRlcnMnKVxuXG5jb25zdCBHYXRoZXJCbG9ja3MgPSByZXF1aXJlKCcuLi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL2xpbmUtaXRlbS1ibG9jay9HYXRoZXJCbG9ja3MnKVxuY29uc3QgRGV0ZWN0Q29kZVF1b3RlQmxvY2tzID0gcmVxdWlyZSgnLi4vbW9kZWxzL3RyYW5zZm9ybWF0aW9ucy9saW5lLWl0ZW0tYmxvY2svRGV0ZWN0Q29kZVF1b3RlQmxvY2tzJylcbmNvbnN0IERldGVjdExpc3RMZXZlbHMgPSByZXF1aXJlKCcuLi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL2xpbmUtaXRlbS1ibG9jay9EZXRlY3RMaXN0TGV2ZWxzJylcbmNvbnN0IFRvVGV4dEJsb2NrcyA9IHJlcXVpcmUoJy4uL21vZGVscy90cmFuc2Zvcm1hdGlvbnMvVG9UZXh0QmxvY2tzJylcbmNvbnN0IFRvTWFya2Rvd24gPSByZXF1aXJlKCcuLi9tb2RlbHMvdHJhbnNmb3JtYXRpb25zL1RvTWFya2Rvd24nKVxuXG5jb25zdCBQYXJzZVJlc3VsdCA9IHJlcXVpcmUoJy4uL21vZGVscy9QYXJzZVJlc3VsdCcpXG5cbmV4cG9ydHMubWFrZVRyYW5zZm9ybWF0aW9ucyA9IGZvbnRNYXAgPT4gW1xuICBuZXcgQ2FsY3VsYXRlR2xvYmFsU3RhdHMoZm9udE1hcCksXG4gIG5ldyBDb21wYWN0TGluZXMoKSxcbiAgbmV3IFJlbW92ZVJlcGV0aXRpdmVFbGVtZW50cygpLFxuICBuZXcgVmVydGljYWxUb0hvcml6b250YWwoKSxcbiAgbmV3IERldGVjdFRPQygpLFxuICBuZXcgRGV0ZWN0SGVhZGVycygpLFxuICBuZXcgRGV0ZWN0TGlzdEl0ZW1zKCksXG5cbiAgbmV3IEdhdGhlckJsb2NrcygpLFxuICBuZXcgRGV0ZWN0Q29kZVF1b3RlQmxvY2tzKCksXG4gIG5ldyBEZXRlY3RMaXN0TGV2ZWxzKCksXG5cbiAgbmV3IFRvVGV4dEJsb2NrcygpLFxuICBuZXcgVG9NYXJrZG93bigpLFxuXVxuXG5leHBvcnRzLnRyYW5zZm9ybSA9IChwYWdlcywgdHJhbnNmb3JtYXRpb25zKSA9PiB7XG4gIHZhciBwYXJzZVJlc3VsdCA9IG5ldyBQYXJzZVJlc3VsdCh7IHBhZ2VzIH0pXG4gIGxldCBsYXN0VHJhbnNmb3JtYXRpb25cbiAgdHJhbnNmb3JtYXRpb25zLmZvckVhY2godHJhbnNmb3JtYXRpb24gPT4ge1xuICAgIGlmIChsYXN0VHJhbnNmb3JtYXRpb24pIHtcbiAgICAgIHBhcnNlUmVzdWx0ID0gbGFzdFRyYW5zZm9ybWF0aW9uLmNvbXBsZXRlVHJhbnNmb3JtKHBhcnNlUmVzdWx0KVxuICAgIH1cbiAgICBwYXJzZVJlc3VsdCA9IHRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShwYXJzZVJlc3VsdClcbiAgICBsYXN0VHJhbnNmb3JtYXRpb24gPSB0cmFuc2Zvcm1hdGlvblxuICB9KVxuICByZXR1cm4gcGFyc2VSZXN1bHRcbn1cbiIsIi8qKlxuICogQGxpY3N0YXJ0IFRoZSBmb2xsb3dpbmcgaXMgdGhlIGVudGlyZSBsaWNlbnNlIG5vdGljZSBmb3IgdGhlXG4gKiBKYXZhc2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlXG4gKlxuICogQ29weXJpZ2h0IDIwMjAgTW96aWxsYSBGb3VuZGF0aW9uXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqIEBsaWNlbmQgVGhlIGFib3ZlIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZVxuICogSmF2YXNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZVxuICovXG5cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwicGRmanMtZGlzdC9idWlsZC9wZGYud29ya2VyXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlclwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXJcIl0gPSByb290LnBkZmpzV29ya2VyID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dfcGRmanNfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193X3BkZmpzX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd19wZGZqc19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dfcGRmanNfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dfcGRmanNfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dfcGRmanNfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193X3BkZmpzX3JlcXVpcmVfXyhfX3dfcGRmanNfcmVxdWlyZV9fLnMgPSAwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIldvcmtlck1lc3NhZ2VIYW5kbGVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF93b3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXI7XG4gIH1cbn0pO1xuXG52YXIgX3dvcmtlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbmNvbnN0IHBkZmpzVmVyc2lvbiA9ICcyLjUuMjA3JztcbmNvbnN0IHBkZmpzQnVpbGQgPSAnMDk3NGQ2MDUnO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuV29ya2VyTWVzc2FnZUhhbmRsZXIgPSBleHBvcnRzLldvcmtlclRhc2sgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfcGRmX21hbmFnZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYpO1xuXG52YXIgX2lzX25vZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQpO1xuXG52YXIgX21lc3NhZ2VfaGFuZGxlciA9IF9fd19wZGZqc19yZXF1aXJlX18oNDUpO1xuXG52YXIgX3dvcmtlcl9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQ2KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxudmFyIFdvcmtlclRhc2sgPSBmdW5jdGlvbiBXb3JrZXJUYXNrQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gV29ya2VyVGFzayhuYW1lKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnRlcm1pbmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9jYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICB9XG5cbiAgV29ya2VyVGFzay5wcm90b3R5cGUgPSB7XG4gICAgZ2V0IGZpbmlzaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9LFxuXG4gICAgZmluaXNoKCkge1xuICAgICAgdGhpcy5fY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSxcblxuICAgIHRlcm1pbmF0ZSgpIHtcbiAgICAgIHRoaXMudGVybWluYXRlZCA9IHRydWU7XG4gICAgfSxcblxuICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKSB7XG4gICAgICBpZiAodGhpcy50ZXJtaW5hdGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIldvcmtlciB0YXNrIHdhcyB0ZXJtaW5hdGVkXCIpO1xuICAgICAgfVxuICAgIH1cblxuICB9O1xuICByZXR1cm4gV29ya2VyVGFzaztcbn0oKTtcblxuZXhwb3J0cy5Xb3JrZXJUYXNrID0gV29ya2VyVGFzaztcbnZhciBXb3JrZXJNZXNzYWdlSGFuZGxlciA9IHtcbiAgc2V0dXAoaGFuZGxlciwgcG9ydCkge1xuICAgIHZhciB0ZXN0TWVzc2FnZVByb2Nlc3NlZCA9IGZhbHNlO1xuICAgIGhhbmRsZXIub24oXCJ0ZXN0XCIsIGZ1bmN0aW9uIHdwaFNldHVwVGVzdChkYXRhKSB7XG4gICAgICBpZiAodGVzdE1lc3NhZ2VQcm9jZXNzZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0ZXN0TWVzc2FnZVByb2Nlc3NlZCA9IHRydWU7XG5cbiAgICAgIGlmICghKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICBoYW5kbGVyLnNlbmQoXCJ0ZXN0XCIsIG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1cHBvcnRUcmFuc2ZlcnMgPSBkYXRhWzBdID09PSAyNTU7XG4gICAgICBoYW5kbGVyLnBvc3RNZXNzYWdlVHJhbnNmZXJzID0gc3VwcG9ydFRyYW5zZmVycztcbiAgICAgIGhhbmRsZXIuc2VuZChcInRlc3RcIiwge1xuICAgICAgICBzdXBwb3J0VHJhbnNmZXJzXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiY29uZmlndXJlXCIsIGZ1bmN0aW9uIHdwaENvbmZpZ3VyZShkYXRhKSB7XG4gICAgICAoMCwgX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKGRhdGEudmVyYm9zaXR5KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0RG9jUmVxdWVzdFwiLCBmdW5jdGlvbiB3cGhTZXR1cERvYyhkYXRhKSB7XG4gICAgICByZXR1cm4gV29ya2VyTWVzc2FnZUhhbmRsZXIuY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGRhdGEsIHBvcnQpO1xuICAgIH0pO1xuICB9LFxuXG4gIGNyZWF0ZURvY3VtZW50SGFuZGxlcihkb2NQYXJhbXMsIHBvcnQpIHtcbiAgICB2YXIgcGRmTWFuYWdlcjtcbiAgICB2YXIgdGVybWluYXRlZCA9IGZhbHNlO1xuICAgIHZhciBjYW5jZWxYSFJzID0gbnVsbDtcbiAgICB2YXIgV29ya2VyVGFza3MgPSBbXTtcbiAgICBjb25zdCB2ZXJib3NpdHkgPSAoMCwgX3V0aWwuZ2V0VmVyYm9zaXR5TGV2ZWwpKCk7XG4gICAgY29uc3QgYXBpVmVyc2lvbiA9IGRvY1BhcmFtcy5hcGlWZXJzaW9uO1xuICAgIGNvbnN0IHdvcmtlclZlcnNpb24gPSAnMi41LjIwNyc7XG5cbiAgICBpZiAoYXBpVmVyc2lvbiAhPT0gd29ya2VyVmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQVBJIHZlcnNpb24gXCIke2FwaVZlcnNpb259XCIgZG9lcyBub3QgbWF0Y2ggYCArIGB0aGUgV29ya2VyIHZlcnNpb24gXCIke3dvcmtlclZlcnNpb259XCIuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZW51bWVyYWJsZVByb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gW10pIHtcbiAgICAgIGVudW1lcmFibGVQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgIH1cblxuICAgIGlmIChlbnVtZXJhYmxlUHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBgQXJyYXkucHJvdG90eXBlYCBjb250YWlucyB1bmV4cGVjdGVkIGVudW1lcmFibGUgcHJvcGVydGllczogXCIgKyBlbnVtZXJhYmxlUHJvcGVydGllcy5qb2luKFwiLCBcIikgKyBcIjsgdGh1cyBicmVha2luZyBlLmcuIGBmb3IuLi5pbmAgaXRlcmF0aW9uIG9mIGBBcnJheWBzLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBQcm9taXNlLmFsbFNldHRsZWQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBicm93c2VyL2Vudmlyb25tZW50IGxhY2tzIG5hdGl2ZSBzdXBwb3J0IGZvciBjcml0aWNhbCBcIiArIFwiZnVuY3Rpb25hbGl0eSB1c2VkIGJ5IHRoZSBQREYuanMgbGlicmFyeSAoZS5nLiBcIiArIFwiYFJlYWRhYmxlU3RyZWFtYCBhbmQvb3IgYFByb21pc2UuYWxsU2V0dGxlZGApOyBcIiArIFwicGxlYXNlIHVzZSBhbiBFUzUtY29tcGF0aWJsZSBidWlsZCBpbnN0ZWFkLlwiKTtcbiAgICB9XG5cbiAgICB2YXIgZG9jSWQgPSBkb2NQYXJhbXMuZG9jSWQ7XG4gICAgdmFyIGRvY0Jhc2VVcmwgPSBkb2NQYXJhbXMuZG9jQmFzZVVybDtcbiAgICB2YXIgd29ya2VySGFuZGxlck5hbWUgPSBkb2NQYXJhbXMuZG9jSWQgKyBcIl93b3JrZXJcIjtcbiAgICB2YXIgaGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKHdvcmtlckhhbmRsZXJOYW1lLCBkb2NJZCwgcG9ydCk7XG4gICAgaGFuZGxlci5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IGRvY1BhcmFtcy5wb3N0TWVzc2FnZVRyYW5zZmVycztcblxuICAgIGZ1bmN0aW9uIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKSB7XG4gICAgICBpZiAodGVybWluYXRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRXb3JrZXJUYXNrKHRhc2spIHtcbiAgICAgIFdvcmtlclRhc2tzLnB1c2godGFzayk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluaXNoV29ya2VyVGFzayh0YXNrKSB7XG4gICAgICB0YXNrLmZpbmlzaCgpO1xuICAgICAgdmFyIGkgPSBXb3JrZXJUYXNrcy5pbmRleE9mKHRhc2spO1xuICAgICAgV29ya2VyVGFza3Muc3BsaWNlKGksIDEpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWREb2N1bWVudChyZWNvdmVyeU1vZGUpIHtcbiAgICAgIGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiY2hlY2tIZWFkZXJcIik7XG4gICAgICBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcInBhcnNlU3RhcnRYUmVmXCIpO1xuICAgICAgYXdhaXQgcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJwYXJzZVwiLCBbcmVjb3ZlcnlNb2RlXSk7XG5cbiAgICAgIGlmICghcmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgIGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiY2hlY2tGaXJzdFBhZ2VcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtudW1QYWdlcywgZmluZ2VycHJpbnRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3BkZk1hbmFnZXIuZW5zdXJlRG9jKFwibnVtUGFnZXNcIiksIHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiZmluZ2VycHJpbnRcIildKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG51bVBhZ2VzLFxuICAgICAgICBmaW5nZXJwcmludFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQZGZNYW5hZ2VyKGRhdGEsIGV2YWx1YXRvck9wdGlvbnMpIHtcbiAgICAgIHZhciBwZGZNYW5hZ2VyQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIGxldCBuZXdQZGZNYW5hZ2VyO1xuICAgICAgdmFyIHNvdXJjZSA9IGRhdGEuc291cmNlO1xuXG4gICAgICBpZiAoc291cmNlLmRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXdQZGZNYW5hZ2VyID0gbmV3IF9wZGZfbWFuYWdlci5Mb2NhbFBkZk1hbmFnZXIoZG9jSWQsIHNvdXJjZS5kYXRhLCBzb3VyY2UucGFzc3dvcmQsIGV2YWx1YXRvck9wdGlvbnMsIGRvY0Jhc2VVcmwpO1xuICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlc29sdmUobmV3UGRmTWFuYWdlcik7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGRmU3RyZWFtLFxuICAgICAgICAgIGNhY2hlZENodW5rcyA9IFtdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwZGZTdHJlYW0gPSBuZXcgX3dvcmtlcl9zdHJlYW0uUERGV29ya2VyU3RyZWFtKGhhbmRsZXIpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgcmV0dXJuIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBmdWxsUmVxdWVzdCA9IHBkZlN0cmVhbS5nZXRGdWxsUmVhZGVyKCk7XG4gICAgICBmdWxsUmVxdWVzdC5oZWFkZXJzUmVhZHkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZnVsbFJlcXVlc3QuaXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaXNhYmxlQXV0b0ZldGNoID0gc291cmNlLmRpc2FibGVBdXRvRmV0Y2ggfHwgZnVsbFJlcXVlc3QuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gICAgICAgIG5ld1BkZk1hbmFnZXIgPSBuZXcgX3BkZl9tYW5hZ2VyLk5ldHdvcmtQZGZNYW5hZ2VyKGRvY0lkLCBwZGZTdHJlYW0sIHtcbiAgICAgICAgICBtc2dIYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICAgIHBhc3N3b3JkOiBzb3VyY2UucGFzc3dvcmQsXG4gICAgICAgICAgbGVuZ3RoOiBmdWxsUmVxdWVzdC5jb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGRpc2FibGVBdXRvRmV0Y2gsXG4gICAgICAgICAgcmFuZ2VDaHVua1NpemU6IHNvdXJjZS5yYW5nZUNodW5rU2l6ZVxuICAgICAgICB9LCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhY2hlZENodW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG5ld1BkZk1hbmFnZXIuc2VuZFByb2dyZXNzaXZlRGF0YShjYWNoZWRDaHVua3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FjaGVkQ2h1bmtzID0gW107XG4gICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlc29sdmUobmV3UGRmTWFuYWdlcik7XG4gICAgICAgIGNhbmNlbFhIUnMgPSBudWxsO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgY2FuY2VsWEhScyA9IG51bGw7XG4gICAgICB9KTtcbiAgICAgIHZhciBsb2FkZWQgPSAwO1xuXG4gICAgICB2YXIgZmx1c2hDaHVua3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwZGZGaWxlID0gKDAsIF91dGlsLmFycmF5c1RvQnl0ZXMpKGNhY2hlZENodW5rcyk7XG5cbiAgICAgICAgaWYgKHNvdXJjZS5sZW5ndGggJiYgcGRmRmlsZS5sZW5ndGggIT09IHNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJyZXBvcnRlZCBIVFRQIGxlbmd0aCBpcyBkaWZmZXJlbnQgZnJvbSBhY3R1YWxcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG5ld1BkZk1hbmFnZXIgPSBuZXcgX3BkZl9tYW5hZ2VyLkxvY2FsUGRmTWFuYWdlcihkb2NJZCwgcGRmRmlsZSwgc291cmNlLnBhc3N3b3JkLCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKTtcbiAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZXNvbHZlKG5ld1BkZk1hbmFnZXIpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlamVjdChleCk7XG4gICAgICAgIH1cblxuICAgICAgICBjYWNoZWRDaHVua3MgPSBbXTtcbiAgICAgIH07XG5cbiAgICAgIHZhciByZWFkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlYWRDaHVuayA9IGZ1bmN0aW9uICh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9uZVxuICAgICAgICB9KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcblxuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgaWYgKCFuZXdQZGZNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgZmx1c2hDaHVua3MoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhbmNlbFhIUnMgPSBudWxsO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvYWRlZCArPSAoMCwgX3V0aWwuYXJyYXlCeXRlTGVuZ3RoKSh2YWx1ZSk7XG5cbiAgICAgICAgICAgIGlmICghZnVsbFJlcXVlc3QuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKFwiRG9jUHJvZ3Jlc3NcIiwge1xuICAgICAgICAgICAgICAgIGxvYWRlZCxcbiAgICAgICAgICAgICAgICB0b3RhbDogTWF0aC5tYXgobG9hZGVkLCBmdWxsUmVxdWVzdC5jb250ZW50TGVuZ3RoIHx8IDApXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3UGRmTWFuYWdlcikge1xuICAgICAgICAgICAgICBuZXdQZGZNYW5hZ2VyLnNlbmRQcm9ncmVzc2l2ZURhdGEodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2FjaGVkQ2h1bmtzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdWxsUmVxdWVzdC5yZWFkKCkudGhlbihyZWFkQ2h1bmssIHJlamVjdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdWxsUmVxdWVzdC5yZWFkKCkudGhlbihyZWFkQ2h1bmssIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIHJlYWRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlamVjdChlKTtcbiAgICAgICAgY2FuY2VsWEhScyA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgY2FuY2VsWEhScyA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgcGRmU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbik7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcGRmTWFuYWdlckNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXR1cERvYyhkYXRhKSB7XG4gICAgICBmdW5jdGlvbiBvblN1Y2Nlc3MoZG9jKSB7XG4gICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgICAgaGFuZGxlci5zZW5kKFwiR2V0RG9jXCIsIHtcbiAgICAgICAgICBwZGZJbmZvOiBkb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG9uRmFpbHVyZShleCkge1xuICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG5cbiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX3V0aWwuUGFzc3dvcmRFeGNlcHRpb24pIHtcbiAgICAgICAgICB2YXIgdGFzayA9IG5ldyBXb3JrZXJUYXNrKGBQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgJHtleC5jb2RlfWApO1xuICAgICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICBoYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIlBhc3N3b3JkUmVxdWVzdFwiLCBleCkudGhlbihmdW5jdGlvbiAoe1xuICAgICAgICAgICAgcGFzc3dvcmRcbiAgICAgICAgICB9KSB7XG4gICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuICAgICAgICAgICAgcGRmTWFuYWdlci51cGRhdGVQYXNzd29yZChwYXNzd29yZCk7XG4gICAgICAgICAgICBwZGZNYW5hZ2VyUmVhZHkoKTtcbiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuICAgICAgICAgICAgaGFuZGxlci5zZW5kKFwiRG9jRXhjZXB0aW9uXCIsIGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChleCBpbnN0YW5jZW9mIF91dGlsLkludmFsaWRQREZFeGNlcHRpb24gfHwgZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uIHx8IGV4IGluc3RhbmNlb2YgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIHx8IGV4IGluc3RhbmNlb2YgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlci5zZW5kKFwiRG9jRXhjZXB0aW9uXCIsIGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVyLnNlbmQoXCJEb2NFeGNlcHRpb25cIiwgbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC50b1N0cmluZygpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcGRmTWFuYWdlclJlYWR5KCkge1xuICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICAgIGxvYWREb2N1bWVudChmYWxzZSkudGhlbihvblN1Y2Nlc3MsIGZ1bmN0aW9uIGxvYWRGYWlsdXJlKGV4KSB7XG4gICAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuXG4gICAgICAgICAgaWYgKCEoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5YUmVmUGFyc2VFeGNlcHRpb24pKSB7XG4gICAgICAgICAgICBvbkZhaWx1cmUoZXgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBkZk1hbmFnZXIucmVxdWVzdExvYWRlZFN0cmVhbSgpO1xuICAgICAgICAgIHBkZk1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgICAgICAgIGxvYWREb2N1bWVudCh0cnVlKS50aGVuKG9uU3VjY2Vzcywgb25GYWlsdXJlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgb25GYWlsdXJlKTtcbiAgICAgIH1cblxuICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgdmFyIGV2YWx1YXRvck9wdGlvbnMgPSB7XG4gICAgICAgIG1heEltYWdlU2l6ZTogZGF0YS5tYXhJbWFnZVNpemUsXG4gICAgICAgIGRpc2FibGVGb250RmFjZTogZGF0YS5kaXNhYmxlRm9udEZhY2UsXG4gICAgICAgIGlnbm9yZUVycm9yczogZGF0YS5pZ25vcmVFcnJvcnMsXG4gICAgICAgIGlzRXZhbFN1cHBvcnRlZDogZGF0YS5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgIGZvbnRFeHRyYVByb3BlcnRpZXM6IGRhdGEuZm9udEV4dHJhUHJvcGVydGllc1xuICAgICAgfTtcbiAgICAgIGdldFBkZk1hbmFnZXIoZGF0YSwgZXZhbHVhdG9yT3B0aW9ucykudGhlbihmdW5jdGlvbiAobmV3UGRmTWFuYWdlcikge1xuICAgICAgICBpZiAodGVybWluYXRlZCkge1xuICAgICAgICAgIG5ld1BkZk1hbmFnZXIudGVybWluYXRlKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihcIldvcmtlciB3YXMgdGVybWluYXRlZC5cIikpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldvcmtlciB3YXMgdGVybWluYXRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBkZk1hbmFnZXIgPSBuZXdQZGZNYW5hZ2VyO1xuICAgICAgICBwZGZNYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCkudGhlbihmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgICAgICAgaGFuZGxlci5zZW5kKFwiRGF0YUxvYWRlZFwiLCB7XG4gICAgICAgICAgICBsZW5ndGg6IHN0cmVhbS5ieXRlcy5ieXRlTGVuZ3RoXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSkudGhlbihwZGZNYW5hZ2VyUmVhZHksIG9uRmFpbHVyZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlci5vbihcIkdldFBhZ2VcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmdldFBhZ2UoZGF0YS5wYWdlSW5kZXgpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCBcInJvdGF0ZVwiKSwgcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgXCJyZWZcIiksIHBkZk1hbmFnZXIuZW5zdXJlKHBhZ2UsIFwidXNlclVuaXRcIiksIHBkZk1hbmFnZXIuZW5zdXJlKHBhZ2UsIFwidmlld1wiKV0pLnRoZW4oZnVuY3Rpb24gKFtyb3RhdGUsIHJlZiwgdXNlclVuaXQsIHZpZXddKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvdGF0ZSxcbiAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgIHVzZXJVbml0LFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldFBhZ2VJbmRleFwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldFBhZ2VJbmRleChkYXRhKSB7XG4gICAgICB2YXIgcmVmID0gX3ByaW1pdGl2ZXMuUmVmLmdldChkYXRhLnJlZi5udW0sIGRhdGEucmVmLmdlbik7XG5cbiAgICAgIHZhciBjYXRhbG9nID0gcGRmTWFuYWdlci5wZGZEb2N1bWVudC5jYXRhbG9nO1xuICAgICAgcmV0dXJuIGNhdGFsb2cuZ2V0UGFnZUluZGV4KHJlZik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldERlc3RpbmF0aW9uc1wiLCBmdW5jdGlvbiB3cGhTZXR1cEdldERlc3RpbmF0aW9ucyhkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiZGVzdGluYXRpb25zXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXREZXN0aW5hdGlvblwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldERlc3RpbmF0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJnZXREZXN0aW5hdGlvblwiLCBbZGF0YS5pZF0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQYWdlTGFiZWxzXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUxhYmVscyhkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwicGFnZUxhYmVsc1wiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0UGFnZUxheW91dFwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldFBhZ2VMYXlvdXQoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcInBhZ2VMYXlvdXRcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldFBhZ2VNb2RlXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZU1vZGUoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcInBhZ2VNb2RlXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRWaWV3ZXJQcmVmZXJlbmNlc1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcInZpZXdlclByZWZlcmVuY2VzXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRPcGVuQWN0aW9uXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwib3BlbkFjdGlvblwiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0QXR0YWNobWVudHNcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRBdHRhY2htZW50cyhkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiYXR0YWNobWVudHNcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldEphdmFTY3JpcHRcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRKYXZhU2NyaXB0KGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJqYXZhU2NyaXB0XCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRPdXRsaW5lXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0T3V0bGluZShkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiZG9jdW1lbnRPdXRsaW5lXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQZXJtaXNzaW9uc1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcInBlcm1pc3Npb25zXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRNZXRhZGF0YVwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldE1ldGFkYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJkb2N1bWVudEluZm9cIiksIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcIm1ldGFkYXRhXCIpXSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldERhdGFcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXREYXRhKGRhdGEpIHtcbiAgICAgIHBkZk1hbmFnZXIucmVxdWVzdExvYWRlZFN0cmVhbSgpO1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKS50aGVuKGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5ieXRlcztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRTdGF0c1wiLCBmdW5jdGlvbiB3cGhTZXR1cEdldFN0YXRzKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLnBkZkRvY3VtZW50LnhyZWYuc3RhdHM7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldEFubm90YXRpb25zXCIsIGZ1bmN0aW9uICh7XG4gICAgICBwYWdlSW5kZXgsXG4gICAgICBpbnRlbnRcbiAgICB9KSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICByZXR1cm4gcGFnZS5nZXRBbm5vdGF0aW9uc0RhdGEoaW50ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRPcGVyYXRvckxpc3RcIiwgZnVuY3Rpb24gd3BoU2V0dXBSZW5kZXJQYWdlKGRhdGEsIHNpbmspIHtcbiAgICAgIHZhciBwYWdlSW5kZXggPSBkYXRhLnBhZ2VJbmRleDtcbiAgICAgIHBkZk1hbmFnZXIuZ2V0UGFnZShwYWdlSW5kZXgpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgdmFyIHRhc2sgPSBuZXcgV29ya2VyVGFzayhgR2V0T3BlcmF0b3JMaXN0OiBwYWdlICR7cGFnZUluZGV4fWApO1xuICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdmVyYm9zaXR5ID49IF91dGlsLlZlcmJvc2l0eUxldmVsLklORk9TID8gRGF0ZS5ub3coKSA6IDA7XG4gICAgICAgIHBhZ2UuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgIHNpbmssXG4gICAgICAgICAgdGFzayxcbiAgICAgICAgICBpbnRlbnQ6IGRhdGEuaW50ZW50LFxuICAgICAgICAgIHJlbmRlckludGVyYWN0aXZlRm9ybXM6IGRhdGEucmVuZGVySW50ZXJhY3RpdmVGb3Jtc1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChvcGVyYXRvckxpc3RJbmZvKSB7XG4gICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcblxuICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBwYWdlPSR7cGFnZUluZGV4ICsgMX0gLSBnZXRPcGVyYXRvckxpc3Q6IHRpbWU9YCArIGAke0RhdGUubm93KCkgLSBzdGFydH1tcywgbGVuPSR7b3BlcmF0b3JMaXN0SW5mby5sZW5ndGh9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2luay5jbG9zZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcblxuICAgICAgICAgIGlmICh0YXNrLnRlcm1pbmF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvck9wZXJhdG9yTGlzdFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNpbmsuZXJyb3IocmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzKTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0VGV4dENvbnRlbnRcIiwgZnVuY3Rpb24gd3BoRXh0cmFjdFRleHQoZGF0YSwgc2luaykge1xuICAgICAgdmFyIHBhZ2VJbmRleCA9IGRhdGEucGFnZUluZGV4O1xuXG4gICAgICBzaW5rLm9uUHVsbCA9IGZ1bmN0aW9uIChkZXNpcmVkU2l6ZSkge307XG5cbiAgICAgIHNpbmsub25DYW5jZWwgPSBmdW5jdGlvbiAocmVhc29uKSB7fTtcblxuICAgICAgcGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICB2YXIgdGFzayA9IG5ldyBXb3JrZXJUYXNrKFwiR2V0VGV4dENvbnRlbnQ6IHBhZ2UgXCIgKyBwYWdlSW5kZXgpO1xuICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdmVyYm9zaXR5ID49IF91dGlsLlZlcmJvc2l0eUxldmVsLklORk9TID8gRGF0ZS5ub3coKSA6IDA7XG4gICAgICAgIHBhZ2UuZXh0cmFjdFRleHRDb250ZW50KHtcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgc2luayxcbiAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlOiBkYXRhLm5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgICAgICAgY29tYmluZVRleHRJdGVtczogZGF0YS5jb21iaW5lVGV4dEl0ZW1zXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7XG5cbiAgICAgICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgcGFnZT0ke3BhZ2VJbmRleCArIDF9IC0gZ2V0VGV4dENvbnRlbnQ6IHRpbWU9YCArIGAke0RhdGUubm93KCkgLSBzdGFydH1tc2ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNpbmsuY2xvc2UoKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7XG5cbiAgICAgICAgICBpZiAodGFzay50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2luay5lcnJvcihyZWFzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJGb250RmFsbGJhY2tcIiwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmZvbnRGYWxsYmFjayhkYXRhLmlkLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiQ2xlYW51cFwiLCBmdW5jdGlvbiB3cGhDbGVhbnVwKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmNsZWFudXAodHJ1ZSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIlRlcm1pbmF0ZVwiLCBmdW5jdGlvbiB3cGhUZXJtaW5hdGUoZGF0YSkge1xuICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICBjb25zdCB3YWl0T24gPSBbXTtcblxuICAgICAgaWYgKHBkZk1hbmFnZXIpIHtcbiAgICAgICAgcGRmTWFuYWdlci50ZXJtaW5hdGUobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKFwiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLlwiKSk7XG4gICAgICAgIGNvbnN0IGNsZWFudXBQcm9taXNlID0gcGRmTWFuYWdlci5jbGVhbnVwKCk7XG4gICAgICAgIHdhaXRPbi5wdXNoKGNsZWFudXBQcm9taXNlKTtcbiAgICAgICAgcGRmTWFuYWdlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3ByaW1pdGl2ZXMuY2xlYXJQcmltaXRpdmVDYWNoZXMpKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYW5jZWxYSFJzKSB7XG4gICAgICAgIGNhbmNlbFhIUnMobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKFwiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLlwiKSk7XG4gICAgICB9XG5cbiAgICAgIFdvcmtlclRhc2tzLmZvckVhY2goZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgd2FpdE9uLnB1c2godGFzay5maW5pc2hlZCk7XG4gICAgICAgIHRhc2sudGVybWluYXRlKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh3YWl0T24pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBoYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgaGFuZGxlciA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiUmVhZHlcIiwgZnVuY3Rpb24gd3BoUmVhZHkoZGF0YSkge1xuICAgICAgc2V0dXBEb2MoZG9jUGFyYW1zKTtcbiAgICAgIGRvY1BhcmFtcyA9IG51bGw7XG4gICAgfSk7XG4gICAgcmV0dXJuIHdvcmtlckhhbmRsZXJOYW1lO1xuICB9LFxuXG4gIGluaXRpYWxpemVGcm9tUG9ydChwb3J0KSB7XG4gICAgdmFyIGhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihcIndvcmtlclwiLCBcIm1haW5cIiwgcG9ydCk7XG4gICAgV29ya2VyTWVzc2FnZUhhbmRsZXIuc2V0dXAoaGFuZGxlciwgcG9ydCk7XG4gICAgaGFuZGxlci5zZW5kKFwicmVhZHlcIiwgbnVsbCk7XG4gIH1cblxufTtcbmV4cG9ydHMuV29ya2VyTWVzc2FnZUhhbmRsZXIgPSBXb3JrZXJNZXNzYWdlSGFuZGxlcjtcblxuZnVuY3Rpb24gaXNNZXNzYWdlUG9ydChtYXliZVBvcnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZVBvcnQucG9zdE1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIiAmJiBcIm9ubWVzc2FnZVwiIGluIG1heWJlUG9ydDtcbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgJiYgIV9pc19ub2RlLmlzTm9kZUpTICYmIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIGlzTWVzc2FnZVBvcnQoc2VsZikpIHtcbiAgV29ya2VyTWVzc2FnZUhhbmRsZXIuaW5pdGlhbGl6ZUZyb21Qb3J0KHNlbGYpO1xufVxuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXJyYXlCeXRlTGVuZ3RoID0gYXJyYXlCeXRlTGVuZ3RoO1xuZXhwb3J0cy5hcnJheXNUb0J5dGVzID0gYXJyYXlzVG9CeXRlcztcbmV4cG9ydHMuYXNzZXJ0ID0gYXNzZXJ0O1xuZXhwb3J0cy5ieXRlc1RvU3RyaW5nID0gYnl0ZXNUb1N0cmluZztcbmV4cG9ydHMuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkgPSBjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eTtcbmV4cG9ydHMuZ2V0VmVyYm9zaXR5TGV2ZWwgPSBnZXRWZXJib3NpdHlMZXZlbDtcbmV4cG9ydHMuaW5mbyA9IGluZm87XG5leHBvcnRzLmlzQXJyYXlCdWZmZXIgPSBpc0FycmF5QnVmZmVyO1xuZXhwb3J0cy5pc0FycmF5RXF1YWwgPSBpc0FycmF5RXF1YWw7XG5leHBvcnRzLmlzQm9vbCA9IGlzQm9vbDtcbmV4cG9ydHMuaXNFbXB0eU9iaiA9IGlzRW1wdHlPYmo7XG5leHBvcnRzLmlzTnVtID0gaXNOdW07XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5leHBvcnRzLmlzU2FtZU9yaWdpbiA9IGlzU2FtZU9yaWdpbjtcbmV4cG9ydHMuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCA9IGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG5leHBvcnRzLnJlbW92ZU51bGxDaGFyYWN0ZXJzID0gcmVtb3ZlTnVsbENoYXJhY3RlcnM7XG5leHBvcnRzLnNldFZlcmJvc2l0eUxldmVsID0gc2V0VmVyYm9zaXR5TGV2ZWw7XG5leHBvcnRzLnNoYWRvdyA9IHNoYWRvdztcbmV4cG9ydHMuc3RyaW5nMzIgPSBzdHJpbmczMjtcbmV4cG9ydHMuc3RyaW5nVG9CeXRlcyA9IHN0cmluZ1RvQnl0ZXM7XG5leHBvcnRzLnN0cmluZ1RvUERGU3RyaW5nID0gc3RyaW5nVG9QREZTdHJpbmc7XG5leHBvcnRzLnN0cmluZ1RvVVRGOFN0cmluZyA9IHN0cmluZ1RvVVRGOFN0cmluZztcbmV4cG9ydHMudXRmOFN0cmluZ1RvU3RyaW5nID0gdXRmOFN0cmluZ1RvU3RyaW5nO1xuZXhwb3J0cy53YXJuID0gd2FybjtcbmV4cG9ydHMudW5yZWFjaGFibGUgPSB1bnJlYWNoYWJsZTtcbmV4cG9ydHMuSXNFdmFsU3VwcG9ydGVkQ2FjaGVkID0gZXhwb3J0cy5Jc0xpdHRsZUVuZGlhbkNhY2hlZCA9IGV4cG9ydHMuY3JlYXRlT2JqZWN0VVJMID0gZXhwb3J0cy5Gb3JtYXRFcnJvciA9IGV4cG9ydHMuVXRpbCA9IGV4cG9ydHMuVW5rbm93bkVycm9yRXhjZXB0aW9uID0gZXhwb3J0cy5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gPSBleHBvcnRzLlRleHRSZW5kZXJpbmdNb2RlID0gZXhwb3J0cy5TdHJlYW1UeXBlID0gZXhwb3J0cy5QZXJtaXNzaW9uRmxhZyA9IGV4cG9ydHMuUGFzc3dvcmRSZXNwb25zZXMgPSBleHBvcnRzLlBhc3N3b3JkRXhjZXB0aW9uID0gZXhwb3J0cy5NaXNzaW5nUERGRXhjZXB0aW9uID0gZXhwb3J0cy5JbnZhbGlkUERGRXhjZXB0aW9uID0gZXhwb3J0cy5BYm9ydEV4Y2VwdGlvbiA9IGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IGV4cG9ydHMuSW1hZ2VLaW5kID0gZXhwb3J0cy5Gb250VHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvblR5cGUgPSBleHBvcnRzLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvblJldmlld1N0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uUmVwbHlUeXBlID0gZXhwb3J0cy5Bbm5vdGF0aW9uTWFya2VkU3RhdGUgPSBleHBvcnRzLkFubm90YXRpb25GbGFnID0gZXhwb3J0cy5Bbm5vdGF0aW9uRmllbGRGbGFnID0gZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gZXhwb3J0cy5VTlNVUFBPUlRFRF9GRUFUVVJFUyA9IGV4cG9ydHMuVmVyYm9zaXR5TGV2ZWwgPSBleHBvcnRzLk9QUyA9IGV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5GT05UX0lERU5USVRZX01BVFJJWCA9IGV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IHZvaWQgMDtcblxuX193X3BkZmpzX3JlcXVpcmVfXygzKTtcblxuY29uc3QgSURFTlRJVFlfTUFUUklYID0gWzEsIDAsIDAsIDEsIDAsIDBdO1xuZXhwb3J0cy5JREVOVElUWV9NQVRSSVggPSBJREVOVElUWV9NQVRSSVg7XG5jb25zdCBGT05UX0lERU5USVRZX01BVFJJWCA9IFswLjAwMSwgMCwgMCwgMC4wMDEsIDAsIDBdO1xuZXhwb3J0cy5GT05UX0lERU5USVRZX01BVFJJWCA9IEZPTlRfSURFTlRJVFlfTUFUUklYO1xuY29uc3QgUGVybWlzc2lvbkZsYWcgPSB7XG4gIFBSSU5UOiAweDA0LFxuICBNT0RJRllfQ09OVEVOVFM6IDB4MDgsXG4gIENPUFk6IDB4MTAsXG4gIE1PRElGWV9BTk5PVEFUSU9OUzogMHgyMCxcbiAgRklMTF9JTlRFUkFDVElWRV9GT1JNUzogMHgxMDAsXG4gIENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6IDB4MjAwLFxuICBBU1NFTUJMRTogMHg0MDAsXG4gIFBSSU5UX0hJR0hfUVVBTElUWTogMHg4MDBcbn07XG5leHBvcnRzLlBlcm1pc3Npb25GbGFnID0gUGVybWlzc2lvbkZsYWc7XG5jb25zdCBUZXh0UmVuZGVyaW5nTW9kZSA9IHtcbiAgRklMTDogMCxcbiAgU1RST0tFOiAxLFxuICBGSUxMX1NUUk9LRTogMixcbiAgSU5WSVNJQkxFOiAzLFxuICBGSUxMX0FERF9UT19QQVRIOiA0LFxuICBTVFJPS0VfQUREX1RPX1BBVEg6IDUsXG4gIEZJTExfU1RST0tFX0FERF9UT19QQVRIOiA2LFxuICBBRERfVE9fUEFUSDogNyxcbiAgRklMTF9TVFJPS0VfTUFTSzogMyxcbiAgQUREX1RPX1BBVEhfRkxBRzogNFxufTtcbmV4cG9ydHMuVGV4dFJlbmRlcmluZ01vZGUgPSBUZXh0UmVuZGVyaW5nTW9kZTtcbmNvbnN0IEltYWdlS2luZCA9IHtcbiAgR1JBWVNDQUxFXzFCUFA6IDEsXG4gIFJHQl8yNEJQUDogMixcbiAgUkdCQV8zMkJQUDogM1xufTtcbmV4cG9ydHMuSW1hZ2VLaW5kID0gSW1hZ2VLaW5kO1xuY29uc3QgQW5ub3RhdGlvblR5cGUgPSB7XG4gIFRFWFQ6IDEsXG4gIExJTks6IDIsXG4gIEZSRUVURVhUOiAzLFxuICBMSU5FOiA0LFxuICBTUVVBUkU6IDUsXG4gIENJUkNMRTogNixcbiAgUE9MWUdPTjogNyxcbiAgUE9MWUxJTkU6IDgsXG4gIEhJR0hMSUdIVDogOSxcbiAgVU5ERVJMSU5FOiAxMCxcbiAgU1FVSUdHTFk6IDExLFxuICBTVFJJS0VPVVQ6IDEyLFxuICBTVEFNUDogMTMsXG4gIENBUkVUOiAxNCxcbiAgSU5LOiAxNSxcbiAgUE9QVVA6IDE2LFxuICBGSUxFQVRUQUNITUVOVDogMTcsXG4gIFNPVU5EOiAxOCxcbiAgTU9WSUU6IDE5LFxuICBXSURHRVQ6IDIwLFxuICBTQ1JFRU46IDIxLFxuICBQUklOVEVSTUFSSzogMjIsXG4gIFRSQVBORVQ6IDIzLFxuICBXQVRFUk1BUks6IDI0LFxuICBUSFJFRUQ6IDI1LFxuICBSRURBQ1Q6IDI2XG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uVHlwZSA9IEFubm90YXRpb25UeXBlO1xuY29uc3QgQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlID0ge1xuICBNQVJLRUQ6IFwiTWFya2VkXCIsXG4gIFJFVklFVzogXCJSZXZpZXdcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlID0gQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlO1xuY29uc3QgQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0ge1xuICBNQVJLRUQ6IFwiTWFya2VkXCIsXG4gIFVOTUFSS0VEOiBcIlVubWFya2VkXCJcbn07XG5leHBvcnRzLkFubm90YXRpb25NYXJrZWRTdGF0ZSA9IEFubm90YXRpb25NYXJrZWRTdGF0ZTtcbmNvbnN0IEFubm90YXRpb25SZXZpZXdTdGF0ZSA9IHtcbiAgQUNDRVBURUQ6IFwiQWNjZXB0ZWRcIixcbiAgUkVKRUNURUQ6IFwiUmVqZWN0ZWRcIixcbiAgQ0FOQ0VMTEVEOiBcIkNhbmNlbGxlZFwiLFxuICBDT01QTEVURUQ6IFwiQ29tcGxldGVkXCIsXG4gIE5PTkU6IFwiTm9uZVwiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uUmV2aWV3U3RhdGUgPSBBbm5vdGF0aW9uUmV2aWV3U3RhdGU7XG5jb25zdCBBbm5vdGF0aW9uUmVwbHlUeXBlID0ge1xuICBHUk9VUDogXCJHcm91cFwiLFxuICBSRVBMWTogXCJSXCJcbn07XG5leHBvcnRzLkFubm90YXRpb25SZXBseVR5cGUgPSBBbm5vdGF0aW9uUmVwbHlUeXBlO1xuY29uc3QgQW5ub3RhdGlvbkZsYWcgPSB7XG4gIElOVklTSUJMRTogMHgwMSxcbiAgSElEREVOOiAweDAyLFxuICBQUklOVDogMHgwNCxcbiAgTk9aT09NOiAweDA4LFxuICBOT1JPVEFURTogMHgxMCxcbiAgTk9WSUVXOiAweDIwLFxuICBSRUFET05MWTogMHg0MCxcbiAgTE9DS0VEOiAweDgwLFxuICBUT0dHTEVOT1ZJRVc6IDB4MTAwLFxuICBMT0NLRURDT05URU5UUzogMHgyMDBcbn07XG5leHBvcnRzLkFubm90YXRpb25GbGFnID0gQW5ub3RhdGlvbkZsYWc7XG5jb25zdCBBbm5vdGF0aW9uRmllbGRGbGFnID0ge1xuICBSRUFET05MWTogMHgwMDAwMDAxLFxuICBSRVFVSVJFRDogMHgwMDAwMDAyLFxuICBOT0VYUE9SVDogMHgwMDAwMDA0LFxuICBNVUxUSUxJTkU6IDB4MDAwMTAwMCxcbiAgUEFTU1dPUkQ6IDB4MDAwMjAwMCxcbiAgTk9UT0dHTEVUT09GRjogMHgwMDA0MDAwLFxuICBSQURJTzogMHgwMDA4MDAwLFxuICBQVVNIQlVUVE9OOiAweDAwMTAwMDAsXG4gIENPTUJPOiAweDAwMjAwMDAsXG4gIEVESVQ6IDB4MDA0MDAwMCxcbiAgU09SVDogMHgwMDgwMDAwLFxuICBGSUxFU0VMRUNUOiAweDAxMDAwMDAsXG4gIE1VTFRJU0VMRUNUOiAweDAyMDAwMDAsXG4gIERPTk9UU1BFTExDSEVDSzogMHgwNDAwMDAwLFxuICBET05PVFNDUk9MTDogMHgwODAwMDAwLFxuICBDT01COiAweDEwMDAwMDAsXG4gIFJJQ0hURVhUOiAweDIwMDAwMDAsXG4gIFJBRElPU0lOVU5JU09OOiAweDIwMDAwMDAsXG4gIENPTU1JVE9OU0VMQ0hBTkdFOiAweDQwMDAwMDBcbn07XG5leHBvcnRzLkFubm90YXRpb25GaWVsZEZsYWcgPSBBbm5vdGF0aW9uRmllbGRGbGFnO1xuY29uc3QgQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IHtcbiAgU09MSUQ6IDEsXG4gIERBU0hFRDogMixcbiAgQkVWRUxFRDogMyxcbiAgSU5TRVQ6IDQsXG4gIFVOREVSTElORTogNVxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IEFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU7XG5jb25zdCBTdHJlYW1UeXBlID0ge1xuICBVTktOT1dOOiBcIlVOS05PV05cIixcbiAgRkxBVEU6IFwiRkxBVEVcIixcbiAgTFpXOiBcIkxaV1wiLFxuICBEQ1Q6IFwiRENUXCIsXG4gIEpQWDogXCJKUFhcIixcbiAgSkJJRzogXCJKQklHXCIsXG4gIEE4NTogXCJBODVcIixcbiAgQUhYOiBcIkFIWFwiLFxuICBDQ0Y6IFwiQ0NGXCIsXG4gIFJMWDogXCJSTFhcIlxufTtcbmV4cG9ydHMuU3RyZWFtVHlwZSA9IFN0cmVhbVR5cGU7XG5jb25zdCBGb250VHlwZSA9IHtcbiAgVU5LTk9XTjogXCJVTktOT1dOXCIsXG4gIFRZUEUxOiBcIlRZUEUxXCIsXG4gIFRZUEUxQzogXCJUWVBFMUNcIixcbiAgQ0lERk9OVFRZUEUwOiBcIkNJREZPTlRUWVBFMFwiLFxuICBDSURGT05UVFlQRTBDOiBcIkNJREZPTlRUWVBFMENcIixcbiAgVFJVRVRZUEU6IFwiVFJVRVRZUEVcIixcbiAgQ0lERk9OVFRZUEUyOiBcIkNJREZPTlRUWVBFMlwiLFxuICBUWVBFMzogXCJUWVBFM1wiLFxuICBPUEVOVFlQRTogXCJPUEVOVFlQRVwiLFxuICBUWVBFMDogXCJUWVBFMFwiLFxuICBNTVRZUEUxOiBcIk1NVFlQRTFcIlxufTtcbmV4cG9ydHMuRm9udFR5cGUgPSBGb250VHlwZTtcbmNvbnN0IFZlcmJvc2l0eUxldmVsID0ge1xuICBFUlJPUlM6IDAsXG4gIFdBUk5JTkdTOiAxLFxuICBJTkZPUzogNVxufTtcbmV4cG9ydHMuVmVyYm9zaXR5TGV2ZWwgPSBWZXJib3NpdHlMZXZlbDtcbmNvbnN0IENNYXBDb21wcmVzc2lvblR5cGUgPSB7XG4gIE5PTkU6IDAsXG4gIEJJTkFSWTogMSxcbiAgU1RSRUFNOiAyXG59O1xuZXhwb3J0cy5DTWFwQ29tcHJlc3Npb25UeXBlID0gQ01hcENvbXByZXNzaW9uVHlwZTtcbmNvbnN0IE9QUyA9IHtcbiAgZGVwZW5kZW5jeTogMSxcbiAgc2V0TGluZVdpZHRoOiAyLFxuICBzZXRMaW5lQ2FwOiAzLFxuICBzZXRMaW5lSm9pbjogNCxcbiAgc2V0TWl0ZXJMaW1pdDogNSxcbiAgc2V0RGFzaDogNixcbiAgc2V0UmVuZGVyaW5nSW50ZW50OiA3LFxuICBzZXRGbGF0bmVzczogOCxcbiAgc2V0R1N0YXRlOiA5LFxuICBzYXZlOiAxMCxcbiAgcmVzdG9yZTogMTEsXG4gIHRyYW5zZm9ybTogMTIsXG4gIG1vdmVUbzogMTMsXG4gIGxpbmVUbzogMTQsXG4gIGN1cnZlVG86IDE1LFxuICBjdXJ2ZVRvMjogMTYsXG4gIGN1cnZlVG8zOiAxNyxcbiAgY2xvc2VQYXRoOiAxOCxcbiAgcmVjdGFuZ2xlOiAxOSxcbiAgc3Ryb2tlOiAyMCxcbiAgY2xvc2VTdHJva2U6IDIxLFxuICBmaWxsOiAyMixcbiAgZW9GaWxsOiAyMyxcbiAgZmlsbFN0cm9rZTogMjQsXG4gIGVvRmlsbFN0cm9rZTogMjUsXG4gIGNsb3NlRmlsbFN0cm9rZTogMjYsXG4gIGNsb3NlRU9GaWxsU3Ryb2tlOiAyNyxcbiAgZW5kUGF0aDogMjgsXG4gIGNsaXA6IDI5LFxuICBlb0NsaXA6IDMwLFxuICBiZWdpblRleHQ6IDMxLFxuICBlbmRUZXh0OiAzMixcbiAgc2V0Q2hhclNwYWNpbmc6IDMzLFxuICBzZXRXb3JkU3BhY2luZzogMzQsXG4gIHNldEhTY2FsZTogMzUsXG4gIHNldExlYWRpbmc6IDM2LFxuICBzZXRGb250OiAzNyxcbiAgc2V0VGV4dFJlbmRlcmluZ01vZGU6IDM4LFxuICBzZXRUZXh0UmlzZTogMzksXG4gIG1vdmVUZXh0OiA0MCxcbiAgc2V0TGVhZGluZ01vdmVUZXh0OiA0MSxcbiAgc2V0VGV4dE1hdHJpeDogNDIsXG4gIG5leHRMaW5lOiA0MyxcbiAgc2hvd1RleHQ6IDQ0LFxuICBzaG93U3BhY2VkVGV4dDogNDUsXG4gIG5leHRMaW5lU2hvd1RleHQ6IDQ2LFxuICBuZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDogNDcsXG4gIHNldENoYXJXaWR0aDogNDgsXG4gIHNldENoYXJXaWR0aEFuZEJvdW5kczogNDksXG4gIHNldFN0cm9rZUNvbG9yU3BhY2U6IDUwLFxuICBzZXRGaWxsQ29sb3JTcGFjZTogNTEsXG4gIHNldFN0cm9rZUNvbG9yOiA1MixcbiAgc2V0U3Ryb2tlQ29sb3JOOiA1MyxcbiAgc2V0RmlsbENvbG9yOiA1NCxcbiAgc2V0RmlsbENvbG9yTjogNTUsXG4gIHNldFN0cm9rZUdyYXk6IDU2LFxuICBzZXRGaWxsR3JheTogNTcsXG4gIHNldFN0cm9rZVJHQkNvbG9yOiA1OCxcbiAgc2V0RmlsbFJHQkNvbG9yOiA1OSxcbiAgc2V0U3Ryb2tlQ01ZS0NvbG9yOiA2MCxcbiAgc2V0RmlsbENNWUtDb2xvcjogNjEsXG4gIHNoYWRpbmdGaWxsOiA2MixcbiAgYmVnaW5JbmxpbmVJbWFnZTogNjMsXG4gIGJlZ2luSW1hZ2VEYXRhOiA2NCxcbiAgZW5kSW5saW5lSW1hZ2U6IDY1LFxuICBwYWludFhPYmplY3Q6IDY2LFxuICBtYXJrUG9pbnQ6IDY3LFxuICBtYXJrUG9pbnRQcm9wczogNjgsXG4gIGJlZ2luTWFya2VkQ29udGVudDogNjksXG4gIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiA3MCxcbiAgZW5kTWFya2VkQ29udGVudDogNzEsXG4gIGJlZ2luQ29tcGF0OiA3MixcbiAgZW5kQ29tcGF0OiA3MyxcbiAgcGFpbnRGb3JtWE9iamVjdEJlZ2luOiA3NCxcbiAgcGFpbnRGb3JtWE9iamVjdEVuZDogNzUsXG4gIGJlZ2luR3JvdXA6IDc2LFxuICBlbmRHcm91cDogNzcsXG4gIGJlZ2luQW5ub3RhdGlvbnM6IDc4LFxuICBlbmRBbm5vdGF0aW9uczogNzksXG4gIGJlZ2luQW5ub3RhdGlvbjogODAsXG4gIGVuZEFubm90YXRpb246IDgxLFxuICBwYWludEpwZWdYT2JqZWN0OiA4MixcbiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0OiA4MyxcbiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXA6IDg0LFxuICBwYWludEltYWdlWE9iamVjdDogODUsXG4gIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OiA4NixcbiAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDogODcsXG4gIHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0OiA4OCxcbiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0OiA4OSxcbiAgcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOiA5MCxcbiAgY29uc3RydWN0UGF0aDogOTFcbn07XG5leHBvcnRzLk9QUyA9IE9QUztcbmNvbnN0IFVOU1VQUE9SVEVEX0ZFQVRVUkVTID0ge1xuICB1bmtub3duOiBcInVua25vd25cIixcbiAgZm9ybXM6IFwiZm9ybXNcIixcbiAgamF2YVNjcmlwdDogXCJqYXZhU2NyaXB0XCIsXG4gIHNtYXNrOiBcInNtYXNrXCIsXG4gIHNoYWRpbmdQYXR0ZXJuOiBcInNoYWRpbmdQYXR0ZXJuXCIsXG4gIGZvbnQ6IFwiZm9udFwiLFxuICBlcnJvclRpbGluZ1BhdHRlcm46IFwiZXJyb3JUaWxpbmdQYXR0ZXJuXCIsXG4gIGVycm9yRXh0R1N0YXRlOiBcImVycm9yRXh0R1N0YXRlXCIsXG4gIGVycm9yWE9iamVjdDogXCJlcnJvclhPYmplY3RcIixcbiAgZXJyb3JGb250TG9hZFR5cGUzOiBcImVycm9yRm9udExvYWRUeXBlM1wiLFxuICBlcnJvckZvbnRTdGF0ZTogXCJlcnJvckZvbnRTdGF0ZVwiLFxuICBlcnJvckZvbnRNaXNzaW5nOiBcImVycm9yRm9udE1pc3NpbmdcIixcbiAgZXJyb3JGb250VHJhbnNsYXRlOiBcImVycm9yRm9udFRyYW5zbGF0ZVwiLFxuICBlcnJvckNvbG9yU3BhY2U6IFwiZXJyb3JDb2xvclNwYWNlXCIsXG4gIGVycm9yT3BlcmF0b3JMaXN0OiBcImVycm9yT3BlcmF0b3JMaXN0XCIsXG4gIGVycm9yRm9udFRvVW5pY29kZTogXCJlcnJvckZvbnRUb1VuaWNvZGVcIixcbiAgZXJyb3JGb250TG9hZE5hdGl2ZTogXCJlcnJvckZvbnRMb2FkTmF0aXZlXCIsXG4gIGVycm9yRm9udEdldFBhdGg6IFwiZXJyb3JGb250R2V0UGF0aFwiXG59O1xuZXhwb3J0cy5VTlNVUFBPUlRFRF9GRUFUVVJFUyA9IFVOU1VQUE9SVEVEX0ZFQVRVUkVTO1xuY29uc3QgUGFzc3dvcmRSZXNwb25zZXMgPSB7XG4gIE5FRURfUEFTU1dPUkQ6IDEsXG4gIElOQ09SUkVDVF9QQVNTV09SRDogMlxufTtcbmV4cG9ydHMuUGFzc3dvcmRSZXNwb25zZXMgPSBQYXNzd29yZFJlc3BvbnNlcztcbmxldCB2ZXJib3NpdHkgPSBWZXJib3NpdHlMZXZlbC5XQVJOSU5HUztcblxuZnVuY3Rpb24gc2V0VmVyYm9zaXR5TGV2ZWwobGV2ZWwpIHtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIobGV2ZWwpKSB7XG4gICAgdmVyYm9zaXR5ID0gbGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VmVyYm9zaXR5TGV2ZWwoKSB7XG4gIHJldHVybiB2ZXJib3NpdHk7XG59XG5cbmZ1bmN0aW9uIGluZm8obXNnKSB7XG4gIGlmICh2ZXJib3NpdHkgPj0gVmVyYm9zaXR5TGV2ZWwuSU5GT1MpIHtcbiAgICBjb25zb2xlLmxvZyhgSW5mbzogJHttc2d9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgaWYgKHZlcmJvc2l0eSA+PSBWZXJib3NpdHlMZXZlbC5XQVJOSU5HUykge1xuICAgIGNvbnNvbGUubG9nKGBXYXJuaW5nOiAke21zZ31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnJlYWNoYWJsZShtc2cpIHtcbiAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydChjb25kLCBtc2cpIHtcbiAgaWYgKCFjb25kKSB7XG4gICAgdW5yZWFjaGFibGUobXNnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmlnaW4oYmFzZVVybCwgb3RoZXJVcmwpIHtcbiAgbGV0IGJhc2U7XG5cbiAgdHJ5IHtcbiAgICBiYXNlID0gbmV3IFVSTChiYXNlVXJsKTtcblxuICAgIGlmICghYmFzZS5vcmlnaW4gfHwgYmFzZS5vcmlnaW4gPT09IFwibnVsbFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgb3RoZXIgPSBuZXcgVVJMKG90aGVyVXJsLCBiYXNlKTtcbiAgcmV0dXJuIGJhc2Uub3JpZ2luID09PSBvdGhlci5vcmlnaW47XG59XG5cbmZ1bmN0aW9uIF9pc1ZhbGlkUHJvdG9jb2wodXJsKSB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh1cmwucHJvdG9jb2wpIHtcbiAgICBjYXNlIFwiaHR0cDpcIjpcbiAgICBjYXNlIFwiaHR0cHM6XCI6XG4gICAgY2FzZSBcImZ0cDpcIjpcbiAgICBjYXNlIFwibWFpbHRvOlwiOlxuICAgIGNhc2UgXCJ0ZWw6XCI6XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYWJzb2x1dGVVcmwgPSBiYXNlVXJsID8gbmV3IFVSTCh1cmwsIGJhc2VVcmwpIDogbmV3IFVSTCh1cmwpO1xuXG4gICAgaWYgKF9pc1ZhbGlkUHJvdG9jb2woYWJzb2x1dGVVcmwpKSB7XG4gICAgICByZXR1cm4gYWJzb2x1dGVVcmw7XG4gICAgfVxuICB9IGNhdGNoIChleCkge31cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2hhZG93KG9iaiwgcHJvcCwgdmFsdWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwge1xuICAgIHZhbHVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5jb25zdCBCYXNlRXhjZXB0aW9uID0gZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIEJhc2VFeGNlcHRpb24obWVzc2FnZSkge1xuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlRXhjZXB0aW9uKSB7XG4gICAgICB1bnJlYWNoYWJsZShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VFeGNlcHRpb24uXCIpO1xuICAgIH1cblxuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgQmFzZUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgQmFzZUV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IEJhc2VFeGNlcHRpb247XG4gIHJldHVybiBCYXNlRXhjZXB0aW9uO1xufSgpO1xuXG5leHBvcnRzLkJhc2VFeGNlcHRpb24gPSBCYXNlRXhjZXB0aW9uO1xuXG5jbGFzcyBQYXNzd29yZEV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2csIGNvZGUpIHtcbiAgICBzdXBlcihtc2cpO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gIH1cblxufVxuXG5leHBvcnRzLlBhc3N3b3JkRXhjZXB0aW9uID0gUGFzc3dvcmRFeGNlcHRpb247XG5cbmNsYXNzIFVua25vd25FcnJvckV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2csIGRldGFpbHMpIHtcbiAgICBzdXBlcihtc2cpO1xuICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gIH1cblxufVxuXG5leHBvcnRzLlVua25vd25FcnJvckV4Y2VwdGlvbiA9IFVua25vd25FcnJvckV4Y2VwdGlvbjtcblxuY2xhc3MgSW52YWxpZFBERkV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge31cblxuZXhwb3J0cy5JbnZhbGlkUERGRXhjZXB0aW9uID0gSW52YWxpZFBERkV4Y2VwdGlvbjtcblxuY2xhc3MgTWlzc2luZ1BERkV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge31cblxuZXhwb3J0cy5NaXNzaW5nUERGRXhjZXB0aW9uID0gTWlzc2luZ1BERkV4Y2VwdGlvbjtcblxuY2xhc3MgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgc3RhdHVzKSB7XG4gICAgc3VwZXIobXNnKTtcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgfVxuXG59XG5cbmV4cG9ydHMuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uO1xuXG5jbGFzcyBGb3JtYXRFcnJvciBleHRlbmRzIEJhc2VFeGNlcHRpb24ge31cblxuZXhwb3J0cy5Gb3JtYXRFcnJvciA9IEZvcm1hdEVycm9yO1xuXG5jbGFzcyBBYm9ydEV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge31cblxuZXhwb3J0cy5BYm9ydEV4Y2VwdGlvbiA9IEFib3J0RXhjZXB0aW9uO1xuY29uc3QgTnVsbENoYXJhY3RlcnNSZWdFeHAgPSAvXFx4MDAvZztcblxuZnVuY3Rpb24gcmVtb3ZlTnVsbENoYXJhY3RlcnMoc3RyKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgd2FybihcIlRoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy5cIik7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBzdHIucmVwbGFjZShOdWxsQ2hhcmFjdGVyc1JlZ0V4cCwgXCJcIik7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoYnl0ZXMpIHtcbiAgYXNzZXJ0KGJ5dGVzICE9PSBudWxsICYmIHR5cGVvZiBieXRlcyA9PT0gXCJvYmplY3RcIiAmJiBieXRlcy5sZW5ndGggIT09IHVuZGVmaW5lZCwgXCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nXCIpO1xuICBjb25zdCBsZW5ndGggPSBieXRlcy5sZW5ndGg7XG4gIGNvbnN0IE1BWF9BUkdVTUVOVF9DT1VOVCA9IDgxOTI7XG5cbiAgaWYgKGxlbmd0aCA8IE1BWF9BUkdVTUVOVF9DT1VOVCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGJ5dGVzKTtcbiAgfVxuXG4gIGNvbnN0IHN0ckJ1ZiA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IE1BWF9BUkdVTUVOVF9DT1VOVCkge1xuICAgIGNvbnN0IGNodW5rRW5kID0gTWF0aC5taW4oaSArIE1BWF9BUkdVTUVOVF9DT1VOVCwgbGVuZ3RoKTtcbiAgICBjb25zdCBjaHVuayA9IGJ5dGVzLnN1YmFycmF5KGksIGNodW5rRW5kKTtcbiAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7XG4gIH1cblxuICByZXR1cm4gc3RyQnVmLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIGFzc2VydCh0eXBlb2Ygc3RyID09PSBcInN0cmluZ1wiLCBcIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXNcIik7XG4gIGNvbnN0IGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgYnl0ZXNbaV0gPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmZ1bmN0aW9uIGFycmF5Qnl0ZUxlbmd0aChhcnIpIHtcbiAgaWYgKGFyci5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcnIubGVuZ3RoO1xuICB9XG5cbiAgYXNzZXJ0KGFyci5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQsIFwiYXJyYXlCeXRlTGVuZ3RoIC0gaW52YWxpZCBhcmd1bWVudC5cIik7XG4gIHJldHVybiBhcnIuYnl0ZUxlbmd0aDtcbn1cblxuZnVuY3Rpb24gYXJyYXlzVG9CeXRlcyhhcnIpIHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoID09PSAxICYmIGFyclswXSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gYXJyWzBdO1xuICB9XG5cbiAgbGV0IHJlc3VsdExlbmd0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdExlbmd0aCArPSBhcnJheUJ5dGVMZW5ndGgoYXJyW2ldKTtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocmVzdWx0TGVuZ3RoKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGl0ZW0gPSBhcnJbaV07XG5cbiAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpdGVtID0gc3RyaW5nVG9CeXRlcyhpdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0gPSBuZXcgVWludDhBcnJheShpdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpdGVtTGVuZ3RoID0gaXRlbS5ieXRlTGVuZ3RoO1xuICAgIGRhdGEuc2V0KGl0ZW0sIHBvcyk7XG4gICAgcG9zICs9IGl0ZW1MZW5ndGg7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nMzIodmFsdWUpIHtcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWUgPj4gMjQgJiAweGZmLCB2YWx1ZSA+PiAxNiAmIDB4ZmYsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xufVxuXG5mdW5jdGlvbiBpc0xpdHRsZUVuZGlhbigpIHtcbiAgY29uc3QgYnVmZmVyOCA9IG5ldyBVaW50OEFycmF5KDQpO1xuICBidWZmZXI4WzBdID0gMTtcbiAgY29uc3QgdmlldzMyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcjguYnVmZmVyLCAwLCAxKTtcbiAgcmV0dXJuIHZpZXczMlswXSA9PT0gMTtcbn1cblxuY29uc3QgSXNMaXR0bGVFbmRpYW5DYWNoZWQgPSB7XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gc2hhZG93KHRoaXMsIFwidmFsdWVcIiwgaXNMaXR0bGVFbmRpYW4oKSk7XG4gIH1cblxufTtcbmV4cG9ydHMuSXNMaXR0bGVFbmRpYW5DYWNoZWQgPSBJc0xpdHRsZUVuZGlhbkNhY2hlZDtcblxuZnVuY3Rpb24gaXNFdmFsU3VwcG9ydGVkKCkge1xuICB0cnkge1xuICAgIG5ldyBGdW5jdGlvbihcIlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jb25zdCBJc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSB7XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gc2hhZG93KHRoaXMsIFwidmFsdWVcIiwgaXNFdmFsU3VwcG9ydGVkKCkpO1xuICB9XG5cbn07XG5leHBvcnRzLklzRXZhbFN1cHBvcnRlZENhY2hlZCA9IElzRXZhbFN1cHBvcnRlZENhY2hlZDtcbmNvbnN0IHJnYkJ1ZiA9IFtcInJnYihcIiwgMCwgXCIsXCIsIDAsIFwiLFwiLCAwLCBcIilcIl07XG5cbmNsYXNzIFV0aWwge1xuICBzdGF0aWMgbWFrZUNzc1JnYihyLCBnLCBiKSB7XG4gICAgcmdiQnVmWzFdID0gcjtcbiAgICByZ2JCdWZbM10gPSBnO1xuICAgIHJnYkJ1Zls1XSA9IGI7XG4gICAgcmV0dXJuIHJnYkJ1Zi5qb2luKFwiXCIpO1xuICB9XG5cbiAgc3RhdGljIHRyYW5zZm9ybShtMSwgbTIpIHtcbiAgICByZXR1cm4gW20xWzBdICogbTJbMF0gKyBtMVsyXSAqIG0yWzFdLCBtMVsxXSAqIG0yWzBdICsgbTFbM10gKiBtMlsxXSwgbTFbMF0gKiBtMlsyXSArIG0xWzJdICogbTJbM10sIG0xWzFdICogbTJbMl0gKyBtMVszXSAqIG0yWzNdLCBtMVswXSAqIG0yWzRdICsgbTFbMl0gKiBtMls1XSArIG0xWzRdLCBtMVsxXSAqIG0yWzRdICsgbTFbM10gKiBtMls1XSArIG0xWzVdXTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRyYW5zZm9ybShwLCBtKSB7XG4gICAgY29uc3QgeHQgPSBwWzBdICogbVswXSArIHBbMV0gKiBtWzJdICsgbVs0XTtcbiAgICBjb25zdCB5dCA9IHBbMF0gKiBtWzFdICsgcFsxXSAqIG1bM10gKyBtWzVdO1xuICAgIHJldHVybiBbeHQsIHl0XTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUludmVyc2VUcmFuc2Zvcm0ocCwgbSkge1xuICAgIGNvbnN0IGQgPSBtWzBdICogbVszXSAtIG1bMV0gKiBtWzJdO1xuICAgIGNvbnN0IHh0ID0gKHBbMF0gKiBtWzNdIC0gcFsxXSAqIG1bMl0gKyBtWzJdICogbVs1XSAtIG1bNF0gKiBtWzNdKSAvIGQ7XG4gICAgY29uc3QgeXQgPSAoLXBbMF0gKiBtWzFdICsgcFsxXSAqIG1bMF0gKyBtWzRdICogbVsxXSAtIG1bNV0gKiBtWzBdKSAvIGQ7XG4gICAgcmV0dXJuIFt4dCwgeXRdO1xuICB9XG5cbiAgc3RhdGljIGdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHIsIG0pIHtcbiAgICBjb25zdCBwMSA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0ociwgbSk7XG4gICAgY29uc3QgcDIgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIuc2xpY2UoMiwgNCksIG0pO1xuICAgIGNvbnN0IHAzID0gVXRpbC5hcHBseVRyYW5zZm9ybShbclswXSwgclszXV0sIG0pO1xuICAgIGNvbnN0IHA0ID0gVXRpbC5hcHBseVRyYW5zZm9ybShbclsyXSwgclsxXV0sIG0pO1xuICAgIHJldHVybiBbTWF0aC5taW4ocDFbMF0sIHAyWzBdLCBwM1swXSwgcDRbMF0pLCBNYXRoLm1pbihwMVsxXSwgcDJbMV0sIHAzWzFdLCBwNFsxXSksIE1hdGgubWF4KHAxWzBdLCBwMlswXSwgcDNbMF0sIHA0WzBdKSwgTWF0aC5tYXgocDFbMV0sIHAyWzFdLCBwM1sxXSwgcDRbMV0pXTtcbiAgfVxuXG4gIHN0YXRpYyBpbnZlcnNlVHJhbnNmb3JtKG0pIHtcbiAgICBjb25zdCBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTtcbiAgICByZXR1cm4gW21bM10gLyBkLCAtbVsxXSAvIGQsIC1tWzJdIC8gZCwgbVswXSAvIGQsIChtWzJdICogbVs1XSAtIG1bNF0gKiBtWzNdKSAvIGQsIChtWzRdICogbVsxXSAtIG1bNV0gKiBtWzBdKSAvIGRdO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5M2RUcmFuc2Zvcm0obSwgdikge1xuICAgIHJldHVybiBbbVswXSAqIHZbMF0gKyBtWzFdICogdlsxXSArIG1bMl0gKiB2WzJdLCBtWzNdICogdlswXSArIG1bNF0gKiB2WzFdICsgbVs1XSAqIHZbMl0sIG1bNl0gKiB2WzBdICsgbVs3XSAqIHZbMV0gKyBtWzhdICogdlsyXV07XG4gIH1cblxuICBzdGF0aWMgc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUobSkge1xuICAgIGNvbnN0IHRyYW5zcG9zZSA9IFttWzBdLCBtWzJdLCBtWzFdLCBtWzNdXTtcbiAgICBjb25zdCBhID0gbVswXSAqIHRyYW5zcG9zZVswXSArIG1bMV0gKiB0cmFuc3Bvc2VbMl07XG4gICAgY29uc3QgYiA9IG1bMF0gKiB0cmFuc3Bvc2VbMV0gKyBtWzFdICogdHJhbnNwb3NlWzNdO1xuICAgIGNvbnN0IGMgPSBtWzJdICogdHJhbnNwb3NlWzBdICsgbVszXSAqIHRyYW5zcG9zZVsyXTtcbiAgICBjb25zdCBkID0gbVsyXSAqIHRyYW5zcG9zZVsxXSArIG1bM10gKiB0cmFuc3Bvc2VbM107XG4gICAgY29uc3QgZmlyc3QgPSAoYSArIGQpIC8gMjtcbiAgICBjb25zdCBzZWNvbmQgPSBNYXRoLnNxcnQoKGEgKyBkKSAqIChhICsgZCkgLSA0ICogKGEgKiBkIC0gYyAqIGIpKSAvIDI7XG4gICAgY29uc3Qgc3ggPSBmaXJzdCArIHNlY29uZCB8fCAxO1xuICAgIGNvbnN0IHN5ID0gZmlyc3QgLSBzZWNvbmQgfHwgMTtcbiAgICByZXR1cm4gW01hdGguc3FydChzeCksIE1hdGguc3FydChzeSldO1xuICB9XG5cbiAgc3RhdGljIG5vcm1hbGl6ZVJlY3QocmVjdCkge1xuICAgIGNvbnN0IHIgPSByZWN0LnNsaWNlKDApO1xuXG4gICAgaWYgKHJlY3RbMF0gPiByZWN0WzJdKSB7XG4gICAgICByWzBdID0gcmVjdFsyXTtcbiAgICAgIHJbMl0gPSByZWN0WzBdO1xuICAgIH1cblxuICAgIGlmIChyZWN0WzFdID4gcmVjdFszXSkge1xuICAgICAgclsxXSA9IHJlY3RbM107XG4gICAgICByWzNdID0gcmVjdFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIHN0YXRpYyBpbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gICAgZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JkZXJlZFggPSBbcmVjdDFbMF0sIHJlY3QxWzJdLCByZWN0MlswXSwgcmVjdDJbMl1dLnNvcnQoY29tcGFyZSk7XG4gICAgY29uc3Qgb3JkZXJlZFkgPSBbcmVjdDFbMV0sIHJlY3QxWzNdLCByZWN0MlsxXSwgcmVjdDJbM11dLnNvcnQoY29tcGFyZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgcmVjdDEgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDEpO1xuICAgIHJlY3QyID0gVXRpbC5ub3JtYWxpemVSZWN0KHJlY3QyKTtcblxuICAgIGlmIChvcmRlcmVkWFswXSA9PT0gcmVjdDFbMF0gJiYgb3JkZXJlZFhbMV0gPT09IHJlY3QyWzBdIHx8IG9yZGVyZWRYWzBdID09PSByZWN0MlswXSAmJiBvcmRlcmVkWFsxXSA9PT0gcmVjdDFbMF0pIHtcbiAgICAgIHJlc3VsdFswXSA9IG9yZGVyZWRYWzFdO1xuICAgICAgcmVzdWx0WzJdID0gb3JkZXJlZFhbMl07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChvcmRlcmVkWVswXSA9PT0gcmVjdDFbMV0gJiYgb3JkZXJlZFlbMV0gPT09IHJlY3QyWzFdIHx8IG9yZGVyZWRZWzBdID09PSByZWN0MlsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDFbMV0pIHtcbiAgICAgIHJlc3VsdFsxXSA9IG9yZGVyZWRZWzFdO1xuICAgICAgcmVzdWx0WzNdID0gb3JkZXJlZFlbMl07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxufVxuXG5leHBvcnRzLlV0aWwgPSBVdGlsO1xuY29uc3QgUERGU3RyaW5nVHJhbnNsYXRlVGFibGUgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHgyRDgsIDB4MkM3LCAweDJDNiwgMHgyRDksIDB4MkRELCAweDJEQiwgMHgyREEsIDB4MkRDLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDIwMjIsIDB4MjAyMCwgMHgyMDIxLCAweDIwMjYsIDB4MjAxNCwgMHgyMDEzLCAweDE5MiwgMHgyMDQ0LCAweDIwMzksIDB4MjAzQSwgMHgyMjEyLCAweDIwMzAsIDB4MjAxRSwgMHgyMDFDLCAweDIwMUQsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUEsIDB4MjEyMiwgMHhGQjAxLCAweEZCMDIsIDB4MTQxLCAweDE1MiwgMHgxNjAsIDB4MTc4LCAweDE3RCwgMHgxMzEsIDB4MTQyLCAweDE1MywgMHgxNjEsIDB4MTdFLCAwLCAweDIwQUNdO1xuXG5mdW5jdGlvbiBzdHJpbmdUb1BERlN0cmluZyhzdHIpIHtcbiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aCxcbiAgICAgICAgc3RyQnVmID0gW107XG5cbiAgaWYgKHN0clswXSA9PT0gXCJcXHhGRVwiICYmIHN0clsxXSA9PT0gXCJcXHhGRlwiKSB7XG4gICAgZm9yIChsZXQgaSA9IDI7IGkgPCBsZW5ndGg7IGkgKz0gMikge1xuICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzdHIuY2hhckNvZGVBdChpKSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSArIDEpKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0clswXSA9PT0gXCJcXHhGRlwiICYmIHN0clsxXSA9PT0gXCJcXHhGRVwiKSB7XG4gICAgZm9yIChsZXQgaSA9IDI7IGkgPCBsZW5ndGg7IGkgKz0gMikge1xuICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzdHIuY2hhckNvZGVBdChpICsgMSkgPDwgOCB8IHN0ci5jaGFyQ29kZUF0KGkpKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZVtzdHIuY2hhckNvZGVBdChpKV07XG4gICAgICBzdHJCdWYucHVzaChjb2RlID8gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSA6IHN0ci5jaGFyQXQoaSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHJCdWYuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nVG9VVEY4U3RyaW5nKHN0cikge1xuICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShzdHIpKTtcbn1cblxuZnVuY3Rpb24gdXRmOFN0cmluZ1RvU3RyaW5nKHN0cikge1xuICByZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5T2JqKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNCb29sKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIjtcbn1cblxuZnVuY3Rpb24gaXNOdW0odikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCI7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcInN0cmluZ1wiO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgdi5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlFcXVhbChhcnIxLCBhcnIyKSB7XG4gIGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gYXJyMS5ldmVyeShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHtcbiAgICByZXR1cm4gZWxlbWVudCA9PT0gYXJyMltpbmRleF07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSgpIHtcbiAgY29uc3QgY2FwYWJpbGl0eSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGxldCBpc1NldHRsZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNhcGFiaWxpdHksIFwic2V0dGxlZFwiLCB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGlzU2V0dGxlZDtcbiAgICB9XG5cbiAgfSk7XG4gIGNhcGFiaWxpdHkucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjYXBhYmlsaXR5LnJlc29sdmUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgaXNTZXR0bGVkID0gdHJ1ZTtcbiAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgfTtcblxuICAgIGNhcGFiaWxpdHkucmVqZWN0ID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaXNTZXR0bGVkID0gdHJ1ZTtcbiAgICAgIHJlamVjdChyZWFzb24pO1xuICAgIH07XG4gIH0pO1xuICByZXR1cm4gY2FwYWJpbGl0eTtcbn1cblxuY29uc3QgY3JlYXRlT2JqZWN0VVJMID0gZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMQ2xvc3VyZSgpIHtcbiAgY29uc3QgZGlnaXRzID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMKGRhdGEsIGNvbnRlbnRUeXBlLCBmb3JjZURhdGFTY2hlbWEgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2VEYXRhU2NoZW1hICYmIFVSTC5jcmVhdGVPYmplY3RVUkwpIHtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHtcbiAgICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgfVxuXG4gICAgbGV0IGJ1ZmZlciA9IGBkYXRhOiR7Y29udGVudFR5cGV9O2Jhc2U2NCxgO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSArPSAzKSB7XG4gICAgICBjb25zdCBiMSA9IGRhdGFbaV0gJiAweGZmO1xuICAgICAgY29uc3QgYjIgPSBkYXRhW2kgKyAxXSAmIDB4ZmY7XG4gICAgICBjb25zdCBiMyA9IGRhdGFbaSArIDJdICYgMHhmZjtcbiAgICAgIGNvbnN0IGQxID0gYjEgPj4gMixcbiAgICAgICAgICAgIGQyID0gKGIxICYgMykgPDwgNCB8IGIyID4+IDQ7XG4gICAgICBjb25zdCBkMyA9IGkgKyAxIDwgaWkgPyAoYjIgJiAweGYpIDw8IDIgfCBiMyA+PiA2IDogNjQ7XG4gICAgICBjb25zdCBkNCA9IGkgKyAyIDwgaWkgPyBiMyAmIDB4M2YgOiA2NDtcbiAgICAgIGJ1ZmZlciArPSBkaWdpdHNbZDFdICsgZGlnaXRzW2QyXSArIGRpZ2l0c1tkM10gKyBkaWdpdHNbZDRdO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG4gIH07XG59KCk7XG5cbmV4cG9ydHMuY3JlYXRlT2JqZWN0VVJMID0gY3JlYXRlT2JqZWN0VVJMO1xuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxuO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOb2RlSlMgPSB2b2lkIDA7XG5jb25zdCBpc05vZGVKUyA9IHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MgKyBcIlwiID09PSBcIltvYmplY3QgcHJvY2Vzc11cIiAmJiAhcHJvY2Vzcy52ZXJzaW9ucy5udyAmJiAhcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbjtcbmV4cG9ydHMuaXNOb2RlSlMgPSBpc05vZGVKUztcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNsZWFyUHJpbWl0aXZlQ2FjaGVzID0gY2xlYXJQcmltaXRpdmVDYWNoZXM7XG5leHBvcnRzLmlzRU9GID0gaXNFT0Y7XG5leHBvcnRzLmlzQ21kID0gaXNDbWQ7XG5leHBvcnRzLmlzRGljdCA9IGlzRGljdDtcbmV4cG9ydHMuaXNOYW1lID0gaXNOYW1lO1xuZXhwb3J0cy5pc1JlZiA9IGlzUmVmO1xuZXhwb3J0cy5pc1JlZnNFcXVhbCA9IGlzUmVmc0VxdWFsO1xuZXhwb3J0cy5pc1N0cmVhbSA9IGlzU3RyZWFtO1xuZXhwb3J0cy5SZWZTZXRDYWNoZSA9IGV4cG9ydHMuUmVmU2V0ID0gZXhwb3J0cy5SZWYgPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLkRpY3QgPSBleHBvcnRzLkNtZCA9IGV4cG9ydHMuRU9GID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgRU9GID0ge307XG5leHBvcnRzLkVPRiA9IEVPRjtcblxudmFyIE5hbWUgPSBmdW5jdGlvbiBOYW1lQ2xvc3VyZSgpIHtcbiAgbGV0IG5hbWVDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgZnVuY3Rpb24gTmFtZShuYW1lKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIE5hbWUucHJvdG90eXBlID0ge307XG5cbiAgTmFtZS5nZXQgPSBmdW5jdGlvbiBOYW1lX2dldChuYW1lKSB7XG4gICAgdmFyIG5hbWVWYWx1ZSA9IG5hbWVDYWNoZVtuYW1lXTtcbiAgICByZXR1cm4gbmFtZVZhbHVlID8gbmFtZVZhbHVlIDogbmFtZUNhY2hlW25hbWVdID0gbmV3IE5hbWUobmFtZSk7XG4gIH07XG5cbiAgTmFtZS5fY2xlYXJDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBuYW1lQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9O1xuXG4gIHJldHVybiBOYW1lO1xufSgpO1xuXG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuXG52YXIgQ21kID0gZnVuY3Rpb24gQ21kQ2xvc3VyZSgpIHtcbiAgbGV0IGNtZENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmdW5jdGlvbiBDbWQoY21kKSB7XG4gICAgdGhpcy5jbWQgPSBjbWQ7XG4gIH1cblxuICBDbWQucHJvdG90eXBlID0ge307XG5cbiAgQ21kLmdldCA9IGZ1bmN0aW9uIENtZF9nZXQoY21kKSB7XG4gICAgdmFyIGNtZFZhbHVlID0gY21kQ2FjaGVbY21kXTtcbiAgICByZXR1cm4gY21kVmFsdWUgPyBjbWRWYWx1ZSA6IGNtZENhY2hlW2NtZF0gPSBuZXcgQ21kKGNtZCk7XG4gIH07XG5cbiAgQ21kLl9jbGVhckNhY2hlID0gZnVuY3Rpb24gKCkge1xuICAgIGNtZENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfTtcblxuICByZXR1cm4gQ21kO1xufSgpO1xuXG5leHBvcnRzLkNtZCA9IENtZDtcblxudmFyIERpY3QgPSBmdW5jdGlvbiBEaWN0Q2xvc3VyZSgpIHtcbiAgdmFyIG5vblNlcmlhbGl6YWJsZSA9IGZ1bmN0aW9uIG5vblNlcmlhbGl6YWJsZUNsb3N1cmUoKSB7XG4gICAgcmV0dXJuIG5vblNlcmlhbGl6YWJsZTtcbiAgfTtcblxuICBmdW5jdGlvbiBEaWN0KHhyZWYpIHtcbiAgICB0aGlzLl9tYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5vYmpJZCA9IG51bGw7XG4gICAgdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9fbm9uU2VyaWFsaXphYmxlX18gPSBub25TZXJpYWxpemFibGU7XG4gIH1cblxuICBEaWN0LnByb3RvdHlwZSA9IHtcbiAgICBhc3NpZ25YcmVmOiBmdW5jdGlvbiBEaWN0X2Fzc2lnblhyZWYobmV3WHJlZikge1xuICAgICAgdGhpcy54cmVmID0gbmV3WHJlZjtcbiAgICB9LFxuXG4gICAgZ2V0KGtleTEsIGtleTIsIGtleTMpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuX21hcFtrZXkxXTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTJdO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGtleTMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTNdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZiAmJiB0aGlzLnhyZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueHJlZi5mZXRjaCh2YWx1ZSwgdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFzeW5jKGtleTEsIGtleTIsIGtleTMpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuX21hcFtrZXkxXTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTJdO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGtleTMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTNdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZiAmJiB0aGlzLnhyZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueHJlZi5mZXRjaEFzeW5jKHZhbHVlLCB0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuXG4gICAgZ2V0QXJyYXkoa2V5MSwga2V5Miwga2V5Mykge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXQoa2V5MSwga2V5Miwga2V5Myk7XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgIXRoaXMueHJlZikge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdmFsdWUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBpZiAoISh2YWx1ZVtpXSBpbnN0YW5jZW9mIFJlZikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlW2ldID0gdGhpcy54cmVmLmZldGNoKHZhbHVlW2ldLCB0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuXG4gICAgZ2V0UmF3OiBmdW5jdGlvbiBEaWN0X2dldFJhdyhrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tYXBba2V5XTtcbiAgICB9LFxuICAgIGdldEtleXM6IGZ1bmN0aW9uIERpY3RfZ2V0S2V5cygpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBEaWN0X3NldChrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLl9tYXBba2V5XSA9IHZhbHVlO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBEaWN0X2hhcyhrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tYXBba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgZm9yRWFjaDogZnVuY3Rpb24gRGljdF9mb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fbWFwKSB7XG4gICAgICAgIGNhbGxiYWNrKGtleSwgdGhpcy5nZXQoa2V5KSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBEaWN0LmVtcHR5ID0gbmV3IERpY3QobnVsbCk7XG5cbiAgRGljdC5tZXJnZSA9IGZ1bmN0aW9uICh4cmVmLCBkaWN0QXJyYXkpIHtcbiAgICBjb25zdCBtZXJnZWREaWN0ID0gbmV3IERpY3QoeHJlZik7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBkaWN0QXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgZGljdCA9IGRpY3RBcnJheVtpXTtcblxuICAgICAgaWYgKCFpc0RpY3QoZGljdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qga2V5TmFtZSBpbiBkaWN0Ll9tYXApIHtcbiAgICAgICAgaWYgKG1lcmdlZERpY3QuX21hcFtrZXlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBtZXJnZWREaWN0Ll9tYXBba2V5TmFtZV0gPSBkaWN0Ll9tYXBba2V5TmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZERpY3Q7XG4gIH07XG5cbiAgcmV0dXJuIERpY3Q7XG59KCk7XG5cbmV4cG9ydHMuRGljdCA9IERpY3Q7XG5cbnZhciBSZWYgPSBmdW5jdGlvbiBSZWZDbG9zdXJlKCkge1xuICBsZXQgcmVmQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGZ1bmN0aW9uIFJlZihudW0sIGdlbikge1xuICAgIHRoaXMubnVtID0gbnVtO1xuICAgIHRoaXMuZ2VuID0gZ2VuO1xuICB9XG5cbiAgUmVmLnByb3RvdHlwZSA9IHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gUmVmX3RvU3RyaW5nKCkge1xuICAgICAgaWYgKHRoaXMuZ2VuID09PSAwKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm51bX1SYDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke3RoaXMubnVtfVIke3RoaXMuZ2VufWA7XG4gICAgfVxuICB9O1xuXG4gIFJlZi5nZXQgPSBmdW5jdGlvbiAobnVtLCBnZW4pIHtcbiAgICBjb25zdCBrZXkgPSBnZW4gPT09IDAgPyBgJHtudW19UmAgOiBgJHtudW19UiR7Z2VufWA7XG4gICAgY29uc3QgcmVmVmFsdWUgPSByZWZDYWNoZVtrZXldO1xuICAgIHJldHVybiByZWZWYWx1ZSA/IHJlZlZhbHVlIDogcmVmQ2FjaGVba2V5XSA9IG5ldyBSZWYobnVtLCBnZW4pO1xuICB9O1xuXG4gIFJlZi5fY2xlYXJDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZWZDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH07XG5cbiAgcmV0dXJuIFJlZjtcbn0oKTtcblxuZXhwb3J0cy5SZWYgPSBSZWY7XG5cbnZhciBSZWZTZXQgPSBmdW5jdGlvbiBSZWZTZXRDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBSZWZTZXQoKSB7XG4gICAgdGhpcy5kaWN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIFJlZlNldC5wcm90b3R5cGUgPSB7XG4gICAgaGFzOiBmdW5jdGlvbiBSZWZTZXRfaGFzKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi50b1N0cmluZygpIGluIHRoaXMuZGljdDtcbiAgICB9LFxuICAgIHB1dDogZnVuY3Rpb24gUmVmU2V0X3B1dChyZWYpIHtcbiAgICAgIHRoaXMuZGljdFtyZWYudG9TdHJpbmcoKV0gPSB0cnVlO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiBSZWZTZXRfcmVtb3ZlKHJlZikge1xuICAgICAgZGVsZXRlIHRoaXMuZGljdFtyZWYudG9TdHJpbmcoKV07XG4gICAgfVxuICB9O1xuICByZXR1cm4gUmVmU2V0O1xufSgpO1xuXG5leHBvcnRzLlJlZlNldCA9IFJlZlNldDtcblxudmFyIFJlZlNldENhY2hlID0gZnVuY3Rpb24gUmVmU2V0Q2FjaGVDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBSZWZTZXRDYWNoZSgpIHtcbiAgICB0aGlzLmRpY3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgUmVmU2V0Q2FjaGUucHJvdG90eXBlID0ge1xuICAgIGdldCBzaXplKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGljdCkubGVuZ3RoO1xuICAgIH0sXG5cbiAgICBnZXQ6IGZ1bmN0aW9uIFJlZlNldENhY2hlX2dldChyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpY3RbcmVmLnRvU3RyaW5nKCldO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBSZWZTZXRDYWNoZV9oYXMocmVmKSB7XG4gICAgICByZXR1cm4gcmVmLnRvU3RyaW5nKCkgaW4gdGhpcy5kaWN0O1xuICAgIH0sXG4gICAgcHV0OiBmdW5jdGlvbiBSZWZTZXRDYWNoZV9wdXQocmVmLCBvYmopIHtcbiAgICAgIHRoaXMuZGljdFtyZWYudG9TdHJpbmcoKV0gPSBvYmo7XG4gICAgfSxcbiAgICBwdXRBbGlhczogZnVuY3Rpb24gUmVmU2V0Q2FjaGVfcHV0QWxpYXMocmVmLCBhbGlhc1JlZikge1xuICAgICAgdGhpcy5kaWN0W3JlZi50b1N0cmluZygpXSA9IHRoaXMuZ2V0KGFsaWFzUmVmKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIFJlZlNldENhY2hlX2ZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgIGZvciAoY29uc3QgaSBpbiB0aGlzLmRpY3QpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5kaWN0W2ldKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiBSZWZTZXRDYWNoZV9jbGVhcigpIHtcbiAgICAgIHRoaXMuZGljdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gUmVmU2V0Q2FjaGU7XG59KCk7XG5cbmV4cG9ydHMuUmVmU2V0Q2FjaGUgPSBSZWZTZXRDYWNoZTtcblxuZnVuY3Rpb24gaXNFT0Yodikge1xuICByZXR1cm4gdiA9PT0gRU9GO1xufVxuXG5mdW5jdGlvbiBpc05hbWUodiwgbmFtZSkge1xuICByZXR1cm4gdiBpbnN0YW5jZW9mIE5hbWUgJiYgKG5hbWUgPT09IHVuZGVmaW5lZCB8fCB2Lm5hbWUgPT09IG5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc0NtZCh2LCBjbWQpIHtcbiAgcmV0dXJuIHYgaW5zdGFuY2VvZiBDbWQgJiYgKGNtZCA9PT0gdW5kZWZpbmVkIHx8IHYuY21kID09PSBjbWQpO1xufVxuXG5mdW5jdGlvbiBpc0RpY3QodiwgdHlwZSkge1xuICByZXR1cm4gdiBpbnN0YW5jZW9mIERpY3QgJiYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCBpc05hbWUodi5nZXQoXCJUeXBlXCIpLCB0eXBlKSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVmKHYpIHtcbiAgcmV0dXJuIHYgaW5zdGFuY2VvZiBSZWY7XG59XG5cbmZ1bmN0aW9uIGlzUmVmc0VxdWFsKHYxLCB2Mikge1xuICByZXR1cm4gdjEubnVtID09PSB2Mi5udW0gJiYgdjEuZ2VuID09PSB2Mi5nZW47XG59XG5cbmZ1bmN0aW9uIGlzU3RyZWFtKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgdi5nZXRCeXRlcyAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjbGVhclByaW1pdGl2ZUNhY2hlcygpIHtcbiAgQ21kLl9jbGVhckNhY2hlKCk7XG5cbiAgTmFtZS5fY2xlYXJDYWNoZSgpO1xuXG4gIFJlZi5fY2xlYXJDYWNoZSgpO1xufVxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTmV0d29ya1BkZk1hbmFnZXIgPSBleHBvcnRzLkxvY2FsUGRmTWFuYWdlciA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jaHVua2VkX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oNyk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfZG9jdW1lbnQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTIpO1xuXG5jbGFzcyBCYXNlUGRmTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlUGRmTWFuYWdlcikge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VQZGZNYW5hZ2VyLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZG9jSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY0lkO1xuICB9XG5cbiAgZ2V0IHBhc3N3b3JkKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXNzd29yZDtcbiAgfVxuXG4gIGdldCBkb2NCYXNlVXJsKCkge1xuICAgIGxldCBkb2NCYXNlVXJsID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl9kb2NCYXNlVXJsKSB7XG4gICAgICBjb25zdCBhYnNvbHV0ZVVybCA9ICgwLCBfdXRpbC5jcmVhdGVWYWxpZEFic29sdXRlVXJsKSh0aGlzLl9kb2NCYXNlVXJsKTtcblxuICAgICAgaWYgKGFic29sdXRlVXJsKSB7XG4gICAgICAgIGRvY0Jhc2VVcmwgPSBhYnNvbHV0ZVVybC5ocmVmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6IFwiJHt0aGlzLl9kb2NCYXNlVXJsfVwiLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImRvY0Jhc2VVcmxcIiwgZG9jQmFzZVVybCk7XG4gIH1cblxuICBvbkxvYWRlZFN0cmVhbSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBvbkxvYWRlZFN0cmVhbWAgY2FsbGVkXCIpO1xuICB9XG5cbiAgZW5zdXJlRG9jKHByb3AsIGFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudCwgcHJvcCwgYXJncyk7XG4gIH1cblxuICBlbnN1cmVYUmVmKHByb3AsIGFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC54cmVmLCBwcm9wLCBhcmdzKTtcbiAgfVxuXG4gIGVuc3VyZUNhdGFsb2cocHJvcCwgYXJncykge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LmNhdGFsb2csIHByb3AsIGFyZ3MpO1xuICB9XG5cbiAgZ2V0UGFnZShwYWdlSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5nZXRQYWdlKHBhZ2VJbmRleCk7XG4gIH1cblxuICBmb250RmFsbGJhY2soaWQsIGhhbmRsZXIpIHtcbiAgICByZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5mb250RmFsbGJhY2soaWQsIGhhbmRsZXIpO1xuICB9XG5cbiAgY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCk7XG4gIH1cblxuICBhc3luYyBlbnN1cmUob2JqLCBwcm9wLCBhcmdzKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZW5zdXJlYCBjYWxsZWRcIik7XG4gIH1cblxuICByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RSYW5nZWAgY2FsbGVkXCIpO1xuICB9XG5cbiAgcmVxdWVzdExvYWRlZFN0cmVhbSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWRcIik7XG4gIH1cblxuICBzZW5kUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgc2VuZFByb2dyZXNzaXZlRGF0YWAgY2FsbGVkXCIpO1xuICB9XG5cbiAgdXBkYXRlUGFzc3dvcmQocGFzc3dvcmQpIHtcbiAgICB0aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkO1xuICB9XG5cbiAgdGVybWluYXRlKHJlYXNvbikge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTG9jYWxQZGZNYW5hZ2VyIGV4dGVuZHMgQmFzZVBkZk1hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcihkb2NJZCwgZGF0YSwgcGFzc3dvcmQsIGV2YWx1YXRvck9wdGlvbnMsIGRvY0Jhc2VVcmwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RvY0lkID0gZG9jSWQ7XG4gICAgdGhpcy5fcGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICB0aGlzLl9kb2NCYXNlVXJsID0gZG9jQmFzZVVybDtcbiAgICB0aGlzLmV2YWx1YXRvck9wdGlvbnMgPSBldmFsdWF0b3JPcHRpb25zO1xuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmVhbShkYXRhKTtcbiAgICB0aGlzLnBkZkRvY3VtZW50ID0gbmV3IF9kb2N1bWVudC5QREZEb2N1bWVudCh0aGlzLCBzdHJlYW0pO1xuICAgIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuc3VyZShvYmosIHByb3AsIGFyZ3MpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9ialtwcm9wXTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHZhbHVlLmFwcGx5KG9iaiwgYXJncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICByZXF1ZXN0TG9hZGVkU3RyZWFtKCkge31cblxuICBvbkxvYWRlZFN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZTtcbiAgfVxuXG4gIHRlcm1pbmF0ZShyZWFzb24pIHt9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbFBkZk1hbmFnZXIgPSBMb2NhbFBkZk1hbmFnZXI7XG5cbmNsYXNzIE5ldHdvcmtQZGZNYW5hZ2VyIGV4dGVuZHMgQmFzZVBkZk1hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcihkb2NJZCwgcGRmTmV0d29ya1N0cmVhbSwgYXJncywgZXZhbHVhdG9yT3B0aW9ucywgZG9jQmFzZVVybCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZG9jSWQgPSBkb2NJZDtcbiAgICB0aGlzLl9wYXNzd29yZCA9IGFyZ3MucGFzc3dvcmQ7XG4gICAgdGhpcy5fZG9jQmFzZVVybCA9IGRvY0Jhc2VVcmw7XG4gICAgdGhpcy5tc2dIYW5kbGVyID0gYXJncy5tc2dIYW5kbGVyO1xuICAgIHRoaXMuZXZhbHVhdG9yT3B0aW9ucyA9IGV2YWx1YXRvck9wdGlvbnM7XG4gICAgdGhpcy5zdHJlYW1NYW5hZ2VyID0gbmV3IF9jaHVua2VkX3N0cmVhbS5DaHVua2VkU3RyZWFtTWFuYWdlcihwZGZOZXR3b3JrU3RyZWFtLCB7XG4gICAgICBtc2dIYW5kbGVyOiBhcmdzLm1zZ0hhbmRsZXIsXG4gICAgICBsZW5ndGg6IGFyZ3MubGVuZ3RoLFxuICAgICAgZGlzYWJsZUF1dG9GZXRjaDogYXJncy5kaXNhYmxlQXV0b0ZldGNoLFxuICAgICAgcmFuZ2VDaHVua1NpemU6IGFyZ3MucmFuZ2VDaHVua1NpemVcbiAgICB9KTtcbiAgICB0aGlzLnBkZkRvY3VtZW50ID0gbmV3IF9kb2N1bWVudC5QREZEb2N1bWVudCh0aGlzLCB0aGlzLnN0cmVhbU1hbmFnZXIuZ2V0U3RyZWFtKCkpO1xuICB9XG5cbiAgYXN5bmMgZW5zdXJlKG9iaiwgcHJvcCwgYXJncykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtwcm9wXTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5hcHBseShvYmosIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RSYW5nZShleC5iZWdpbiwgZXguZW5kKTtcbiAgICAgIHJldHVybiB0aGlzLmVuc3VyZShvYmosIHByb3AsIGFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIHJlcXVlc3RSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtTWFuYWdlci5yZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCk7XG4gIH1cblxuICByZXF1ZXN0TG9hZGVkU3RyZWFtKCkge1xuICAgIHRoaXMuc3RyZWFtTWFuYWdlci5yZXF1ZXN0QWxsQ2h1bmtzKCk7XG4gIH1cblxuICBzZW5kUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7XG4gICAgdGhpcy5zdHJlYW1NYW5hZ2VyLm9uUmVjZWl2ZURhdGEoe1xuICAgICAgY2h1bmtcbiAgICB9KTtcbiAgfVxuXG4gIG9uTG9hZGVkU3RyZWFtKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKTtcbiAgfVxuXG4gIHRlcm1pbmF0ZShyZWFzb24pIHtcbiAgICB0aGlzLnN0cmVhbU1hbmFnZXIuYWJvcnQocmVhc29uKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTmV0d29ya1BkZk1hbmFnZXIgPSBOZXR3b3JrUGRmTWFuYWdlcjtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNodW5rZWRTdHJlYW1NYW5hZ2VyID0gZXhwb3J0cy5DaHVua2VkU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG5jbGFzcyBDaHVua2VkU3RyZWFtIHtcbiAgY29uc3RydWN0b3IobGVuZ3RoLCBjaHVua1NpemUsIG1hbmFnZXIpIHtcbiAgICB0aGlzLmJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICB0aGlzLnN0YXJ0ID0gMDtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy5lbmQgPSBsZW5ndGg7XG4gICAgdGhpcy5jaHVua1NpemUgPSBjaHVua1NpemU7XG4gICAgdGhpcy5sb2FkZWRDaHVua3MgPSBbXTtcbiAgICB0aGlzLm51bUNodW5rc0xvYWRlZCA9IDA7XG4gICAgdGhpcy5udW1DaHVua3MgPSBNYXRoLmNlaWwobGVuZ3RoIC8gY2h1bmtTaXplKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gMDtcbiAgICB0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rID0gLTE7XG4gIH1cblxuICBnZXRNaXNzaW5nQ2h1bmtzKCkge1xuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgY2h1bmsgPSAwLCBuID0gdGhpcy5udW1DaHVua3M7IGNodW5rIDwgbjsgKytjaHVuaykge1xuICAgICAgaWYgKCF0aGlzLmxvYWRlZENodW5rc1tjaHVua10pIHtcbiAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaHVua3M7XG4gIH1cblxuICBnZXRCYXNlU3RyZWFtcygpIHtcbiAgICByZXR1cm4gW3RoaXNdO1xuICB9XG5cbiAgYWxsQ2h1bmtzTG9hZGVkKCkge1xuICAgIHJldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZCA9PT0gdGhpcy5udW1DaHVua3M7XG4gIH1cblxuICBvblJlY2VpdmVEYXRhKGJlZ2luLCBjaHVuaykge1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IHRoaXMuY2h1bmtTaXplO1xuXG4gICAgaWYgKGJlZ2luICUgY2h1bmtTaXplICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBiZWdpbiBvZmZzZXQ6ICR7YmVnaW59YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kID0gYmVnaW4gKyBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gICAgaWYgKGVuZCAlIGNodW5rU2l6ZSAhPT0gMCAmJiBlbmQgIT09IHRoaXMuYnl0ZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlbmQgb2Zmc2V0OiAke2VuZH1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShjaHVuayksIGJlZ2luKTtcbiAgICBjb25zdCBiZWdpbkNodW5rID0gTWF0aC5mbG9vcihiZWdpbiAvIGNodW5rU2l6ZSk7XG4gICAgY29uc3QgZW5kQ2h1bmsgPSBNYXRoLmZsb29yKChlbmQgLSAxKSAvIGNodW5rU2l6ZSkgKyAxO1xuXG4gICAgZm9yIChsZXQgY3VyQ2h1bmsgPSBiZWdpbkNodW5rOyBjdXJDaHVuayA8IGVuZENodW5rOyArK2N1ckNodW5rKSB7XG4gICAgICBpZiAoIXRoaXMubG9hZGVkQ2h1bmtzW2N1ckNodW5rXSkge1xuICAgICAgICB0aGlzLmxvYWRlZENodW5rc1tjdXJDaHVua10gPSB0cnVlO1xuICAgICAgICArK3RoaXMubnVtQ2h1bmtzTG9hZGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YShkYXRhKSB7XG4gICAgbGV0IHBvc2l0aW9uID0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg7XG4gICAgY29uc3QgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IocG9zaXRpb24gLyB0aGlzLmNodW5rU2l6ZSk7XG4gICAgdGhpcy5ieXRlcy5zZXQobmV3IFVpbnQ4QXJyYXkoZGF0YSksIHBvc2l0aW9uKTtcbiAgICBwb3NpdGlvbiArPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSBwb3NpdGlvbjtcbiAgICBjb25zdCBlbmRDaHVuayA9IHBvc2l0aW9uID49IHRoaXMuZW5kID8gdGhpcy5udW1DaHVua3MgOiBNYXRoLmZsb29yKHBvc2l0aW9uIC8gdGhpcy5jaHVua1NpemUpO1xuXG4gICAgZm9yIChsZXQgY3VyQ2h1bmsgPSBiZWdpbkNodW5rOyBjdXJDaHVuayA8IGVuZENodW5rOyArK2N1ckNodW5rKSB7XG4gICAgICBpZiAoIXRoaXMubG9hZGVkQ2h1bmtzW2N1ckNodW5rXSkge1xuICAgICAgICB0aGlzLmxvYWRlZENodW5rc1tjdXJDaHVua10gPSB0cnVlO1xuICAgICAgICArK3RoaXMubnVtQ2h1bmtzTG9hZGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVuc3VyZUJ5dGUocG9zKSB7XG4gICAgaWYgKHBvcyA8IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSBNYXRoLmZsb29yKHBvcyAvIHRoaXMuY2h1bmtTaXplKTtcblxuICAgIGlmIChjaHVuayA9PT0gdGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5sb2FkZWRDaHVua3NbY2h1bmtdKSB7XG4gICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24ocG9zLCBwb3MgKyAxKTtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rID0gY2h1bms7XG4gIH1cblxuICBlbnN1cmVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgaWYgKGJlZ2luID49IGVuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbmQgPD0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVua1NpemUgPSB0aGlzLmNodW5rU2l6ZTtcbiAgICBjb25zdCBiZWdpbkNodW5rID0gTWF0aC5mbG9vcihiZWdpbiAvIGNodW5rU2l6ZSk7XG4gICAgY29uc3QgZW5kQ2h1bmsgPSBNYXRoLmZsb29yKChlbmQgLSAxKSAvIGNodW5rU2l6ZSkgKyAxO1xuXG4gICAgZm9yIChsZXQgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7XG4gICAgICBpZiAoIXRoaXMubG9hZGVkQ2h1bmtzW2NodW5rXSkge1xuICAgICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24oYmVnaW4sIGVuZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmV4dEVtcHR5Q2h1bmsoYmVnaW5DaHVuaykge1xuICAgIGNvbnN0IG51bUNodW5rcyA9IHRoaXMubnVtQ2h1bmtzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DaHVua3M7ICsraSkge1xuICAgICAgY29uc3QgY2h1bmsgPSAoYmVnaW5DaHVuayArIGkpICUgbnVtQ2h1bmtzO1xuXG4gICAgICBpZiAoIXRoaXMubG9hZGVkQ2h1bmtzW2NodW5rXSkge1xuICAgICAgICByZXR1cm4gY2h1bms7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBoYXNDaHVuayhjaHVuaykge1xuICAgIHJldHVybiAhIXRoaXMubG9hZGVkQ2h1bmtzW2NodW5rXTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5kIC0gdGhpcy5zdGFydDtcbiAgfVxuXG4gIGdldCBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIGdldEJ5dGUoKSB7XG4gICAgY29uc3QgcG9zID0gdGhpcy5wb3M7XG5cbiAgICBpZiAocG9zID49IHRoaXMuZW5kKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgaWYgKHBvcyA+PSB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgdGhpcy5lbnN1cmVCeXRlKHBvcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYnl0ZXNbdGhpcy5wb3MrK107XG4gIH1cblxuICBnZXRVaW50MTYoKSB7XG4gICAgY29uc3QgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICBjb25zdCBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuXG4gICAgaWYgKGIwID09PSAtMSB8fCBiMSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7XG4gIH1cblxuICBnZXRJbnQzMigpIHtcbiAgICBjb25zdCBiMCA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgIGNvbnN0IGIxID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgY29uc3QgYjIgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICBjb25zdCBiMyA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xuICB9XG5cbiAgZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICBjb25zdCBwb3MgPSB0aGlzLnBvcztcbiAgICBjb25zdCBzdHJFbmQgPSB0aGlzLmVuZDtcblxuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICBpZiAoc3RyRW5kID4gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIHN0ckVuZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YmFycmF5ID0gYnl0ZXMuc3ViYXJyYXkocG9zLCBzdHJFbmQpO1xuICAgICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgICB9XG5cbiAgICBsZXQgZW5kID0gcG9zICsgbGVuZ3RoO1xuXG4gICAgaWYgKGVuZCA+IHN0ckVuZCkge1xuICAgICAgZW5kID0gc3RyRW5kO1xuICAgIH1cblxuICAgIGlmIChlbmQgPiB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIGVuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5wb3MgPSBlbmQ7XG4gICAgY29uc3Qgc3ViYXJyYXkgPSBieXRlcy5zdWJhcnJheShwb3MsIGVuZCk7XG4gICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgfVxuXG4gIHBlZWtCeXRlKCkge1xuICAgIGNvbnN0IHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgIGlmIChwZWVrZWRCeXRlICE9PSAtMSkge1xuICAgICAgdGhpcy5wb3MtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVla2VkQnl0ZTtcbiAgfVxuXG4gIHBlZWtCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgYnl0ZXMgPSB0aGlzLmdldEJ5dGVzKGxlbmd0aCwgZm9yY2VDbGFtcGVkKTtcbiAgICB0aGlzLnBvcyAtPSBieXRlcy5sZW5ndGg7XG4gICAgcmV0dXJuIGJ5dGVzO1xuICB9XG5cbiAgZ2V0Qnl0ZVJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoYmVnaW4gPCAwKSB7XG4gICAgICBiZWdpbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGVuZCA+IHRoaXMuZW5kKSB7XG4gICAgICBlbmQgPSB0aGlzLmVuZDtcbiAgICB9XG5cbiAgICBpZiAoZW5kID4gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHRoaXMuZW5zdXJlUmFuZ2UoYmVnaW4sIGVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkoYmVnaW4sIGVuZCk7XG4gIH1cblxuICBza2lwKG4pIHtcbiAgICBpZiAoIW4pIHtcbiAgICAgIG4gPSAxO1xuICAgIH1cblxuICAgIHRoaXMucG9zICs9IG47XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gIH1cblxuICBtb3ZlU3RhcnQoKSB7XG4gICAgdGhpcy5zdGFydCA9IHRoaXMucG9zO1xuICB9XG5cbiAgbWFrZVN1YlN0cmVhbShzdGFydCwgbGVuZ3RoLCBkaWN0KSB7XG4gICAgaWYgKGxlbmd0aCkge1xuICAgICAgaWYgKHN0YXJ0ICsgbGVuZ3RoID4gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShzdGFydCwgc3RhcnQgKyBsZW5ndGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhcnQgPj0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVCeXRlKHN0YXJ0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBDaHVua2VkU3RyZWFtU3Vic3RyZWFtKCkge31cblxuICAgIENodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcblxuICAgIENodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlLmdldE1pc3NpbmdDaHVua3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaHVua1NpemUgPSB0aGlzLmNodW5rU2l6ZTtcbiAgICAgIGNvbnN0IGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKHRoaXMuc3RhcnQgLyBjaHVua1NpemUpO1xuICAgICAgY29uc3QgZW5kQ2h1bmsgPSBNYXRoLmZsb29yKCh0aGlzLmVuZCAtIDEpIC8gY2h1bmtTaXplKSArIDE7XG4gICAgICBjb25zdCBtaXNzaW5nQ2h1bmtzID0gW107XG5cbiAgICAgIGZvciAobGV0IGNodW5rID0gYmVnaW5DaHVuazsgY2h1bmsgPCBlbmRDaHVuazsgKytjaHVuaykge1xuICAgICAgICBpZiAoIXRoaXMubG9hZGVkQ2h1bmtzW2NodW5rXSkge1xuICAgICAgICAgIG1pc3NpbmdDaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1pc3NpbmdDaHVua3M7XG4gICAgfTtcblxuICAgIENodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlLmFsbENodW5rc0xvYWRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLm51bUNodW5rc0xvYWRlZCA9PT0gdGhpcy5udW1DaHVua3MpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGggPT09IDA7XG4gICAgfTtcblxuICAgIGNvbnN0IHN1YlN0cmVhbSA9IG5ldyBDaHVua2VkU3RyZWFtU3Vic3RyZWFtKCk7XG4gICAgc3ViU3RyZWFtLnBvcyA9IHN1YlN0cmVhbS5zdGFydCA9IHN0YXJ0O1xuICAgIHN1YlN0cmVhbS5lbmQgPSBzdGFydCArIGxlbmd0aCB8fCB0aGlzLmVuZDtcbiAgICBzdWJTdHJlYW0uZGljdCA9IGRpY3Q7XG4gICAgcmV0dXJuIHN1YlN0cmVhbTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ2h1bmtlZFN0cmVhbSA9IENodW5rZWRTdHJlYW07XG5cbmNsYXNzIENodW5rZWRTdHJlYW1NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IocGRmTmV0d29ya1N0cmVhbSwgYXJncykge1xuICAgIHRoaXMubGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgdGhpcy5jaHVua1NpemUgPSBhcmdzLnJhbmdlQ2h1bmtTaXplO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IENodW5rZWRTdHJlYW0odGhpcy5sZW5ndGgsIHRoaXMuY2h1bmtTaXplLCB0aGlzKTtcbiAgICB0aGlzLnBkZk5ldHdvcmtTdHJlYW0gPSBwZGZOZXR3b3JrU3RyZWFtO1xuICAgIHRoaXMuZGlzYWJsZUF1dG9GZXRjaCA9IGFyZ3MuZGlzYWJsZUF1dG9GZXRjaDtcbiAgICB0aGlzLm1zZ0hhbmRsZXIgPSBhcmdzLm1zZ0hhbmRsZXI7XG4gICAgdGhpcy5jdXJyUmVxdWVzdElkID0gMDtcbiAgICB0aGlzLmNodW5rc05lZWRlZEJ5UmVxdWVzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5yZXF1ZXN0c0J5Q2h1bmsgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMucHJvbWlzZXNCeVJlcXVlc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gMDtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICB9XG5cbiAgb25Mb2FkZWRTdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHNlbmRSZXF1ZXN0KGJlZ2luLCBlbmQpIHtcbiAgICBjb25zdCByYW5nZVJlYWRlciA9IHRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKTtcblxuICAgIGlmICghcmFuZ2VSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHtcbiAgICAgIHJhbmdlUmVhZGVyLm9uUHJvZ3Jlc3MgPSB0aGlzLm9uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBsZXQgY2h1bmtzID0gW10sXG4gICAgICAgIGxvYWRlZCA9IDA7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlYWRDaHVuayA9IGNodW5rID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWNodW5rLmRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBjaHVuay52YWx1ZTtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgbG9hZGVkICs9ICgwLCBfdXRpbC5hcnJheUJ5dGVMZW5ndGgpKGRhdGEpO1xuXG4gICAgICAgICAgICBpZiAocmFuZ2VSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICBsb2FkZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmdlUmVhZGVyLnJlYWQoKS50aGVuKHJlYWRDaHVuaywgcmVqZWN0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjaHVua0RhdGEgPSAoMCwgX3V0aWwuYXJyYXlzVG9CeXRlcykoY2h1bmtzKTtcbiAgICAgICAgICBjaHVua3MgPSBudWxsO1xuICAgICAgICAgIHJlc29sdmUoY2h1bmtEYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmFuZ2VSZWFkZXIucmVhZCgpLnRoZW4ocmVhZENodW5rLCByZWplY3QpO1xuICAgIH0pO1xuICAgIHByb21pc2UudGhlbihkYXRhID0+IHtcbiAgICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9uUmVjZWl2ZURhdGEoe1xuICAgICAgICBjaHVuazogZGF0YSxcbiAgICAgICAgYmVnaW5cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVxdWVzdEFsbENodW5rcygpIHtcbiAgICBjb25zdCBtaXNzaW5nQ2h1bmtzID0gdGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO1xuXG4gICAgdGhpcy5fcmVxdWVzdENodW5rcyhtaXNzaW5nQ2h1bmtzKTtcblxuICAgIHJldHVybiB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBfcmVxdWVzdENodW5rcyhjaHVua3MpIHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLmN1cnJSZXF1ZXN0SWQrKztcbiAgICBjb25zdCBjaHVua3NOZWVkZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuY2h1bmtzTmVlZGVkQnlSZXF1ZXN0W3JlcXVlc3RJZF0gPSBjaHVua3NOZWVkZWQ7XG5cbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgaWYgKCF0aGlzLnN0cmVhbS5oYXNDaHVuayhjaHVuaykpIHtcbiAgICAgICAgY2h1bmtzTmVlZGVkW2NodW5rXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfdXRpbC5pc0VtcHR5T2JqKShjaHVua3NOZWVkZWQpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLnByb21pc2VzQnlSZXF1ZXN0W3JlcXVlc3RJZF0gPSBjYXBhYmlsaXR5O1xuICAgIGNvbnN0IGNodW5rc1RvUmVxdWVzdCA9IFtdO1xuXG4gICAgZm9yIChsZXQgY2h1bmsgaW4gY2h1bmtzTmVlZGVkKSB7XG4gICAgICBjaHVuayA9IGNodW5rIHwgMDtcblxuICAgICAgaWYgKCEoY2h1bmsgaW4gdGhpcy5yZXF1ZXN0c0J5Q2h1bmspKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdHNCeUNodW5rW2NodW5rXSA9IFtdO1xuICAgICAgICBjaHVua3NUb1JlcXVlc3QucHVzaChjaHVuayk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVxdWVzdHNCeUNodW5rW2NodW5rXS5wdXNoKHJlcXVlc3RJZCk7XG4gICAgfVxuXG4gICAgaWYgKCFjaHVua3NUb1JlcXVlc3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwZWRDaHVua3NUb1JlcXVlc3QgPSB0aGlzLmdyb3VwQ2h1bmtzKGNodW5rc1RvUmVxdWVzdCk7XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwZWRDaHVuayBvZiBncm91cGVkQ2h1bmtzVG9SZXF1ZXN0KSB7XG4gICAgICBjb25zdCBiZWdpbiA9IGdyb3VwZWRDaHVuay5iZWdpbkNodW5rICogdGhpcy5jaHVua1NpemU7XG4gICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihncm91cGVkQ2h1bmsuZW5kQ2h1bmsgKiB0aGlzLmNodW5rU2l6ZSwgdGhpcy5sZW5ndGgpO1xuICAgICAgdGhpcy5zZW5kUmVxdWVzdChiZWdpbiwgZW5kKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgZ2V0U3RyZWFtKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmVhbTtcbiAgfVxuXG4gIHJlcXVlc3RSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgZW5kID0gTWF0aC5taW4oZW5kLCB0aGlzLmxlbmd0aCk7XG4gICAgY29uc3QgYmVnaW5DaHVuayA9IHRoaXMuZ2V0QmVnaW5DaHVuayhiZWdpbik7XG4gICAgY29uc3QgZW5kQ2h1bmsgPSB0aGlzLmdldEVuZENodW5rKGVuZCk7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG5cbiAgICBmb3IgKGxldCBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHtcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdENodW5rcyhjaHVua3MpO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlcyhyYW5nZXMgPSBbXSkge1xuICAgIGNvbnN0IGNodW5rc1RvUmVxdWVzdCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByYW5nZSBvZiByYW5nZXMpIHtcbiAgICAgIGNvbnN0IGJlZ2luQ2h1bmsgPSB0aGlzLmdldEJlZ2luQ2h1bmsocmFuZ2UuYmVnaW4pO1xuICAgICAgY29uc3QgZW5kQ2h1bmsgPSB0aGlzLmdldEVuZENodW5rKHJhbmdlLmVuZCk7XG5cbiAgICAgIGZvciAobGV0IGNodW5rID0gYmVnaW5DaHVuazsgY2h1bmsgPCBlbmRDaHVuazsgKytjaHVuaykge1xuICAgICAgICBpZiAoIWNodW5rc1RvUmVxdWVzdC5pbmNsdWRlcyhjaHVuaykpIHtcbiAgICAgICAgICBjaHVua3NUb1JlcXVlc3QucHVzaChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaHVua3NUb1JlcXVlc3Quc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGNodW5rc1RvUmVxdWVzdCk7XG4gIH1cblxuICBncm91cENodW5rcyhjaHVua3MpIHtcbiAgICBjb25zdCBncm91cGVkQ2h1bmtzID0gW107XG4gICAgbGV0IGJlZ2luQ2h1bmsgPSAtMTtcbiAgICBsZXQgcHJldkNodW5rID0gLTE7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjaHVua3MubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBjaHVua3NbaV07XG5cbiAgICAgIGlmIChiZWdpbkNodW5rIDwgMCkge1xuICAgICAgICBiZWdpbkNodW5rID0gY2h1bms7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2Q2h1bmsgPj0gMCAmJiBwcmV2Q2h1bmsgKyAxICE9PSBjaHVuaykge1xuICAgICAgICBncm91cGVkQ2h1bmtzLnB1c2goe1xuICAgICAgICAgIGJlZ2luQ2h1bmssXG4gICAgICAgICAgZW5kQ2h1bms6IHByZXZDaHVuayArIDFcbiAgICAgICAgfSk7XG4gICAgICAgIGJlZ2luQ2h1bmsgPSBjaHVuaztcbiAgICAgIH1cblxuICAgICAgaWYgKGkgKyAxID09PSBjaHVua3MubGVuZ3RoKSB7XG4gICAgICAgIGdyb3VwZWRDaHVua3MucHVzaCh7XG4gICAgICAgICAgYmVnaW5DaHVuayxcbiAgICAgICAgICBlbmRDaHVuazogY2h1bmsgKyAxXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBwcmV2Q2h1bmsgPSBjaHVuaztcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBlZENodW5rcztcbiAgfVxuXG4gIG9uUHJvZ3Jlc3MoYXJncykge1xuICAgIHRoaXMubXNnSGFuZGxlci5zZW5kKFwiRG9jUHJvZ3Jlc3NcIiwge1xuICAgICAgbG9hZGVkOiB0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQgKiB0aGlzLmNodW5rU2l6ZSArIGFyZ3MubG9hZGVkLFxuICAgICAgdG90YWw6IHRoaXMubGVuZ3RoXG4gICAgfSk7XG4gIH1cblxuICBvblJlY2VpdmVEYXRhKGFyZ3MpIHtcbiAgICBjb25zdCBjaHVuayA9IGFyZ3MuY2h1bms7XG4gICAgY29uc3QgaXNQcm9ncmVzc2l2ZSA9IGFyZ3MuYmVnaW4gPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBiZWdpbiA9IGlzUHJvZ3Jlc3NpdmUgPyB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCA6IGFyZ3MuYmVnaW47XG4gICAgY29uc3QgZW5kID0gYmVnaW4gKyBjaHVuay5ieXRlTGVuZ3RoO1xuICAgIGNvbnN0IGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKGJlZ2luIC8gdGhpcy5jaHVua1NpemUpO1xuICAgIGNvbnN0IGVuZENodW5rID0gZW5kIDwgdGhpcy5sZW5ndGggPyBNYXRoLmZsb29yKGVuZCAvIHRoaXMuY2h1bmtTaXplKSA6IE1hdGguY2VpbChlbmQgLyB0aGlzLmNodW5rU2l6ZSk7XG5cbiAgICBpZiAoaXNQcm9ncmVzc2l2ZSkge1xuICAgICAgdGhpcy5zdHJlYW0ub25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKTtcbiAgICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0cmVhbS5vblJlY2VpdmVEYXRhKGJlZ2luLCBjaHVuayk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RyZWFtLmFsbENodW5rc0xvYWRlZCgpKSB7XG4gICAgICB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlc29sdmUodGhpcy5zdHJlYW0pO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlZFJlcXVlc3RzID0gW107XG5cbiAgICBmb3IgKGxldCBjdXJDaHVuayA9IGJlZ2luQ2h1bms7IGN1ckNodW5rIDwgZW5kQ2h1bms7ICsrY3VyQ2h1bmspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZHMgPSB0aGlzLnJlcXVlc3RzQnlDaHVua1tjdXJDaHVua10gfHwgW107XG4gICAgICBkZWxldGUgdGhpcy5yZXF1ZXN0c0J5Q2h1bmtbY3VyQ2h1bmtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RJZCBvZiByZXF1ZXN0SWRzKSB7XG4gICAgICAgIGNvbnN0IGNodW5rc05lZWRlZCA9IHRoaXMuY2h1bmtzTmVlZGVkQnlSZXF1ZXN0W3JlcXVlc3RJZF07XG5cbiAgICAgICAgaWYgKGN1ckNodW5rIGluIGNodW5rc05lZWRlZCkge1xuICAgICAgICAgIGRlbGV0ZSBjaHVua3NOZWVkZWRbY3VyQ2h1bmtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoMCwgX3V0aWwuaXNFbXB0eU9iaikoY2h1bmtzTmVlZGVkKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9hZGVkUmVxdWVzdHMucHVzaChyZXF1ZXN0SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5kaXNhYmxlQXV0b0ZldGNoICYmICgwLCBfdXRpbC5pc0VtcHR5T2JqKSh0aGlzLnJlcXVlc3RzQnlDaHVuaykpIHtcbiAgICAgIGxldCBuZXh0RW1wdHlDaHVuaztcblxuICAgICAgaWYgKHRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCA9PT0gMSkge1xuICAgICAgICBjb25zdCBsYXN0Q2h1bmsgPSB0aGlzLnN0cmVhbS5udW1DaHVua3MgLSAxO1xuXG4gICAgICAgIGlmICghdGhpcy5zdHJlYW0uaGFzQ2h1bmsobGFzdENodW5rKSkge1xuICAgICAgICAgIG5leHRFbXB0eUNodW5rID0gbGFzdENodW5rO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0RW1wdHlDaHVuayA9IHRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKGVuZENodW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIobmV4dEVtcHR5Q2h1bmspKSB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RDaHVua3MoW25leHRFbXB0eUNodW5rXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0SWQgb2YgbG9hZGVkUmVxdWVzdHMpIHtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLnByb21pc2VzQnlSZXF1ZXN0W3JlcXVlc3RJZF07XG4gICAgICBkZWxldGUgdGhpcy5wcm9taXNlc0J5UmVxdWVzdFtyZXF1ZXN0SWRdO1xuICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tc2dIYW5kbGVyLnNlbmQoXCJEb2NQcm9ncmVzc1wiLCB7XG4gICAgICBsb2FkZWQ6IHRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCAqIHRoaXMuY2h1bmtTaXplLFxuICAgICAgdG90YWw6IHRoaXMubGVuZ3RoXG4gICAgfSk7XG4gIH1cblxuICBvbkVycm9yKGVycikge1xuICAgIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGVycik7XG4gIH1cblxuICBnZXRCZWdpbkNodW5rKGJlZ2luKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7XG4gIH1cblxuICBnZXRFbmRDaHVuayhlbmQpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoZW5kIC0gMSkgLyB0aGlzLmNodW5rU2l6ZSkgKyAxO1xuICB9XG5cbiAgYWJvcnQocmVhc29uKSB7XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnBkZk5ldHdvcmtTdHJlYW0pIHtcbiAgICAgIHRoaXMucGRmTmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVxdWVzdElkIGluIHRoaXMucHJvbWlzZXNCeVJlcXVlc3QpIHtcbiAgICAgIHRoaXMucHJvbWlzZXNCeVJlcXVlc3RbcmVxdWVzdElkXS5yZWplY3QocmVhc29uKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkNodW5rZWRTdHJlYW1NYW5hZ2VyID0gQ2h1bmtlZFN0cmVhbU1hbmFnZXI7XG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRMb29rdXBUYWJsZUZhY3RvcnkgPSBnZXRMb29rdXBUYWJsZUZhY3Rvcnk7XG5leHBvcnRzLmdldEluaGVyaXRhYmxlUHJvcGVydHkgPSBnZXRJbmhlcml0YWJsZVByb3BlcnR5O1xuZXhwb3J0cy50b1JvbWFuTnVtZXJhbHMgPSB0b1JvbWFuTnVtZXJhbHM7XG5leHBvcnRzLmxvZzIgPSBsb2cyO1xuZXhwb3J0cy5yZWFkSW50OCA9IHJlYWRJbnQ4O1xuZXhwb3J0cy5yZWFkVWludDE2ID0gcmVhZFVpbnQxNjtcbmV4cG9ydHMucmVhZFVpbnQzMiA9IHJlYWRVaW50MzI7XG5leHBvcnRzLmlzV2hpdGVTcGFjZSA9IGlzV2hpdGVTcGFjZTtcbmV4cG9ydHMuWFJlZlBhcnNlRXhjZXB0aW9uID0gZXhwb3J0cy5YUmVmRW50cnlFeGNlcHRpb24gPSBleHBvcnRzLk1pc3NpbmdEYXRhRXhjZXB0aW9uID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5mdW5jdGlvbiBnZXRMb29rdXBUYWJsZUZhY3RvcnkoaW5pdGlhbGl6ZXIpIHtcbiAgbGV0IGxvb2t1cDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaW5pdGlhbGl6ZXIpIHtcbiAgICAgIGxvb2t1cCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBpbml0aWFsaXplcihsb29rdXApO1xuICAgICAgaW5pdGlhbGl6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBsb29rdXA7XG4gIH07XG59XG5cbmNsYXNzIE1pc3NpbmdEYXRhRXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGJlZ2luLCBlbmQpIHtcbiAgICBzdXBlcihgTWlzc2luZyBkYXRhIFske2JlZ2lufSwgJHtlbmR9KWApO1xuICAgIHRoaXMuYmVnaW4gPSBiZWdpbjtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTWlzc2luZ0RhdGFFeGNlcHRpb24gPSBNaXNzaW5nRGF0YUV4Y2VwdGlvbjtcblxuY2xhc3MgWFJlZkVudHJ5RXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7fVxuXG5leHBvcnRzLlhSZWZFbnRyeUV4Y2VwdGlvbiA9IFhSZWZFbnRyeUV4Y2VwdGlvbjtcblxuY2xhc3MgWFJlZlBhcnNlRXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7fVxuXG5leHBvcnRzLlhSZWZQYXJzZUV4Y2VwdGlvbiA9IFhSZWZQYXJzZUV4Y2VwdGlvbjtcblxuZnVuY3Rpb24gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7XG4gIGRpY3QsXG4gIGtleSxcbiAgZ2V0QXJyYXkgPSBmYWxzZSxcbiAgc3RvcFdoZW5Gb3VuZCA9IHRydWVcbn0pIHtcbiAgY29uc3QgTE9PUF9MSU1JVCA9IDEwMDtcbiAgbGV0IGxvb3BDb3VudCA9IDA7XG4gIGxldCB2YWx1ZXM7XG5cbiAgd2hpbGUgKGRpY3QpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEFycmF5ID8gZGljdC5nZXRBcnJheShrZXkpIDogZGljdC5nZXQoa2V5KTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoc3RvcFdoZW5Gb3VuZCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCsrbG9vcENvdW50ID4gTE9PUF9MSU1JVCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRJbmhlcml0YWJsZVByb3BlcnR5OiBtYXhpbXVtIGxvb3AgY291bnQgZXhjZWVkZWQgZm9yIFwiJHtrZXl9XCJgKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRpY3QgPSBkaWN0LmdldChcIlBhcmVudFwiKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmNvbnN0IFJPTUFOX05VTUJFUl9NQVAgPSBbXCJcIiwgXCJDXCIsIFwiQ0NcIiwgXCJDQ0NcIiwgXCJDRFwiLCBcIkRcIiwgXCJEQ1wiLCBcIkRDQ1wiLCBcIkRDQ0NcIiwgXCJDTVwiLCBcIlwiLCBcIlhcIiwgXCJYWFwiLCBcIlhYWFwiLCBcIlhMXCIsIFwiTFwiLCBcIkxYXCIsIFwiTFhYXCIsIFwiTFhYWFwiLCBcIlhDXCIsIFwiXCIsIFwiSVwiLCBcIklJXCIsIFwiSUlJXCIsIFwiSVZcIiwgXCJWXCIsIFwiVklcIiwgXCJWSUlcIiwgXCJWSUlJXCIsIFwiSVhcIl07XG5cbmZ1bmN0aW9uIHRvUm9tYW5OdW1lcmFscyhudW1iZXIsIGxvd2VyQ2FzZSA9IGZhbHNlKSB7XG4gICgwLCBfdXRpbC5hc3NlcnQpKE51bWJlci5pc0ludGVnZXIobnVtYmVyKSAmJiBudW1iZXIgPiAwLCBcIlRoZSBudW1iZXIgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci5cIik7XG4gIGNvbnN0IHJvbWFuQnVmID0gW107XG4gIGxldCBwb3M7XG5cbiAgd2hpbGUgKG51bWJlciA+PSAxMDAwKSB7XG4gICAgbnVtYmVyIC09IDEwMDA7XG4gICAgcm9tYW5CdWYucHVzaChcIk1cIik7XG4gIH1cblxuICBwb3MgPSBudW1iZXIgLyAxMDAgfCAwO1xuICBudW1iZXIgJT0gMTAwO1xuICByb21hbkJ1Zi5wdXNoKFJPTUFOX05VTUJFUl9NQVBbcG9zXSk7XG4gIHBvcyA9IG51bWJlciAvIDEwIHwgMDtcbiAgbnVtYmVyICU9IDEwO1xuICByb21hbkJ1Zi5wdXNoKFJPTUFOX05VTUJFUl9NQVBbMTAgKyBwb3NdKTtcbiAgcm9tYW5CdWYucHVzaChST01BTl9OVU1CRVJfTUFQWzIwICsgbnVtYmVyXSk7XG4gIGNvbnN0IHJvbWFuU3RyID0gcm9tYW5CdWYuam9pbihcIlwiKTtcbiAgcmV0dXJuIGxvd2VyQ2FzZSA/IHJvbWFuU3RyLnRvTG93ZXJDYXNlKCkgOiByb21hblN0cjtcbn1cblxuZnVuY3Rpb24gbG9nMih4KSB7XG4gIGlmICh4IDw9IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmNlaWwoTWF0aC5sb2cyKHgpKTtcbn1cblxuZnVuY3Rpb24gcmVhZEludDgoZGF0YSwgb2Zmc2V0KSB7XG4gIHJldHVybiBkYXRhW29mZnNldF0gPDwgMjQgPj4gMjQ7XG59XG5cbmZ1bmN0aW9uIHJlYWRVaW50MTYoZGF0YSwgb2Zmc2V0KSB7XG4gIHJldHVybiBkYXRhW29mZnNldF0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgMV07XG59XG5cbmZ1bmN0aW9uIHJlYWRVaW50MzIoZGF0YSwgb2Zmc2V0KSB7XG4gIHJldHVybiAoZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM10pID4+PiAwO1xufVxuXG5mdW5jdGlvbiBpc1doaXRlU3BhY2UoY2gpIHtcbiAgcmV0dXJuIGNoID09PSAweDIwIHx8IGNoID09PSAweDA5IHx8IGNoID09PSAweDBkIHx8IGNoID09PSAweDBhO1xufVxuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUERGRG9jdW1lbnQgPSBleHBvcnRzLlBhZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfb2JqID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfYW5ub3RhdGlvbiA9IF9fd19wZGZqc19yZXF1aXJlX18oMjUpO1xuXG52YXIgX2NyeXB0byA9IF9fd19wZGZqc19yZXF1aXJlX18oMjIpO1xuXG52YXIgX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMTEpO1xuXG52YXIgX29wZXJhdG9yX2xpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI2KTtcblxudmFyIF9ldmFsdWF0b3IgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI3KTtcblxudmFyIF9mdW5jdGlvbiA9IF9fd19wZGZqc19yZXF1aXJlX18oNDEpO1xuXG5jb25zdCBERUZBVUxUX1VTRVJfVU5JVCA9IDEuMDtcbmNvbnN0IExFVFRFUl9TSVpFX01FRElBQk9YID0gWzAsIDAsIDYxMiwgNzkyXTtcblxuZnVuY3Rpb24gaXNBbm5vdGF0aW9uUmVuZGVyYWJsZShhbm5vdGF0aW9uLCBpbnRlbnQpIHtcbiAgcmV0dXJuIGludGVudCA9PT0gXCJkaXNwbGF5XCIgJiYgYW5ub3RhdGlvbi52aWV3YWJsZSB8fCBpbnRlbnQgPT09IFwicHJpbnRcIiAmJiBhbm5vdGF0aW9uLnByaW50YWJsZTtcbn1cblxuY2xhc3MgUGFnZSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBwZGZNYW5hZ2VyLFxuICAgIHhyZWYsXG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VEaWN0LFxuICAgIHJlZixcbiAgICBmb250Q2FjaGUsXG4gICAgYnVpbHRJbkNNYXBDYWNoZSxcbiAgICBnbG9iYWxJbWFnZUNhY2hlLFxuICAgIHBkZkZ1bmN0aW9uRmFjdG9yeVxuICB9KSB7XG4gICAgdGhpcy5wZGZNYW5hZ2VyID0gcGRmTWFuYWdlcjtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICB0aGlzLnBhZ2VEaWN0ID0gcGFnZURpY3Q7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLnJlZiA9IHJlZjtcbiAgICB0aGlzLmZvbnRDYWNoZSA9IGZvbnRDYWNoZTtcbiAgICB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUgPSBidWlsdEluQ01hcENhY2hlO1xuICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSA9IGdsb2JhbEltYWdlQ2FjaGU7XG4gICAgdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkgPSBwZGZGdW5jdGlvbkZhY3Rvcnk7XG4gICAgdGhpcy5ldmFsdWF0b3JPcHRpb25zID0gcGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zO1xuICAgIHRoaXMucmVzb3VyY2VzUHJvbWlzZSA9IG51bGw7XG4gICAgY29uc3QgaWRDb3VudGVycyA9IHtcbiAgICAgIG9iajogMFxuICAgIH07XG4gICAgdGhpcy5pZEZhY3RvcnkgPSB7XG4gICAgICBjcmVhdGVPYmpJZCgpIHtcbiAgICAgICAgcmV0dXJuIGBwJHtwYWdlSW5kZXh9XyR7KytpZENvdW50ZXJzLm9ian1gO1xuICAgICAgfSxcblxuICAgICAgZ2V0RG9jSWQoKSB7XG4gICAgICAgIHJldHVybiBgZ18ke3BkZk1hbmFnZXIuZG9jSWR9YDtcbiAgICAgIH1cblxuICAgIH07XG4gIH1cblxuICBfZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eShrZXksIGdldEFycmF5ID0gZmFsc2UpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0OiB0aGlzLnBhZ2VEaWN0LFxuICAgICAga2V5LFxuICAgICAgZ2V0QXJyYXksXG4gICAgICBzdG9wV2hlbkZvdW5kOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEgfHwgISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHZhbHVlWzBdKSkge1xuICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBfcHJpbWl0aXZlcy5EaWN0Lm1lcmdlKHRoaXMueHJlZiwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZURpY3QuZ2V0KFwiQ29udGVudHNcIik7XG4gIH1cblxuICBnZXQgcmVzb3VyY2VzKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInJlc291cmNlc1wiLCB0aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KFwiUmVzb3VyY2VzXCIpIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHkpO1xuICB9XG5cbiAgX2dldEJvdW5kaW5nQm94KG5hbWUpIHtcbiAgICBjb25zdCBib3ggPSB0aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KG5hbWUsIHRydWUpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYm94KSAmJiBib3gubGVuZ3RoID09PSA0KSB7XG4gICAgICBpZiAoYm94WzJdIC0gYm94WzBdICE9PSAwICYmIGJveFszXSAtIGJveFsxXSAhPT0gMCkge1xuICAgICAgICByZXR1cm4gYm94O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYEVtcHR5IC8ke25hbWV9IGVudHJ5LmApO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG1lZGlhQm94KCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm1lZGlhQm94XCIsIHRoaXMuX2dldEJvdW5kaW5nQm94KFwiTWVkaWFCb3hcIikgfHwgTEVUVEVSX1NJWkVfTUVESUFCT1gpO1xuICB9XG5cbiAgZ2V0IGNyb3BCb3goKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiY3JvcEJveFwiLCB0aGlzLl9nZXRCb3VuZGluZ0JveChcIkNyb3BCb3hcIikgfHwgdGhpcy5tZWRpYUJveCk7XG4gIH1cblxuICBnZXQgdXNlclVuaXQoKSB7XG4gICAgbGV0IG9iaiA9IHRoaXMucGFnZURpY3QuZ2V0KFwiVXNlclVuaXRcIik7XG5cbiAgICBpZiAoISgwLCBfdXRpbC5pc051bSkob2JqKSB8fCBvYmogPD0gMCkge1xuICAgICAgb2JqID0gREVGQVVMVF9VU0VSX1VOSVQ7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwidXNlclVuaXRcIiwgb2JqKTtcbiAgfVxuXG4gIGdldCB2aWV3KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNyb3BCb3gsXG4gICAgICBtZWRpYUJveFxuICAgIH0gPSB0aGlzO1xuICAgIGxldCB2aWV3O1xuXG4gICAgaWYgKGNyb3BCb3ggPT09IG1lZGlhQm94IHx8ICgwLCBfdXRpbC5pc0FycmF5RXF1YWwpKGNyb3BCb3gsIG1lZGlhQm94KSkge1xuICAgICAgdmlldyA9IG1lZGlhQm94O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib3ggPSBfdXRpbC5VdGlsLmludGVyc2VjdChjcm9wQm94LCBtZWRpYUJveCk7XG5cbiAgICAgIGlmIChib3ggJiYgYm94WzJdIC0gYm94WzBdICE9PSAwICYmIGJveFszXSAtIGJveFsxXSAhPT0gMCkge1xuICAgICAgICB2aWV3ID0gYm94O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiRW1wdHkgL0Nyb3BCb3ggYW5kIC9NZWRpYUJveCBpbnRlcnNlY3Rpb24uXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInZpZXdcIiwgdmlldyB8fCBtZWRpYUJveCk7XG4gIH1cblxuICBnZXQgcm90YXRlKCkge1xuICAgIGxldCByb3RhdGUgPSB0aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KFwiUm90YXRlXCIpIHx8IDA7XG5cbiAgICBpZiAocm90YXRlICUgOTAgIT09IDApIHtcbiAgICAgIHJvdGF0ZSA9IDA7XG4gICAgfSBlbHNlIGlmIChyb3RhdGUgPj0gMzYwKSB7XG4gICAgICByb3RhdGUgPSByb3RhdGUgJSAzNjA7XG4gICAgfSBlbHNlIGlmIChyb3RhdGUgPCAwKSB7XG4gICAgICByb3RhdGUgPSAocm90YXRlICUgMzYwICsgMzYwKSAlIDM2MDtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJyb3RhdGVcIiwgcm90YXRlKTtcbiAgfVxuXG4gIGdldENvbnRlbnRTdHJlYW0oKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudDtcbiAgICBsZXQgc3RyZWFtO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29udGVudCkpIHtcbiAgICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgICBjb25zdCBzdHJlYW1zID0gW107XG5cbiAgICAgIGZvciAoY29uc3Qgc3ViU3RyZWFtIG9mIGNvbnRlbnQpIHtcbiAgICAgICAgc3RyZWFtcy5wdXNoKHhyZWYuZmV0Y2hJZlJlZihzdWJTdHJlYW0pKTtcbiAgICAgIH1cblxuICAgICAgc3RyZWFtID0gbmV3IF9zdHJlYW0uU3RyZWFtc1NlcXVlbmNlU3RyZWFtKHN0cmVhbXMpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShjb250ZW50KSkge1xuICAgICAgc3RyZWFtID0gY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtID0gbmV3IF9zdHJlYW0uTnVsbFN0cmVhbSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBsb2FkUmVzb3VyY2VzKGtleXMpIHtcbiAgICBpZiAoIXRoaXMucmVzb3VyY2VzUHJvbWlzZSkge1xuICAgICAgdGhpcy5yZXNvdXJjZXNQcm9taXNlID0gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCBcInJlc291cmNlc1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXNQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0TG9hZGVyID0gbmV3IF9vYmouT2JqZWN0TG9hZGVyKHRoaXMucmVzb3VyY2VzLCBrZXlzLCB0aGlzLnhyZWYpO1xuICAgICAgcmV0dXJuIG9iamVjdExvYWRlci5sb2FkKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3Qoe1xuICAgIGhhbmRsZXIsXG4gICAgc2luayxcbiAgICB0YXNrLFxuICAgIGludGVudCxcbiAgICByZW5kZXJJbnRlcmFjdGl2ZUZvcm1zXG4gIH0pIHtcbiAgICBjb25zdCBjb250ZW50U3RyZWFtUHJvbWlzZSA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywgXCJnZXRDb250ZW50U3RyZWFtXCIpO1xuICAgIGNvbnN0IHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoW1wiRXh0R1N0YXRlXCIsIFwiQ29sb3JTcGFjZVwiLCBcIlBhdHRlcm5cIiwgXCJTaGFkaW5nXCIsIFwiWE9iamVjdFwiLCBcIkZvbnRcIl0pO1xuICAgIGNvbnN0IHBhcnRpYWxFdmFsdWF0b3IgPSBuZXcgX2V2YWx1YXRvci5QYXJ0aWFsRXZhbHVhdG9yKHtcbiAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgIGhhbmRsZXIsXG4gICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgaWRGYWN0b3J5OiB0aGlzLmlkRmFjdG9yeSxcbiAgICAgIGZvbnRDYWNoZTogdGhpcy5mb250Q2FjaGUsXG4gICAgICBidWlsdEluQ01hcENhY2hlOiB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICBnbG9iYWxJbWFnZUNhY2hlOiB0aGlzLmdsb2JhbEltYWdlQ2FjaGUsXG4gICAgICBvcHRpb25zOiB0aGlzLmV2YWx1YXRvck9wdGlvbnMsXG4gICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5XG4gICAgfSk7XG4gICAgY29uc3QgZGF0YVByb21pc2VzID0gUHJvbWlzZS5hbGwoW2NvbnRlbnRTdHJlYW1Qcm9taXNlLCByZXNvdXJjZXNQcm9taXNlXSk7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9taXNlID0gZGF0YVByb21pc2VzLnRoZW4oKFtjb250ZW50U3RyZWFtXSkgPT4ge1xuICAgICAgY29uc3Qgb3BMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdChpbnRlbnQsIHNpbmssIHRoaXMucGFnZUluZGV4KTtcbiAgICAgIGhhbmRsZXIuc2VuZChcIlN0YXJ0UmVuZGVyUGFnZVwiLCB7XG4gICAgICAgIHRyYW5zcGFyZW5jeTogcGFydGlhbEV2YWx1YXRvci5oYXNCbGVuZE1vZGVzKHRoaXMucmVzb3VyY2VzKSxcbiAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgICAgaW50ZW50XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXJ0aWFsRXZhbHVhdG9yLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgIHN0cmVhbTogY29udGVudFN0cmVhbSxcbiAgICAgICAgdGFzayxcbiAgICAgICAgcmVzb3VyY2VzOiB0aGlzLnJlc291cmNlcyxcbiAgICAgICAgb3BlcmF0b3JMaXN0OiBvcExpc3RcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3BMaXN0O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtwYWdlTGlzdFByb21pc2UsIHRoaXMuX3BhcnNlZEFubm90YXRpb25zXSkudGhlbihmdW5jdGlvbiAoW3BhZ2VPcExpc3QsIGFubm90YXRpb25zXSkge1xuICAgICAgaWYgKGFubm90YXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBwYWdlT3BMaXN0LmZsdXNoKHRydWUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxlbmd0aDogcGFnZU9wTGlzdC50b3RhbExlbmd0aFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvcExpc3RQcm9taXNlcyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFubm90YXRpb24gb2YgYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgaWYgKGlzQW5ub3RhdGlvblJlbmRlcmFibGUoYW5ub3RhdGlvbiwgaW50ZW50KSkge1xuICAgICAgICAgIG9wTGlzdFByb21pc2VzLnB1c2goYW5ub3RhdGlvbi5nZXRPcGVyYXRvckxpc3QocGFydGlhbEV2YWx1YXRvciwgdGFzaywgcmVuZGVySW50ZXJhY3RpdmVGb3JtcykuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyBcIiArIGBcIiR7dGFzay5uYW1lfVwiIHRhc2s6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG9wTGlzdFByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChvcExpc3RzKSB7XG4gICAgICAgIHBhZ2VPcExpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luQW5ub3RhdGlvbnMsIFtdKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9wTGlzdCBvZiBvcExpc3RzKSB7XG4gICAgICAgICAgcGFnZU9wTGlzdC5hZGRPcExpc3Qob3BMaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhZ2VPcExpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZEFubm90YXRpb25zLCBbXSk7XG4gICAgICAgIHBhZ2VPcExpc3QuZmx1c2godHJ1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGVuZ3RoOiBwYWdlT3BMaXN0LnRvdGFsTGVuZ3RoXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4dHJhY3RUZXh0Q29udGVudCh7XG4gICAgaGFuZGxlcixcbiAgICB0YXNrLFxuICAgIG5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgc2luayxcbiAgICBjb21iaW5lVGV4dEl0ZW1zXG4gIH0pIHtcbiAgICBjb25zdCBjb250ZW50U3RyZWFtUHJvbWlzZSA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywgXCJnZXRDb250ZW50U3RyZWFtXCIpO1xuICAgIGNvbnN0IHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoW1wiRXh0R1N0YXRlXCIsIFwiWE9iamVjdFwiLCBcIkZvbnRcIl0pO1xuICAgIGNvbnN0IGRhdGFQcm9taXNlcyA9IFByb21pc2UuYWxsKFtjb250ZW50U3RyZWFtUHJvbWlzZSwgcmVzb3VyY2VzUHJvbWlzZV0pO1xuICAgIHJldHVybiBkYXRhUHJvbWlzZXMudGhlbigoW2NvbnRlbnRTdHJlYW1dKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IF9ldmFsdWF0b3IuUGFydGlhbEV2YWx1YXRvcih7XG4gICAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgICAgaGFuZGxlcixcbiAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgICAgaWRGYWN0b3J5OiB0aGlzLmlkRmFjdG9yeSxcbiAgICAgICAgZm9udENhY2hlOiB0aGlzLmZvbnRDYWNoZSxcbiAgICAgICAgYnVpbHRJbkNNYXBDYWNoZTogdGhpcy5idWlsdEluQ01hcENhY2hlLFxuICAgICAgICBnbG9iYWxJbWFnZUNhY2hlOiB0aGlzLmdsb2JhbEltYWdlQ2FjaGUsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZXZhbHVhdG9yT3B0aW9ucyxcbiAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5OiB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcGFydGlhbEV2YWx1YXRvci5nZXRUZXh0Q29udGVudCh7XG4gICAgICAgIHN0cmVhbTogY29udGVudFN0cmVhbSxcbiAgICAgICAgdGFzayxcbiAgICAgICAgcmVzb3VyY2VzOiB0aGlzLnJlc291cmNlcyxcbiAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZSxcbiAgICAgICAgY29tYmluZVRleHRJdGVtcyxcbiAgICAgICAgc2lua1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uc0RhdGEoaW50ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oZnVuY3Rpb24gKGFubm90YXRpb25zKSB7XG4gICAgICBjb25zdCBhbm5vdGF0aW9uc0RhdGEgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYW5ub3RhdGlvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBpZiAoIWludGVudCB8fCBpc0Fubm90YXRpb25SZW5kZXJhYmxlKGFubm90YXRpb25zW2ldLCBpbnRlbnQpKSB7XG4gICAgICAgICAgYW5ub3RhdGlvbnNEYXRhLnB1c2goYW5ub3RhdGlvbnNbaV0uZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFubm90YXRpb25zRGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBhbm5vdGF0aW9ucygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJhbm5vdGF0aW9uc1wiLCB0aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KFwiQW5ub3RzXCIpIHx8IFtdKTtcbiAgfVxuXG4gIGdldCBfcGFyc2VkQW5ub3RhdGlvbnMoKSB7XG4gICAgY29uc3QgcGFyc2VkQW5ub3RhdGlvbnMgPSB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsIFwiYW5ub3RhdGlvbnNcIikudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBhbm5vdGF0aW9uUHJvbWlzZXMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhbm5vdGF0aW9uUmVmIG9mIHRoaXMuYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgYW5ub3RhdGlvblByb21pc2VzLnB1c2goX2Fubm90YXRpb24uQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlKHRoaXMueHJlZiwgYW5ub3RhdGlvblJlZiwgdGhpcy5wZGZNYW5hZ2VyLCB0aGlzLmlkRmFjdG9yeSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgX3BhcnNlZEFubm90YXRpb25zOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChhbm5vdGF0aW9uUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKGFubm90YXRpb25zKSB7XG4gICAgICAgIHJldHVybiBhbm5vdGF0aW9ucy5maWx0ZXIoYW5ub3RhdGlvbiA9PiAhIWFubm90YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiX3BhcnNlZEFubm90YXRpb25zXCIsIHBhcnNlZEFubm90YXRpb25zKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUGFnZSA9IFBhZ2U7XG5jb25zdCBQREZfSEVBREVSX1NJR05BVFVSRSA9IG5ldyBVaW50OEFycmF5KFsweDI1LCAweDUwLCAweDQ0LCAweDQ2LCAweDJkXSk7XG5jb25zdCBTVEFSVFhSRUZfU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoWzB4NzMsIDB4NzQsIDB4NjEsIDB4NzIsIDB4NzQsIDB4NzgsIDB4NzIsIDB4NjUsIDB4NjZdKTtcbmNvbnN0IEVORE9CSl9TSUdOQVRVUkUgPSBuZXcgVWludDhBcnJheShbMHg2NSwgMHg2ZSwgMHg2NCwgMHg2ZiwgMHg2MiwgMHg2YV0pO1xuY29uc3QgRklOR0VSUFJJTlRfRklSU1RfQllURVMgPSAxMDI0O1xuY29uc3QgRU1QVFlfRklOR0VSUFJJTlQgPSBcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXCI7XG5jb25zdCBQREZfSEVBREVSX1ZFUlNJT05fUkVHRVhQID0gL15bMS05XVxcLlswLTldJC87XG5cbmZ1bmN0aW9uIGZpbmQoc3RyZWFtLCBzaWduYXR1cmUsIGxpbWl0ID0gMTAyNCwgYmFja3dhcmRzID0gZmFsc2UpIHtcbiAgY29uc3Qgc2lnbmF0dXJlTGVuZ3RoID0gc2lnbmF0dXJlLmxlbmd0aDtcbiAgY29uc3Qgc2NhbkJ5dGVzID0gc3RyZWFtLnBlZWtCeXRlcyhsaW1pdCk7XG4gIGNvbnN0IHNjYW5MZW5ndGggPSBzY2FuQnl0ZXMubGVuZ3RoIC0gc2lnbmF0dXJlTGVuZ3RoO1xuXG4gIGlmIChzY2FuTGVuZ3RoIDw9IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYmFja3dhcmRzKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlRW5kID0gc2lnbmF0dXJlTGVuZ3RoIC0gMTtcbiAgICBsZXQgcG9zID0gc2NhbkJ5dGVzLmxlbmd0aCAtIDE7XG5cbiAgICB3aGlsZSAocG9zID49IHNpZ25hdHVyZUVuZCkge1xuICAgICAgbGV0IGogPSAwO1xuXG4gICAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzY2FuQnl0ZXNbcG9zIC0gal0gPT09IHNpZ25hdHVyZVtzaWduYXR1cmVFbmQgLSBqXSkge1xuICAgICAgICBqKys7XG4gICAgICB9XG5cbiAgICAgIGlmIChqID49IHNpZ25hdHVyZUxlbmd0aCkge1xuICAgICAgICBzdHJlYW0ucG9zICs9IHBvcyAtIHNpZ25hdHVyZUVuZDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHBvcy0tO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgcG9zID0gMDtcblxuICAgIHdoaWxlIChwb3MgPD0gc2Nhbkxlbmd0aCkge1xuICAgICAgbGV0IGogPSAwO1xuXG4gICAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzY2FuQnl0ZXNbcG9zICsgal0gPT09IHNpZ25hdHVyZVtqXSkge1xuICAgICAgICBqKys7XG4gICAgICB9XG5cbiAgICAgIGlmIChqID49IHNpZ25hdHVyZUxlbmd0aCkge1xuICAgICAgICBzdHJlYW0ucG9zICs9IHBvcztcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHBvcysrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuY2xhc3MgUERGRG9jdW1lbnQge1xuICBjb25zdHJ1Y3RvcihwZGZNYW5hZ2VyLCBhcmcpIHtcbiAgICBsZXQgc3RyZWFtO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoYXJnKSkge1xuICAgICAgc3RyZWFtID0gYXJnO1xuICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKGFyZykpIHtcbiAgICAgIHN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmVhbShhcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQREZEb2N1bWVudDogVW5rbm93biBhcmd1bWVudCB0eXBlXCIpO1xuICAgIH1cblxuICAgIGlmIChzdHJlYW0ubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uKFwiVGhlIFBERiBmaWxlIGlzIGVtcHR5LCBpLmUuIGl0cyBzaXplIGlzIHplcm8gYnl0ZXMuXCIpO1xuICAgIH1cblxuICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy54cmVmID0gbmV3IF9vYmouWFJlZihzdHJlYW0sIHBkZk1hbmFnZXIpO1xuICAgIHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5ID0gbmV3IF9mdW5jdGlvbi5QREZGdW5jdGlvbkZhY3Rvcnkoe1xuICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgaXNFdmFsU3VwcG9ydGVkOiBwZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMuaXNFdmFsU3VwcG9ydGVkXG4gICAgfSk7XG4gICAgdGhpcy5fcGFnZVByb21pc2VzID0gW107XG4gIH1cblxuICBwYXJzZShyZWNvdmVyeU1vZGUpIHtcbiAgICB0aGlzLnNldHVwKHJlY292ZXJ5TW9kZSk7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuY2F0YWxvZy5jYXREaWN0LmdldChcIlZlcnNpb25cIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmVyc2lvbikpIHtcbiAgICAgIHRoaXMucGRmRm9ybWF0VmVyc2lvbiA9IHZlcnNpb24ubmFtZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5hY3JvRm9ybSA9IHRoaXMuY2F0YWxvZy5jYXREaWN0LmdldChcIkFjcm9Gb3JtXCIpO1xuXG4gICAgICBpZiAodGhpcy5hY3JvRm9ybSkge1xuICAgICAgICB0aGlzLnhmYSA9IHRoaXMuYWNyb0Zvcm0uZ2V0KFwiWEZBXCIpO1xuICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmFjcm9Gb3JtLmdldChcIkZpZWxkc1wiKTtcblxuICAgICAgICBpZiAoKCFBcnJheS5pc0FycmF5KGZpZWxkcykgfHwgZmllbGRzLmxlbmd0aCA9PT0gMCkgJiYgIXRoaXMueGZhKSB7XG4gICAgICAgICAgdGhpcy5hY3JvRm9ybSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShcIkNhbm5vdCBmZXRjaCBBY3JvRm9ybSBlbnRyeTsgYXNzdW1pbmcgbm8gQWNyb0Zvcm1zIGFyZSBwcmVzZW50XCIpO1xuICAgICAgdGhpcy5hY3JvRm9ybSA9IG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmNhdGFsb2cuY2F0RGljdC5nZXQoXCJDb2xsZWN0aW9uXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoY29sbGVjdGlvbikgJiYgY29sbGVjdGlvbi5nZXRLZXlzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmluZm8pKFwiQ2Fubm90IGZldGNoIENvbGxlY3Rpb24gZGljdGlvbmFyeS5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpbmVhcml6YXRpb24oKSB7XG4gICAgbGV0IGxpbmVhcml6YXRpb24gPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxpbmVhcml6YXRpb24gPSBfcGFyc2VyLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShlcnIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImxpbmVhcml6YXRpb25cIiwgbGluZWFyaXphdGlvbik7XG4gIH1cblxuICBnZXQgc3RhcnRYUmVmKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIGxldCBzdGFydFhSZWYgPSAwO1xuXG4gICAgaWYgKHRoaXMubGluZWFyaXphdGlvbikge1xuICAgICAgc3RyZWFtLnJlc2V0KCk7XG5cbiAgICAgIGlmIChmaW5kKHN0cmVhbSwgRU5ET0JKX1NJR05BVFVSRSkpIHtcbiAgICAgICAgc3RhcnRYUmVmID0gc3RyZWFtLnBvcyArIDYgLSBzdHJlYW0uc3RhcnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSAxMDI0O1xuICAgICAgY29uc3Qgc3RhcnRYUmVmTGVuZ3RoID0gU1RBUlRYUkVGX1NJR05BVFVSRS5sZW5ndGg7XG4gICAgICBsZXQgZm91bmQgPSBmYWxzZSxcbiAgICAgICAgICBwb3MgPSBzdHJlYW0uZW5kO1xuXG4gICAgICB3aGlsZSAoIWZvdW5kICYmIHBvcyA+IDApIHtcbiAgICAgICAgcG9zIC09IHN0ZXAgLSBzdGFydFhSZWZMZW5ndGg7XG5cbiAgICAgICAgaWYgKHBvcyA8IDApIHtcbiAgICAgICAgICBwb3MgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLnBvcyA9IHBvcztcbiAgICAgICAgZm91bmQgPSBmaW5kKHN0cmVhbSwgU1RBUlRYUkVGX1NJR05BVFVSRSwgc3RlcCwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBzdHJlYW0uc2tpcCg5KTtcbiAgICAgICAgbGV0IGNoO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBjaCA9IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgIH0gd2hpbGUgKCgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSk7XG5cbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XG5cbiAgICAgICAgd2hpbGUgKGNoID49IDB4MjAgJiYgY2ggPD0gMHgzOSkge1xuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgICBjaCA9IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydFhSZWYgPSBwYXJzZUludChzdHIsIDEwKTtcblxuICAgICAgICBpZiAoaXNOYU4oc3RhcnRYUmVmKSkge1xuICAgICAgICAgIHN0YXJ0WFJlZiA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJzdGFydFhSZWZcIiwgc3RhcnRYUmVmKTtcbiAgfVxuXG4gIGNoZWNrSGVhZGVyKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIHN0cmVhbS5yZXNldCgpO1xuXG4gICAgaWYgKCFmaW5kKHN0cmVhbSwgUERGX0hFQURFUl9TSUdOQVRVUkUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RyZWFtLm1vdmVTdGFydCgpO1xuICAgIGNvbnN0IE1BWF9QREZfVkVSU0lPTl9MRU5HVEggPSAxMjtcbiAgICBsZXQgdmVyc2lvbiA9IFwiXCIsXG4gICAgICAgIGNoO1xuXG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpID4gMHgyMCkge1xuICAgICAgaWYgKHZlcnNpb24ubGVuZ3RoID49IE1BWF9QREZfVkVSU0lPTl9MRU5HVEgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZlcnNpb24gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBkZkZvcm1hdFZlcnNpb24pIHtcbiAgICAgIHRoaXMucGRmRm9ybWF0VmVyc2lvbiA9IHZlcnNpb24uc3Vic3RyaW5nKDUpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlU3RhcnRYUmVmKCkge1xuICAgIHRoaXMueHJlZi5zZXRTdGFydFhSZWYodGhpcy5zdGFydFhSZWYpO1xuICB9XG5cbiAgc2V0dXAocmVjb3ZlcnlNb2RlKSB7XG4gICAgdGhpcy54cmVmLnBhcnNlKHJlY292ZXJ5TW9kZSk7XG4gICAgdGhpcy5jYXRhbG9nID0gbmV3IF9vYmouQ2F0YWxvZyh0aGlzLnBkZk1hbmFnZXIsIHRoaXMueHJlZik7XG4gIH1cblxuICBnZXQgbnVtUGFnZXMoKSB7XG4gICAgY29uc3QgbGluZWFyaXphdGlvbiA9IHRoaXMubGluZWFyaXphdGlvbjtcbiAgICBjb25zdCBudW0gPSBsaW5lYXJpemF0aW9uID8gbGluZWFyaXphdGlvbi5udW1QYWdlcyA6IHRoaXMuY2F0YWxvZy5udW1QYWdlcztcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJudW1QYWdlc1wiLCBudW0pO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50SW5mbygpIHtcbiAgICBjb25zdCBEb2N1bWVudEluZm9WYWxpZGF0b3JzID0ge1xuICAgICAgVGl0bGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgQXV0aG9yOiBfdXRpbC5pc1N0cmluZyxcbiAgICAgIFN1YmplY3Q6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgS2V5d29yZHM6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgQ3JlYXRvcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICBQcm9kdWNlcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICBDcmVhdGlvbkRhdGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgTW9kRGF0ZTogX3V0aWwuaXNTdHJpbmcsXG4gICAgICBUcmFwcGVkOiBfcHJpbWl0aXZlcy5pc05hbWVcbiAgICB9O1xuICAgIGxldCB2ZXJzaW9uID0gdGhpcy5wZGZGb3JtYXRWZXJzaW9uO1xuXG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSBcInN0cmluZ1wiIHx8ICFQREZfSEVBREVSX1ZFUlNJT05fUkVHRVhQLnRlc3QodmVyc2lvbikpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgSW52YWxpZCBQREYgaGVhZGVyIHZlcnNpb24gbnVtYmVyOiAke3ZlcnNpb259YCk7XG4gICAgICB2ZXJzaW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkb2NJbmZvID0ge1xuICAgICAgUERGRm9ybWF0VmVyc2lvbjogdmVyc2lvbixcbiAgICAgIElzTGluZWFyaXplZDogISF0aGlzLmxpbmVhcml6YXRpb24sXG4gICAgICBJc0Fjcm9Gb3JtUHJlc2VudDogISF0aGlzLmFjcm9Gb3JtLFxuICAgICAgSXNYRkFQcmVzZW50OiAhIXRoaXMueGZhLFxuICAgICAgSXNDb2xsZWN0aW9uUHJlc2VudDogISF0aGlzLmNvbGxlY3Rpb25cbiAgICB9O1xuICAgIGxldCBpbmZvRGljdDtcblxuICAgIHRyeSB7XG4gICAgICBpbmZvRGljdCA9IHRoaXMueHJlZi50cmFpbGVyLmdldChcIkluZm9cIik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJUaGUgZG9jdW1lbnQgaW5mb3JtYXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoaW5mb0RpY3QpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBpbmZvRGljdC5nZXRLZXlzKCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbmZvRGljdC5nZXQoa2V5KTtcblxuICAgICAgICBpZiAoRG9jdW1lbnRJbmZvVmFsaWRhdG9yc1trZXldKSB7XG4gICAgICAgICAgaWYgKERvY3VtZW50SW5mb1ZhbGlkYXRvcnNba2V5XSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRvY0luZm9ba2V5XSA9IHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgQmFkIHZhbHVlIGluIGRvY3VtZW50IGluZm8gZm9yIFwiJHtrZXl9XCIuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBsZXQgY3VzdG9tVmFsdWU7XG5cbiAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGN1c3RvbVZhbHVlID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh2YWx1ZSkgfHwgKDAsIF91dGlsLmlzTnVtKSh2YWx1ZSkgfHwgKDAsIF91dGlsLmlzQm9vbCkodmFsdWUpKSB7XG4gICAgICAgICAgICBjdXN0b21WYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYFVuc3VwcG9ydGVkIHZhbHVlIGluIGRvY3VtZW50IGluZm8gZm9yIChjdXN0b20pIFwiJHtrZXl9XCIuYCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWRvY0luZm8uQ3VzdG9tKSB7XG4gICAgICAgICAgICBkb2NJbmZvLkN1c3RvbSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jSW5mby5DdXN0b21ba2V5XSA9IGN1c3RvbVZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZG9jdW1lbnRJbmZvXCIsIGRvY0luZm8pO1xuICB9XG5cbiAgZ2V0IGZpbmdlcnByaW50KCkge1xuICAgIGxldCBoYXNoO1xuICAgIGNvbnN0IGlkQXJyYXkgPSB0aGlzLnhyZWYudHJhaWxlci5nZXQoXCJJRFwiKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGlkQXJyYXkpICYmIGlkQXJyYXlbMF0gJiYgKDAsIF91dGlsLmlzU3RyaW5nKShpZEFycmF5WzBdKSAmJiBpZEFycmF5WzBdICE9PSBFTVBUWV9GSU5HRVJQUklOVCkge1xuICAgICAgaGFzaCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShpZEFycmF5WzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzaCA9ICgwLCBfY3J5cHRvLmNhbGN1bGF0ZU1ENSkodGhpcy5zdHJlYW0uZ2V0Qnl0ZVJhbmdlKDAsIEZJTkdFUlBSSU5UX0ZJUlNUX0JZVEVTKSwgMCwgRklOR0VSUFJJTlRfRklSU1RfQllURVMpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmdlcnByaW50QnVmID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBoYXNoLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGhleCA9IGhhc2hbaV0udG9TdHJpbmcoMTYpO1xuICAgICAgZmluZ2VycHJpbnRCdWYucHVzaChoZXgucGFkU3RhcnQoMiwgXCIwXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmaW5nZXJwcmludFwiLCBmaW5nZXJwcmludEJ1Zi5qb2luKFwiXCIpKTtcbiAgfVxuXG4gIF9nZXRMaW5lYXJpemF0aW9uUGFnZShwYWdlSW5kZXgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjYXRhbG9nLFxuICAgICAgbGluZWFyaXphdGlvblxuICAgIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgcmVmID0gX3ByaW1pdGl2ZXMuUmVmLmdldChsaW5lYXJpemF0aW9uLm9iamVjdE51bWJlckZpcnN0LCAwKTtcblxuICAgIHJldHVybiB0aGlzLnhyZWYuZmV0Y2hBc3luYyhyZWYpLnRoZW4ob2JqID0+IHtcbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmosIFwiUGFnZVwiKSB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmopICYmICFvYmouaGFzKFwiVHlwZVwiKSAmJiBvYmouaGFzKFwiQ29udGVudHNcIikpIHtcbiAgICAgICAgaWYgKHJlZiAmJiAhY2F0YWxvZy5wYWdlS2lkc0NvdW50Q2FjaGUuaGFzKHJlZikpIHtcbiAgICAgICAgICBjYXRhbG9nLnBhZ2VLaWRzQ291bnRDYWNoZS5wdXQocmVmLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbb2JqLCByZWZdO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJUaGUgTGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgcG9pbnQgXCIgKyBcInRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LlwiKTtcbiAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgKDAsIF91dGlsLmluZm8pKHJlYXNvbik7XG4gICAgICByZXR1cm4gY2F0YWxvZy5nZXRQYWdlRGljdChwYWdlSW5kZXgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGFnZShwYWdlSW5kZXgpIHtcbiAgICBpZiAodGhpcy5fcGFnZVByb21pc2VzW3BhZ2VJbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VQcm9taXNlc1twYWdlSW5kZXhdO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGNhdGFsb2csXG4gICAgICBsaW5lYXJpemF0aW9uXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3QgcHJvbWlzZSA9IGxpbmVhcml6YXRpb24gJiYgbGluZWFyaXphdGlvbi5wYWdlRmlyc3QgPT09IHBhZ2VJbmRleCA/IHRoaXMuX2dldExpbmVhcml6YXRpb25QYWdlKHBhZ2VJbmRleCkgOiBjYXRhbG9nLmdldFBhZ2VEaWN0KHBhZ2VJbmRleCk7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VQcm9taXNlc1twYWdlSW5kZXhdID0gcHJvbWlzZS50aGVuKChbcGFnZURpY3QsIHJlZl0pID0+IHtcbiAgICAgIHJldHVybiBuZXcgUGFnZSh7XG4gICAgICAgIHBkZk1hbmFnZXI6IHRoaXMucGRmTWFuYWdlcixcbiAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICBwYWdlSW5kZXgsXG4gICAgICAgIHBhZ2VEaWN0LFxuICAgICAgICByZWYsXG4gICAgICAgIGZvbnRDYWNoZTogY2F0YWxvZy5mb250Q2FjaGUsXG4gICAgICAgIGJ1aWx0SW5DTWFwQ2FjaGU6IGNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxcbiAgICAgICAgZ2xvYmFsSW1hZ2VDYWNoZTogY2F0YWxvZy5nbG9iYWxJbWFnZUNhY2hlLFxuICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGNoZWNrRmlyc3RQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2UoMCkuY2F0Y2goYXN5bmMgcmVhc29uID0+IHtcbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24pIHtcbiAgICAgICAgdGhpcy5fcGFnZVByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpO1xuICAgICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuWFJlZlBhcnNlRXhjZXB0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmb250RmFsbGJhY2soaWQsIGhhbmRsZXIpIHtcbiAgICByZXR1cm4gdGhpcy5jYXRhbG9nLmZvbnRGYWxsYmFjayhpZCwgaGFuZGxlcik7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwKG1hbnVhbGx5VHJpZ2dlcmVkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5jYXRhbG9nID8gdGhpcy5jYXRhbG9nLmNsZWFudXAobWFudWFsbHlUcmlnZ2VyZWQpIDogKDAsIF9wcmltaXRpdmVzLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEb2N1bWVudCA9IFBERkRvY3VtZW50O1xuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkZpbGVTcGVjID0gZXhwb3J0cy5YUmVmID0gZXhwb3J0cy5PYmplY3RMb2FkZXIgPSBleHBvcnRzLkNhdGFsb2cgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXygxMSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfY3J5cHRvID0gX193X3BkZmpzX3JlcXVpcmVfXygyMik7XG5cbnZhciBfY29sb3JzcGFjZSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjMpO1xuXG52YXIgX2ltYWdlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygyNCk7XG5cbmZ1bmN0aW9uIGZldGNoRGVzdGluYXRpb24oZGVzdCkge1xuICByZXR1cm4gKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGVzdCkgPyBkZXN0LmdldChcIkRcIikgOiBkZXN0O1xufVxuXG5jbGFzcyBDYXRhbG9nIHtcbiAgY29uc3RydWN0b3IocGRmTWFuYWdlciwgeHJlZikge1xuICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLmNhdERpY3QgPSB4cmVmLmdldENhdGFsb2dPYmooKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodGhpcy5jYXREaWN0KSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQ2F0YWxvZyBvYmplY3QgaXMgbm90IGEgZGljdGlvbmFyeS5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5mb250Q2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgICB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlID0gbmV3IF9pbWFnZV91dGlscy5HbG9iYWxJbWFnZUNhY2hlKCk7XG4gICAgdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgfVxuXG4gIGdldCBtZXRhZGF0YSgpIHtcbiAgICBjb25zdCBzdHJlYW1SZWYgPSB0aGlzLmNhdERpY3QuZ2V0UmF3KFwiTWV0YWRhdGFcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikoc3RyZWFtUmVmKSkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwibWV0YWRhdGFcIiwgbnVsbCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VwcHJlc3NFbmNyeXB0aW9uID0gISh0aGlzLnhyZWYuZW5jcnlwdCAmJiB0aGlzLnhyZWYuZW5jcnlwdC5lbmNyeXB0TWV0YWRhdGEpO1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMueHJlZi5mZXRjaChzdHJlYW1SZWYsIHN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgbGV0IG1ldGFkYXRhO1xuXG4gICAgaWYgKHN0cmVhbSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShzdHJlYW0uZGljdCkpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzdHJlYW0uZGljdC5nZXQoXCJUeXBlXCIpO1xuICAgICAgY29uc3Qgc3VidHlwZSA9IHN0cmVhbS5kaWN0LmdldChcIlN1YnR5cGVcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlLCBcIk1ldGFkYXRhXCIpICYmICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN1YnR5cGUsIFwiWE1MXCIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWV0YWRhdGEgPSAoMCwgX3V0aWwuc3RyaW5nVG9VVEY4U3RyaW5nKSgoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoc3RyZWFtLmdldEJ5dGVzKCkpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiU2tpcHBpbmcgaW52YWxpZCBtZXRhZGF0YS5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJtZXRhZGF0YVwiLCBtZXRhZGF0YSk7XG4gIH1cblxuICBnZXQgdG9wbGV2ZWxQYWdlc0RpY3QoKSB7XG4gICAgY29uc3QgcGFnZXNPYmogPSB0aGlzLmNhdERpY3QuZ2V0KFwiUGFnZXNcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHBhZ2VzT2JqKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwidG9wbGV2ZWxQYWdlc0RpY3RcIiwgcGFnZXNPYmopO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50T3V0bGluZSgpIHtcbiAgICBsZXQgb2JqID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBvYmogPSB0aGlzLl9yZWFkRG9jdW1lbnRPdXRsaW5lKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoXCJVbmFibGUgdG8gcmVhZCBkb2N1bWVudCBvdXRsaW5lLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJkb2N1bWVudE91dGxpbmVcIiwgb2JqKTtcbiAgfVxuXG4gIF9yZWFkRG9jdW1lbnRPdXRsaW5lKCkge1xuICAgIGxldCBvYmogPSB0aGlzLmNhdERpY3QuZ2V0KFwiT3V0bGluZXNcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG9iaiA9IG9iai5nZXRSYXcoXCJGaXJzdFwiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzUmVmKShvYmopKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByb290ID0ge1xuICAgICAgaXRlbXM6IFtdXG4gICAgfTtcbiAgICBjb25zdCBxdWV1ZSA9IFt7XG4gICAgICBvYmosXG4gICAgICBwYXJlbnQ6IHJvb3RcbiAgICB9XTtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgcHJvY2Vzc2VkLnB1dChvYmopO1xuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWYsXG4gICAgICAgICAgYmxhY2tDb2xvciA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtcblxuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpID0gcXVldWUuc2hpZnQoKTtcbiAgICAgIGNvbnN0IG91dGxpbmVEaWN0ID0geHJlZi5mZXRjaElmUmVmKGkub2JqKTtcblxuICAgICAgaWYgKG91dGxpbmVEaWN0ID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW91dGxpbmVEaWN0LmhhcyhcIlRpdGxlXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgb3V0bGluZSBpdGVtIGVuY291bnRlcmVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgdXJsOiBudWxsLFxuICAgICAgICBkZXN0OiBudWxsXG4gICAgICB9O1xuICAgICAgQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtcbiAgICAgICAgZGVzdERpY3Q6IG91dGxpbmVEaWN0LFxuICAgICAgICByZXN1bHRPYmo6IGRhdGEsXG4gICAgICAgIGRvY0Jhc2VVcmw6IHRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRpdGxlID0gb3V0bGluZURpY3QuZ2V0KFwiVGl0bGVcIik7XG4gICAgICBjb25zdCBmbGFncyA9IG91dGxpbmVEaWN0LmdldChcIkZcIikgfHwgMDtcbiAgICAgIGNvbnN0IGNvbG9yID0gb3V0bGluZURpY3QuZ2V0QXJyYXkoXCJDXCIpO1xuICAgICAgY29uc3QgY291bnQgPSBvdXRsaW5lRGljdC5nZXQoXCJDb3VudFwiKTtcbiAgICAgIGxldCByZ2JDb2xvciA9IGJsYWNrQ29sb3I7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSAmJiBjb2xvci5sZW5ndGggPT09IDMgJiYgKGNvbG9yWzBdICE9PSAwIHx8IGNvbG9yWzFdICE9PSAwIHx8IGNvbG9yWzJdICE9PSAwKSkge1xuICAgICAgICByZ2JDb2xvciA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGNvbG9yLCAwKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0bGluZUl0ZW0gPSB7XG4gICAgICAgIGRlc3Q6IGRhdGEuZGVzdCxcbiAgICAgICAgdXJsOiBkYXRhLnVybCxcbiAgICAgICAgdW5zYWZlVXJsOiBkYXRhLnVuc2FmZVVybCxcbiAgICAgICAgbmV3V2luZG93OiBkYXRhLm5ld1dpbmRvdyxcbiAgICAgICAgdGl0bGU6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykodGl0bGUpLFxuICAgICAgICBjb2xvcjogcmdiQ29sb3IsXG4gICAgICAgIGNvdW50OiBOdW1iZXIuaXNJbnRlZ2VyKGNvdW50KSA/IGNvdW50IDogdW5kZWZpbmVkLFxuICAgICAgICBib2xkOiAhIShmbGFncyAmIDIpLFxuICAgICAgICBpdGFsaWM6ICEhKGZsYWdzICYgMSksXG4gICAgICAgIGl0ZW1zOiBbXVxuICAgICAgfTtcbiAgICAgIGkucGFyZW50Lml0ZW1zLnB1c2gob3V0bGluZUl0ZW0pO1xuICAgICAgb2JqID0gb3V0bGluZURpY3QuZ2V0UmF3KFwiRmlyc3RcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikgJiYgIXByb2Nlc3NlZC5oYXMob2JqKSkge1xuICAgICAgICBxdWV1ZS5wdXNoKHtcbiAgICAgICAgICBvYmosXG4gICAgICAgICAgcGFyZW50OiBvdXRsaW5lSXRlbVxuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzc2VkLnB1dChvYmopO1xuICAgICAgfVxuXG4gICAgICBvYmogPSBvdXRsaW5lRGljdC5nZXRSYXcoXCJOZXh0XCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShvYmopICYmICFwcm9jZXNzZWQuaGFzKG9iaikpIHtcbiAgICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgICAgb2JqLFxuICAgICAgICAgIHBhcmVudDogaS5wYXJlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHByb2Nlc3NlZC5wdXQob2JqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdC5pdGVtcy5sZW5ndGggPiAwID8gcm9vdC5pdGVtcyA6IG51bGw7XG4gIH1cblxuICBnZXQgcGVybWlzc2lvbnMoKSB7XG4gICAgbGV0IHBlcm1pc3Npb25zID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBwZXJtaXNzaW9ucyA9IHRoaXMuX3JlYWRQZXJtaXNzaW9ucygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInBlcm1pc3Npb25zXCIsIHBlcm1pc3Npb25zKTtcbiAgfVxuXG4gIF9yZWFkUGVybWlzc2lvbnMoKSB7XG4gICAgY29uc3QgZW5jcnlwdCA9IHRoaXMueHJlZi50cmFpbGVyLmdldChcIkVuY3J5cHRcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGVuY3J5cHQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgZmxhZ3MgPSBlbmNyeXB0LmdldChcIlBcIik7XG5cbiAgICBpZiAoISgwLCBfdXRpbC5pc051bSkoZmxhZ3MpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmbGFncyArPSAyICoqIDMyO1xuICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBfdXRpbC5QZXJtaXNzaW9uRmxhZykge1xuICAgICAgY29uc3QgdmFsdWUgPSBfdXRpbC5QZXJtaXNzaW9uRmxhZ1trZXldO1xuXG4gICAgICBpZiAoZmxhZ3MgJiB2YWx1ZSkge1xuICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGVybWlzc2lvbnM7XG4gIH1cblxuICBnZXQgbnVtUGFnZXMoKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoXCJDb3VudFwiKTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvYmopKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQYWdlIGNvdW50IGluIHRvcC1sZXZlbCBwYWdlcyBkaWN0aW9uYXJ5IGlzIG5vdCBhbiBpbnRlZ2VyLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJudW1QYWdlc1wiLCBvYmopO1xuICB9XG5cbiAgZ2V0IGRlc3RpbmF0aW9ucygpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9yZWFkRGVzdHMoKSxcbiAgICAgICAgICBkZXN0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTmFtZVRyZWUpIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gb2JqLmdldEFsbCgpO1xuXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gbmFtZXMpIHtcbiAgICAgICAgZGVzdHNbbmFtZV0gPSBmZXRjaERlc3RpbmF0aW9uKG5hbWVzW25hbWVdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGRlc3RzW2tleV0gPSBmZXRjaERlc3RpbmF0aW9uKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZGVzdGluYXRpb25zXCIsIGRlc3RzKTtcbiAgfVxuXG4gIGdldERlc3RpbmF0aW9uKGRlc3RpbmF0aW9uSWQpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9yZWFkRGVzdHMoKTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBOYW1lVHJlZSB8fCBvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgICByZXR1cm4gZmV0Y2hEZXN0aW5hdGlvbihvYmouZ2V0KGRlc3RpbmF0aW9uSWQpIHx8IG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgX3JlYWREZXN0cygpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLmNhdERpY3QuZ2V0KFwiTmFtZXNcIik7XG5cbiAgICBpZiAob2JqICYmIG9iai5oYXMoXCJEZXN0c1wiKSkge1xuICAgICAgcmV0dXJuIG5ldyBOYW1lVHJlZShvYmouZ2V0UmF3KFwiRGVzdHNcIiksIHRoaXMueHJlZik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNhdERpY3QuaGFzKFwiRGVzdHNcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhdERpY3QuZ2V0KFwiRGVzdHNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBwYWdlTGFiZWxzKCkge1xuICAgIGxldCBvYmogPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIG9iaiA9IHRoaXMuX3JlYWRQYWdlTGFiZWxzKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoXCJVbmFibGUgdG8gcmVhZCBwYWdlIGxhYmVscy5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwicGFnZUxhYmVsc1wiLCBvYmopO1xuICB9XG5cbiAgX3JlYWRQYWdlTGFiZWxzKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuY2F0RGljdC5nZXRSYXcoXCJQYWdlTGFiZWxzXCIpO1xuXG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VMYWJlbHMgPSBuZXcgQXJyYXkodGhpcy5udW1QYWdlcyk7XG4gICAgbGV0IHN0eWxlID0gbnVsbCxcbiAgICAgICAgcHJlZml4ID0gXCJcIjtcbiAgICBjb25zdCBudW1iZXJUcmVlID0gbmV3IE51bWJlclRyZWUob2JqLCB0aGlzLnhyZWYpO1xuICAgIGNvbnN0IG51bXMgPSBudW1iZXJUcmVlLmdldEFsbCgpO1xuICAgIGxldCBjdXJyZW50TGFiZWwgPSBcIlwiLFxuICAgICAgICBjdXJyZW50SW5kZXggPSAxO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdGhpcy5udW1QYWdlczsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGlmIChpIGluIG51bXMpIHtcbiAgICAgICAgY29uc3QgbGFiZWxEaWN0ID0gbnVtc1tpXTtcblxuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGxhYmVsRGljdCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQYWdlTGFiZWwgaXMgbm90IGEgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlR5cGVcIikgJiYgISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGxhYmVsRGljdC5nZXQoXCJUeXBlXCIpLCBcIlBhZ2VMYWJlbFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgdHlwZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlNcIikpIHtcbiAgICAgICAgICBjb25zdCBzID0gbGFiZWxEaWN0LmdldChcIlNcIik7XG5cbiAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHlsZSA9IHMubmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlBcIikpIHtcbiAgICAgICAgICBjb25zdCBwID0gbGFiZWxEaWN0LmdldChcIlBcIik7XG5cbiAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykocCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgcHJlZml4IGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmVmaXggPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlN0XCIpKSB7XG4gICAgICAgICAgY29uc3Qgc3QgPSBsYWJlbERpY3QuZ2V0KFwiU3RcIik7XG5cbiAgICAgICAgICBpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKHN0KSAmJiBzdCA+PSAxKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudEluZGV4ID0gc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudEluZGV4ID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgY3VycmVudExhYmVsID0gY3VycmVudEluZGV4O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJSXCI6XG4gICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgY3VycmVudExhYmVsID0gKDAsIF9jb3JlX3V0aWxzLnRvUm9tYW5OdW1lcmFscykoY3VycmVudEluZGV4LCBzdHlsZSA9PT0gXCJyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJBXCI6XG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgY29uc3QgTElNSVQgPSAyNjtcbiAgICAgICAgICBjb25zdCBBX1VQUEVSX0NBU0UgPSAweDQxLFxuICAgICAgICAgICAgICAgIEFfTE9XRVJfQ0FTRSA9IDB4NjE7XG4gICAgICAgICAgY29uc3QgYmFzZUNoYXJDb2RlID0gc3R5bGUgPT09IFwiYVwiID8gQV9MT1dFUl9DQVNFIDogQV9VUFBFUl9DQVNFO1xuICAgICAgICAgIGNvbnN0IGxldHRlckluZGV4ID0gY3VycmVudEluZGV4IC0gMTtcbiAgICAgICAgICBjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJhc2VDaGFyQ29kZSArIGxldHRlckluZGV4ICUgTElNSVQpO1xuICAgICAgICAgIGNvbnN0IGNoYXJCdWYgPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IGxldHRlckluZGV4IC8gTElNSVQgfCAwOyBqIDw9IGpqOyBqKyspIHtcbiAgICAgICAgICAgIGNoYXJCdWYucHVzaChjaGFyYWN0ZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IGNoYXJCdWYuam9pbihcIlwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIHN0eWxlIFwiJHtzdHlsZX1cIiBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50TGFiZWwgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBwYWdlTGFiZWxzW2ldID0gcHJlZml4ICsgY3VycmVudExhYmVsO1xuICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2VMYWJlbHM7XG4gIH1cblxuICBnZXQgcGFnZUxheW91dCgpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLmNhdERpY3QuZ2V0KFwiUGFnZUxheW91dFwiKTtcbiAgICBsZXQgcGFnZUxheW91dCA9IFwiXCI7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkob2JqKSkge1xuICAgICAgc3dpdGNoIChvYmoubmFtZSkge1xuICAgICAgICBjYXNlIFwiU2luZ2xlUGFnZVwiOlxuICAgICAgICBjYXNlIFwiT25lQ29sdW1uXCI6XG4gICAgICAgIGNhc2UgXCJUd29Db2x1bW5MZWZ0XCI6XG4gICAgICAgIGNhc2UgXCJUd29Db2x1bW5SaWdodFwiOlxuICAgICAgICBjYXNlIFwiVHdvUGFnZUxlZnRcIjpcbiAgICAgICAgY2FzZSBcIlR3b1BhZ2VSaWdodFwiOlxuICAgICAgICAgIHBhZ2VMYXlvdXQgPSBvYmoubmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJwYWdlTGF5b3V0XCIsIHBhZ2VMYXlvdXQpO1xuICB9XG5cbiAgZ2V0IHBhZ2VNb2RlKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuY2F0RGljdC5nZXQoXCJQYWdlTW9kZVwiKTtcbiAgICBsZXQgcGFnZU1vZGUgPSBcIlVzZU5vbmVcIjtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvYmopKSB7XG4gICAgICBzd2l0Y2ggKG9iai5uYW1lKSB7XG4gICAgICAgIGNhc2UgXCJVc2VOb25lXCI6XG4gICAgICAgIGNhc2UgXCJVc2VPdXRsaW5lc1wiOlxuICAgICAgICBjYXNlIFwiVXNlVGh1bWJzXCI6XG4gICAgICAgIGNhc2UgXCJGdWxsU2NyZWVuXCI6XG4gICAgICAgIGNhc2UgXCJVc2VPQ1wiOlxuICAgICAgICBjYXNlIFwiVXNlQXR0YWNobWVudHNcIjpcbiAgICAgICAgICBwYWdlTW9kZSA9IG9iai5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInBhZ2VNb2RlXCIsIHBhZ2VNb2RlKTtcbiAgfVxuXG4gIGdldCB2aWV3ZXJQcmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCBWaWV3ZXJQcmVmZXJlbmNlc1ZhbGlkYXRvcnMgPSB7XG4gICAgICBIaWRlVG9vbGJhcjogX3V0aWwuaXNCb29sLFxuICAgICAgSGlkZU1lbnViYXI6IF91dGlsLmlzQm9vbCxcbiAgICAgIEhpZGVXaW5kb3dVSTogX3V0aWwuaXNCb29sLFxuICAgICAgRml0V2luZG93OiBfdXRpbC5pc0Jvb2wsXG4gICAgICBDZW50ZXJXaW5kb3c6IF91dGlsLmlzQm9vbCxcbiAgICAgIERpc3BsYXlEb2NUaXRsZTogX3V0aWwuaXNCb29sLFxuICAgICAgTm9uRnVsbFNjcmVlblBhZ2VNb2RlOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBEaXJlY3Rpb246IF9wcmltaXRpdmVzLmlzTmFtZSxcbiAgICAgIFZpZXdBcmVhOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBWaWV3Q2xpcDogX3ByaW1pdGl2ZXMuaXNOYW1lLFxuICAgICAgUHJpbnRBcmVhOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBQcmludENsaXA6IF9wcmltaXRpdmVzLmlzTmFtZSxcbiAgICAgIFByaW50U2NhbGluZzogX3ByaW1pdGl2ZXMuaXNOYW1lLFxuICAgICAgRHVwbGV4OiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBQaWNrVHJheUJ5UERGU2l6ZTogX3V0aWwuaXNCb29sLFxuICAgICAgUHJpbnRQYWdlUmFuZ2U6IEFycmF5LmlzQXJyYXksXG4gICAgICBOdW1Db3BpZXM6IE51bWJlci5pc0ludGVnZXJcbiAgICB9O1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuY2F0RGljdC5nZXQoXCJWaWV3ZXJQcmVmZXJlbmNlc1wiKTtcbiAgICBsZXQgcHJlZnMgPSBudWxsO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIFZpZXdlclByZWZlcmVuY2VzVmFsaWRhdG9ycykge1xuICAgICAgICBpZiAoIW9iai5oYXMoa2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBvYmouZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKCFWaWV3ZXJQcmVmZXJlbmNlc1ZhbGlkYXRvcnNba2V5XSh2YWx1ZSkpIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEJhZCB2YWx1ZSBpbiBWaWV3ZXJQcmVmZXJlbmNlcyBmb3IgXCIke2tleX1cIi5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcmVmVmFsdWU7XG5cbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICBjYXNlIFwiTm9uRnVsbFNjcmVlblBhZ2VNb2RlXCI6XG4gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIlVzZU5vbmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlVzZU91dGxpbmVzXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJVc2VUaHVtYnNcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlVzZU9DXCI6XG4gICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IFwiVXNlTm9uZVwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJEaXJlY3Rpb25cIjpcbiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICBjYXNlIFwiTDJSXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJSMkxcIjpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gXCJMMlJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiVmlld0FyZWFcIjpcbiAgICAgICAgICBjYXNlIFwiVmlld0NsaXBcIjpcbiAgICAgICAgICBjYXNlIFwiUHJpbnRBcmVhXCI6XG4gICAgICAgICAgY2FzZSBcIlByaW50Q2xpcFwiOlxuICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJNZWRpYUJveFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiQ3JvcEJveFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiQmxlZWRCb3hcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlRyaW1Cb3hcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkFydEJveFwiOlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSBcIkNyb3BCb3hcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiUHJpbnRTY2FsaW5nXCI6XG4gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIk5vbmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkFwcERlZmF1bHRcIjpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gXCJBcHBEZWZhdWx0XCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkR1cGxleFwiOlxuICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJTaW1wbGV4XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJEdXBsZXhGbGlwU2hvcnRFZGdlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJEdXBsZXhGbGlwTG9uZ0VkZ2VcIjpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gXCJOb25lXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIlByaW50UGFnZVJhbmdlXCI6XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChsZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdmFsdWUuZXZlcnkoKHBhZ2UsIGksIGFycikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwYWdlKSAmJiBwYWdlID4gMCAmJiAoaSA9PT0gMCB8fCBwYWdlID49IGFycltpIC0gMV0pICYmIHBhZ2UgPD0gdGhpcy5udW1QYWdlcztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICBwcmVmVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiTnVtQ29waWVzXCI6XG4gICAgICAgICAgICBpZiAodmFsdWUgPiAwKSB7XG4gICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYHZpZXdlclByZWZlcmVuY2VzIC0gZXhwZWN0ZWQgYSBib29sZWFuIHZhbHVlIGZvcjogJHtrZXl9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZWZWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCFwcmVmcykge1xuICAgICAgICAgICAgcHJlZnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByZWZzW2tleV0gPSBwcmVmVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBCYWQgdmFsdWUgaW4gVmlld2VyUHJlZmVyZW5jZXMgZm9yIFwiJHtrZXl9XCIuYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ2aWV3ZXJQcmVmZXJlbmNlc1wiLCBwcmVmcyk7XG4gIH1cblxuICBnZXQgb3BlbkFjdGlvbigpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLmNhdERpY3QuZ2V0KFwiT3BlbkFjdGlvblwiKTtcbiAgICBsZXQgb3BlbkFjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSkge1xuICAgICAgY29uc3QgZGVzdERpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh0aGlzLnhyZWYpO1xuICAgICAgZGVzdERpY3Quc2V0KFwiQVwiLCBvYmopO1xuICAgICAgY29uc3QgcmVzdWx0T2JqID0ge1xuICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgIGRlc3Q6IG51bGwsXG4gICAgICAgIGFjdGlvbjogbnVsbFxuICAgICAgfTtcbiAgICAgIENhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7XG4gICAgICAgIGRlc3REaWN0LFxuICAgICAgICByZXN1bHRPYmpcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRPYmouZGVzdCkpIHtcbiAgICAgICAgaWYgKCFvcGVuQWN0aW9uKSB7XG4gICAgICAgICAgb3BlbkFjdGlvbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBvcGVuQWN0aW9uLmRlc3QgPSByZXN1bHRPYmouZGVzdDtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0T2JqLmFjdGlvbikge1xuICAgICAgICBpZiAoIW9wZW5BY3Rpb24pIHtcbiAgICAgICAgICBvcGVuQWN0aW9uID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wZW5BY3Rpb24uYWN0aW9uID0gcmVzdWx0T2JqLmFjdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgaWYgKCFvcGVuQWN0aW9uKSB7XG4gICAgICAgIG9wZW5BY3Rpb24gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuXG4gICAgICBvcGVuQWN0aW9uLmRlc3QgPSBvYmo7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwib3BlbkFjdGlvblwiLCBvcGVuQWN0aW9uKTtcbiAgfVxuXG4gIGdldCBhdHRhY2htZW50cygpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLmNhdERpY3QuZ2V0KFwiTmFtZXNcIik7XG4gICAgbGV0IGF0dGFjaG1lbnRzID0gbnVsbDtcblxuICAgIGlmIChvYmogJiYgb2JqLmhhcyhcIkVtYmVkZGVkRmlsZXNcIikpIHtcbiAgICAgIGNvbnN0IG5hbWVUcmVlID0gbmV3IE5hbWVUcmVlKG9iai5nZXRSYXcoXCJFbWJlZGRlZEZpbGVzXCIpLCB0aGlzLnhyZWYpO1xuICAgICAgY29uc3QgbmFtZXMgPSBuYW1lVHJlZS5nZXRBbGwoKTtcblxuICAgICAgZm9yIChjb25zdCBuYW1lIGluIG5hbWVzKSB7XG4gICAgICAgIGNvbnN0IGZzID0gbmV3IEZpbGVTcGVjKG5hbWVzW25hbWVdLCB0aGlzLnhyZWYpO1xuXG4gICAgICAgIGlmICghYXR0YWNobWVudHMpIHtcbiAgICAgICAgICBhdHRhY2htZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBhdHRhY2htZW50c1soMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKG5hbWUpXSA9IGZzLnNlcmlhbGl6YWJsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJhdHRhY2htZW50c1wiLCBhdHRhY2htZW50cyk7XG4gIH1cblxuICBnZXQgamF2YVNjcmlwdCgpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLmNhdERpY3QuZ2V0KFwiTmFtZXNcIik7XG4gICAgbGV0IGphdmFTY3JpcHQgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gYXBwZW5kSWZKYXZhU2NyaXB0RGljdChqc0RpY3QpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBqc0RpY3QuZ2V0KFwiU1wiKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlLCBcIkphdmFTY3JpcHRcIikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQganMgPSBqc0RpY3QuZ2V0KFwiSlNcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGpzKSkge1xuICAgICAgICBqcyA9ICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShqcy5nZXRCeXRlcygpKTtcbiAgICAgIH0gZWxzZSBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykoanMpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFqYXZhU2NyaXB0KSB7XG4gICAgICAgIGphdmFTY3JpcHQgPSBbXTtcbiAgICAgIH1cblxuICAgICAgamF2YVNjcmlwdC5wdXNoKCgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoanMpKTtcbiAgICB9XG5cbiAgICBpZiAob2JqICYmIG9iai5oYXMoXCJKYXZhU2NyaXB0XCIpKSB7XG4gICAgICBjb25zdCBuYW1lVHJlZSA9IG5ldyBOYW1lVHJlZShvYmouZ2V0UmF3KFwiSmF2YVNjcmlwdFwiKSwgdGhpcy54cmVmKTtcbiAgICAgIGNvbnN0IG5hbWVzID0gbmFtZVRyZWUuZ2V0QWxsKCk7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBuYW1lcykge1xuICAgICAgICBjb25zdCBqc0RpY3QgPSBuYW1lc1tuYW1lXTtcblxuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoanNEaWN0KSkge1xuICAgICAgICAgIGFwcGVuZElmSmF2YVNjcmlwdERpY3QoanNEaWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9wZW5BY3Rpb24gPSB0aGlzLmNhdERpY3QuZ2V0KFwiT3BlbkFjdGlvblwiKTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvcGVuQWN0aW9uKSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvcGVuQWN0aW9uLmdldChcIlNcIiksIFwiSmF2YVNjcmlwdFwiKSkge1xuICAgICAgYXBwZW5kSWZKYXZhU2NyaXB0RGljdChvcGVuQWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJqYXZhU2NyaXB0XCIsIGphdmFTY3JpcHQpO1xuICB9XG5cbiAgZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICB0aGlzLmZvbnRDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbih0cmFuc2xhdGVkRm9udHMgPT4ge1xuICAgICAgZm9yIChjb25zdCB0cmFuc2xhdGVkRm9udCBvZiB0cmFuc2xhdGVkRm9udHMpIHtcbiAgICAgICAgaWYgKHRyYW5zbGF0ZWRGb250LmxvYWRlZE5hbWUgPT09IGlkKSB7XG4gICAgICAgICAgdHJhbnNsYXRlZEZvbnQuZmFsbGJhY2soaGFuZGxlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjbGVhbnVwKG1hbnVhbGx5VHJpZ2dlcmVkID0gZmFsc2UpIHtcbiAgICAoMCwgX3ByaW1pdGl2ZXMuY2xlYXJQcmltaXRpdmVDYWNoZXMpKCk7XG4gICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlLmNsZWFyKG1hbnVhbGx5VHJpZ2dlcmVkKTtcbiAgICB0aGlzLnBhZ2VLaWRzQ291bnRDYWNoZS5jbGVhcigpO1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgdGhpcy5mb250Q2FjaGUuZm9yRWFjaChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4odHJhbnNsYXRlZEZvbnRzID0+IHtcbiAgICAgIGZvciAoY29uc3Qge1xuICAgICAgICBkaWN0XG4gICAgICB9IG9mIHRyYW5zbGF0ZWRGb250cykge1xuICAgICAgICBkZWxldGUgZGljdC50cmFuc2xhdGVkO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvbnRDYWNoZS5jbGVhcigpO1xuICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlLmNsZWFyKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQYWdlRGljdChwYWdlSW5kZXgpIHtcbiAgICBjb25zdCBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIGNvbnN0IG5vZGVzVG9WaXNpdCA9IFt0aGlzLmNhdERpY3QuZ2V0UmF3KFwiUGFnZXNcIildO1xuICAgIGNvbnN0IHZpc2l0ZWROb2RlcyA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmLFxuICAgICAgICAgIHBhZ2VLaWRzQ291bnRDYWNoZSA9IHRoaXMucGFnZUtpZHNDb3VudENhY2hlO1xuICAgIGxldCBjb3VudCxcbiAgICAgICAgY3VycmVudFBhZ2VJbmRleCA9IDA7XG5cbiAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKG5vZGVzVG9WaXNpdC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBub2Rlc1RvVmlzaXQucG9wKCk7XG5cbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgY291bnQgPSBwYWdlS2lkc0NvdW50Q2FjaGUuZ2V0KGN1cnJlbnROb2RlKTtcblxuICAgICAgICAgIGlmIChjb3VudCA+IDAgJiYgY3VycmVudFBhZ2VJbmRleCArIGNvdW50IDwgcGFnZUluZGV4KSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4ICs9IGNvdW50O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZpc2l0ZWROb2Rlcy5oYXMoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS5cIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZpc2l0ZWROb2Rlcy5wdXQoY3VycmVudE5vZGUpO1xuICAgICAgICAgIHhyZWYuZmV0Y2hBc3luYyhjdXJyZW50Tm9kZSkudGhlbihmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqLCBcIlBhZ2VcIikgfHwgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiAhb2JqLmhhcyhcIktpZHNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKHBhZ2VJbmRleCA9PT0gY3VycmVudFBhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAmJiAhcGFnZUtpZHNDb3VudENhY2hlLmhhcyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIHBhZ2VLaWRzQ291bnRDYWNoZS5wdXQoY3VycmVudE5vZGUsIDEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZShbb2JqLCBjdXJyZW50Tm9kZV0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXgrKztcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKG9iaik7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfSwgY2FwYWJpbGl0eS5yZWplY3QpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LlwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY291bnQgPSBjdXJyZW50Tm9kZS5nZXQoXCJDb3VudFwiKTtcblxuICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihjb3VudCkgJiYgY291bnQgPj0gMCkge1xuICAgICAgICAgIGNvbnN0IG9iaklkID0gY3VycmVudE5vZGUub2JqSWQ7XG5cbiAgICAgICAgICBpZiAob2JqSWQgJiYgIXBhZ2VLaWRzQ291bnRDYWNoZS5oYXMob2JqSWQpKSB7XG4gICAgICAgICAgICBwYWdlS2lkc0NvdW50Q2FjaGUucHV0KG9iaklkLCBjb3VudCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGN1cnJlbnRQYWdlSW5kZXggKyBjb3VudCA8PSBwYWdlSW5kZXgpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXggKz0gY291bnQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBraWRzID0gY3VycmVudE5vZGUuZ2V0KFwiS2lkc1wiKTtcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2lkcykpIHtcbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoY3VycmVudE5vZGUuZ2V0KFwiVHlwZVwiKSwgXCJQYWdlXCIpIHx8ICFjdXJyZW50Tm9kZS5oYXMoXCJUeXBlXCIpICYmIGN1cnJlbnROb2RlLmhhcyhcIkNvbnRlbnRzXCIpKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFBhZ2VJbmRleCA9PT0gcGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZShbY3VycmVudE5vZGUsIG51bGxdKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQYWdlIGRpY3Rpb25hcnkga2lkcyBvYmplY3QgaXMgbm90IGFuIGFycmF5LlwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgbGFzdCA9IGtpZHMubGVuZ3RoIC0gMTsgbGFzdCA+PSAwOyBsYXN0LS0pIHtcbiAgICAgICAgICBub2Rlc1RvVmlzaXQucHVzaChraWRzW2xhc3RdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoYFBhZ2UgaW5kZXggJHtwYWdlSW5kZXh9IG5vdCBmb3VuZC5gKSk7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBnZXRQYWdlSW5kZXgocGFnZVJlZikge1xuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWY7XG5cbiAgICBmdW5jdGlvbiBwYWdlc0JlZm9yZVJlZihraWRSZWYpIHtcbiAgICAgIGxldCB0b3RhbCA9IDAsXG4gICAgICAgICAgcGFyZW50UmVmO1xuICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hBc3luYyhraWRSZWYpLnRoZW4oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZnNFcXVhbCkoa2lkUmVmLCBwYWdlUmVmKSAmJiAhKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSwgXCJQYWdlXCIpICYmICEoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSkgJiYgIW5vZGUuaGFzKFwiVHlwZVwiKSAmJiBub2RlLmhhcyhcIkNvbnRlbnRzXCIpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlRoZSByZWZlcmVuY2UgZG9lcyBub3QgcG9pbnQgdG8gYSAvUGFnZSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShub2RlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50UmVmID0gbm9kZS5nZXRSYXcoXCJQYXJlbnRcIik7XG4gICAgICAgIHJldHVybiBub2RlLmdldEFzeW5jKFwiUGFyZW50XCIpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHBhcmVudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRBc3luYyhcIktpZHNcIik7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChraWRzKSB7XG4gICAgICAgIGlmICgha2lkcykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2lkUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0ga2lkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2lkID0ga2lkc1tpXTtcblxuICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzUmVmKShraWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJLaWQgbXVzdCBiZSBhIHJlZmVyZW5jZS5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZnNFcXVhbCkoa2lkLCBraWRSZWYpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBraWRQcm9taXNlcy5wdXNoKHhyZWYuZmV0Y2hBc3luYyhraWQpLnRoZW4oZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmopKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIktpZCBub2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9iai5oYXMoXCJDb3VudFwiKSkge1xuICAgICAgICAgICAgICB0b3RhbCArPSBvYmouZ2V0KFwiQ291bnRcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0b3RhbCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJLaWQgcmVmZXJlbmNlIG5vdCBmb3VuZCBpbiBwYXJlbnQncyBraWRzLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChraWRQcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFt0b3RhbCwgcGFyZW50UmVmXTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgdG90YWwgPSAwO1xuXG4gICAgZnVuY3Rpb24gbmV4dChyZWYpIHtcbiAgICAgIHJldHVybiBwYWdlc0JlZm9yZVJlZihyZWYpLnRoZW4oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW2NvdW50LCBwYXJlbnRSZWZdID0gYXJncztcbiAgICAgICAgdG90YWwgKz0gY291bnQ7XG4gICAgICAgIHJldHVybiBuZXh0KHBhcmVudFJlZik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChwYWdlUmVmKTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZURlc3REaWN0aW9uYXJ5KHBhcmFtcykge1xuICAgIGZ1bmN0aW9uIGFkZERlZmF1bHRQcm90b2NvbFRvVXJsKHVybCkge1xuICAgICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKFwid3d3LlwiKSA/IGBodHRwOi8vJHt1cmx9YCA6IHVybDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cnlDb252ZXJ0VXJsRW5jb2RpbmcodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKDAsIF91dGlsLnN0cmluZ1RvVVRGOFN0cmluZykodXJsKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZXN0RGljdCA9IHBhcmFtcy5kZXN0RGljdDtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGVzdERpY3QpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgZGVzdERpY3RgIG11c3QgYmUgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRPYmogPSBwYXJhbXMucmVzdWx0T2JqO1xuXG4gICAgaWYgKHR5cGVvZiByZXN1bHRPYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcInBhcnNlRGVzdERpY3Rpb25hcnk6IGByZXN1bHRPYmpgIG11c3QgYmUgYW4gb2JqZWN0LlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkb2NCYXNlVXJsID0gcGFyYW1zLmRvY0Jhc2VVcmwgfHwgbnVsbDtcbiAgICBsZXQgYWN0aW9uID0gZGVzdERpY3QuZ2V0KFwiQVwiKSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkZXN0O1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhY3Rpb24pICYmIGRlc3REaWN0LmhhcyhcIkRlc3RcIikpIHtcbiAgICAgIGFjdGlvbiA9IGRlc3REaWN0LmdldChcIkRlc3RcIik7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGFjdGlvbikpIHtcbiAgICAgIGNvbnN0IGFjdGlvblR5cGUgPSBhY3Rpb24uZ2V0KFwiU1wiKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShhY3Rpb25UeXBlKSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJwYXJzZURlc3REaWN0aW9uYXJ5OiBJbnZhbGlkIHR5cGUgaW4gQWN0aW9uIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBhY3Rpb25UeXBlLm5hbWU7XG5cbiAgICAgIHN3aXRjaCAoYWN0aW9uTmFtZSkge1xuICAgICAgICBjYXNlIFwiVVJJXCI6XG4gICAgICAgICAgdXJsID0gYWN0aW9uLmdldChcIlVSSVwiKTtcblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh1cmwpKSB7XG4gICAgICAgICAgICB1cmwgPSBcIi9cIiArIHVybC5uYW1lO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh1cmwpKSB7XG4gICAgICAgICAgICB1cmwgPSBhZGREZWZhdWx0UHJvdG9jb2xUb1VybCh1cmwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJHb1RvXCI6XG4gICAgICAgICAgZGVzdCA9IGFjdGlvbi5nZXQoXCJEXCIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJMYXVuY2hcIjpcbiAgICAgICAgY2FzZSBcIkdvVG9SXCI6XG4gICAgICAgICAgY29uc3QgdXJsRGljdCA9IGFjdGlvbi5nZXQoXCJGXCIpO1xuXG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHVybERpY3QpKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmxEaWN0LmdldChcIkZcIikgfHwgbnVsbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykodXJsRGljdCkpIHtcbiAgICAgICAgICAgIHVybCA9IHVybERpY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHJlbW90ZURlc3QgPSBhY3Rpb24uZ2V0KFwiRFwiKTtcblxuICAgICAgICAgIGlmIChyZW1vdGVEZXN0KSB7XG4gICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocmVtb3RlRGVzdCkpIHtcbiAgICAgICAgICAgICAgcmVtb3RlRGVzdCA9IHJlbW90ZURlc3QubmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykodXJsKSkge1xuICAgICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gdXJsLnNwbGl0KFwiI1wiKVswXTtcblxuICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKShyZW1vdGVEZXN0KSkge1xuICAgICAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyBcIiNcIiArIHJlbW90ZURlc3Q7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZW1vdGVEZXN0KSkge1xuICAgICAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyBcIiNcIiArIEpTT04uc3RyaW5naWZ5KHJlbW90ZURlc3QpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbmV3V2luZG93ID0gYWN0aW9uLmdldChcIk5ld1dpbmRvd1wiKTtcblxuICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShuZXdXaW5kb3cpKSB7XG4gICAgICAgICAgICByZXN1bHRPYmoubmV3V2luZG93ID0gbmV3V2luZG93O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJOYW1lZFwiOlxuICAgICAgICAgIGNvbnN0IG5hbWVkQWN0aW9uID0gYWN0aW9uLmdldChcIk5cIik7XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkobmFtZWRBY3Rpb24pKSB7XG4gICAgICAgICAgICByZXN1bHRPYmouYWN0aW9uID0gbmFtZWRBY3Rpb24ubmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiSmF2YVNjcmlwdFwiOlxuICAgICAgICAgIGNvbnN0IGpzQWN0aW9uID0gYWN0aW9uLmdldChcIkpTXCIpO1xuICAgICAgICAgIGxldCBqcztcblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGpzQWN0aW9uKSkge1xuICAgICAgICAgICAganMgPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoanNBY3Rpb24uZ2V0Qnl0ZXMoKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGpzQWN0aW9uKSkge1xuICAgICAgICAgICAganMgPSBqc0FjdGlvbjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoanMpIHtcbiAgICAgICAgICAgIGNvbnN0IFVSTF9PUEVOX01FVEhPRFMgPSBbXCJhcHAubGF1bmNoVVJMXCIsIFwid2luZG93Lm9wZW5cIl07XG4gICAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCJeXFxcXHMqKFwiICsgVVJMX09QRU5fTUVUSE9EUy5qb2luKFwifFwiKS5zcGxpdChcIi5cIikuam9pbihcIlxcXFwuXCIpICsgXCIpXFxcXCgoPzonfFxcXCIpKFteJ1xcXCJdKikoPzonfFxcXCIpKD86LFxcXFxzKihcXFxcdyspXFxcXCl8XFxcXCkpXCIsIFwiaVwiKTtcbiAgICAgICAgICAgIGNvbnN0IGpzVXJsID0gcmVnZXguZXhlYygoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGpzKSk7XG5cbiAgICAgICAgICAgIGlmIChqc1VybCAmJiBqc1VybFsyXSkge1xuICAgICAgICAgICAgICB1cmwgPSBqc1VybFsyXTtcblxuICAgICAgICAgICAgICBpZiAoanNVcmxbM10gPT09IFwidHJ1ZVwiICYmIGpzVXJsWzFdID09PSBcImFwcC5sYXVuY2hVUkxcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdE9iai5uZXdXaW5kb3cgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBwYXJzZURlc3REaWN0aW9uYXJ5OiB1bnN1cHBvcnRlZCBhY3Rpb24gdHlwZSBcIiR7YWN0aW9uTmFtZX1cIi5gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlc3REaWN0LmhhcyhcIkRlc3RcIikpIHtcbiAgICAgIGRlc3QgPSBkZXN0RGljdC5nZXQoXCJEZXN0XCIpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybCkpIHtcbiAgICAgIHVybCA9IHRyeUNvbnZlcnRVcmxFbmNvZGluZyh1cmwpO1xuICAgICAgY29uc3QgYWJzb2x1dGVVcmwgPSAoMCwgX3V0aWwuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCkodXJsLCBkb2NCYXNlVXJsKTtcblxuICAgICAgaWYgKGFic29sdXRlVXJsKSB7XG4gICAgICAgIHJlc3VsdE9iai51cmwgPSBhYnNvbHV0ZVVybC5ocmVmO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRPYmoudW5zYWZlVXJsID0gdXJsO1xuICAgIH1cblxuICAgIGlmIChkZXN0KSB7XG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZGVzdCkpIHtcbiAgICAgICAgZGVzdCA9IGRlc3QubmFtZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoZGVzdCkgfHwgQXJyYXkuaXNBcnJheShkZXN0KSkge1xuICAgICAgICByZXN1bHRPYmouZGVzdCA9IGRlc3Q7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5DYXRhbG9nID0gQ2F0YWxvZztcblxudmFyIFhSZWYgPSBmdW5jdGlvbiBYUmVmQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gWFJlZihzdHJlYW0sIHBkZk1hbmFnZXIpIHtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLnBkZk1hbmFnZXIgPSBwZGZNYW5hZ2VyO1xuICAgIHRoaXMuZW50cmllcyA9IFtdO1xuICAgIHRoaXMueHJlZnN0bXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2NhY2hlTWFwID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuc3RhdHMgPSB7XG4gICAgICBzdHJlYW1UeXBlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIGZvbnRUeXBlczogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgIH07XG4gIH1cblxuICBYUmVmLnByb3RvdHlwZSA9IHtcbiAgICBzZXRTdGFydFhSZWY6IGZ1bmN0aW9uIFhSZWZfc2V0U3RhcnRYUmVmKHN0YXJ0WFJlZikge1xuICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZSA9IFtzdGFydFhSZWZdO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIFhSZWZfcGFyc2UocmVjb3ZlcnlNb2RlKSB7XG4gICAgICB2YXIgdHJhaWxlckRpY3Q7XG5cbiAgICAgIGlmICghcmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgIHRyYWlsZXJEaWN0ID0gdGhpcy5yZWFkWFJlZigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW5kZXhpbmcgYWxsIFBERiBvYmplY3RzXCIpO1xuICAgICAgICB0cmFpbGVyRGljdCA9IHRoaXMuaW5kZXhPYmplY3RzKCk7XG4gICAgICB9XG5cbiAgICAgIHRyYWlsZXJEaWN0LmFzc2lnblhyZWYodGhpcyk7XG4gICAgICB0aGlzLnRyYWlsZXIgPSB0cmFpbGVyRGljdDtcbiAgICAgIGxldCBlbmNyeXB0O1xuXG4gICAgICB0cnkge1xuICAgICAgICBlbmNyeXB0ID0gdHJhaWxlckRpY3QuZ2V0KFwiRW5jcnlwdFwiKTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cblxuICAgICAgICAoMCwgX3V0aWwud2FybikoYFhSZWYucGFyc2UgLSBJbnZhbGlkIFwiRW5jcnlwdFwiIHJlZmVyZW5jZTogXCIke2V4fVwiLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jcnlwdCkpIHtcbiAgICAgICAgdmFyIGlkcyA9IHRyYWlsZXJEaWN0LmdldChcIklEXCIpO1xuICAgICAgICB2YXIgZmlsZUlkID0gaWRzICYmIGlkcy5sZW5ndGggPyBpZHNbMF0gOiBcIlwiO1xuICAgICAgICBlbmNyeXB0LnN1cHByZXNzRW5jcnlwdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZW5jcnlwdCA9IG5ldyBfY3J5cHRvLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkoZW5jcnlwdCwgZmlsZUlkLCB0aGlzLnBkZk1hbmFnZXIucGFzc3dvcmQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcm9vdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcm9vdCA9IHRyYWlsZXJEaWN0LmdldChcIlJvb3RcIik7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYUmVmLnBhcnNlIC0gSW52YWxpZCBcIlJvb3RcIiByZWZlcmVuY2U6IFwiJHtleH1cIi5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHJvb3QpICYmIHJvb3QuaGFzKFwiUGFnZXNcIikpIHtcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghcmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCByb290IHJlZmVyZW5jZVwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHByb2Nlc3NYUmVmVGFibGU6IGZ1bmN0aW9uIFhSZWZfcHJvY2Vzc1hSZWZUYWJsZShwYXJzZXIpIHtcbiAgICAgIGlmICghKFwidGFibGVTdGF0ZVwiIGluIHRoaXMpKSB7XG4gICAgICAgIHRoaXMudGFibGVTdGF0ZSA9IHtcbiAgICAgICAgICBlbnRyeU51bTogMCxcbiAgICAgICAgICBzdHJlYW1Qb3M6IHBhcnNlci5sZXhlci5zdHJlYW0ucG9zLFxuICAgICAgICAgIHBhcnNlckJ1ZjE6IHBhcnNlci5idWYxLFxuICAgICAgICAgIHBhcnNlckJ1ZjI6IHBhcnNlci5idWYyXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBvYmogPSB0aGlzLnJlYWRYUmVmVGFibGUocGFyc2VyKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJ0cmFpbGVyXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IGZpbmQgdHJhaWxlciBkaWN0aW9uYXJ5XCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGljdCA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkaWN0KSAmJiBkaWN0LmRpY3QpIHtcbiAgICAgICAgZGljdCA9IGRpY3QuZGljdDtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkaWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnlcIik7XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSB0aGlzLnRhYmxlU3RhdGU7XG4gICAgICByZXR1cm4gZGljdDtcbiAgICB9LFxuICAgIHJlYWRYUmVmVGFibGU6IGZ1bmN0aW9uIFhSZWZfcmVhZFhSZWZUYWJsZShwYXJzZXIpIHtcbiAgICAgIHZhciBzdHJlYW0gPSBwYXJzZXIubGV4ZXIuc3RyZWFtO1xuICAgICAgdmFyIHRhYmxlU3RhdGUgPSB0aGlzLnRhYmxlU3RhdGU7XG4gICAgICBzdHJlYW0ucG9zID0gdGFibGVTdGF0ZS5zdHJlYW1Qb3M7XG4gICAgICBwYXJzZXIuYnVmMSA9IHRhYmxlU3RhdGUucGFyc2VyQnVmMTtcbiAgICAgIHBhcnNlci5idWYyID0gdGFibGVTdGF0ZS5wYXJzZXJCdWYyO1xuICAgICAgdmFyIG9iajtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKCEoXCJmaXJzdEVudHJ5TnVtXCIgaW4gdGFibGVTdGF0ZSkgfHwgIShcImVudHJ5Q291bnRcIiBpbiB0YWJsZVN0YXRlKSkge1xuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiA9IHBhcnNlci5nZXRPYmooKSwgXCJ0cmFpbGVyXCIpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWJsZVN0YXRlLmZpcnN0RW50cnlOdW0gPSBvYmo7XG4gICAgICAgICAgdGFibGVTdGF0ZS5lbnRyeUNvdW50ID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpcnN0ID0gdGFibGVTdGF0ZS5maXJzdEVudHJ5TnVtO1xuICAgICAgICB2YXIgY291bnQgPSB0YWJsZVN0YXRlLmVudHJ5Q291bnQ7XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpcnN0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihjb3VudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgdGFibGU6IHdyb25nIHR5cGVzIGluIHN1YnNlY3Rpb24gaGVhZGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IHRhYmxlU3RhdGUuZW50cnlOdW07IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgdGFibGVTdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICAgIHRhYmxlU3RhdGUuZW50cnlOdW0gPSBpO1xuICAgICAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMSA9IHBhcnNlci5idWYxO1xuICAgICAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMiA9IHBhcnNlci5idWYyO1xuICAgICAgICAgIHZhciBlbnRyeSA9IHt9O1xuICAgICAgICAgIGVudHJ5Lm9mZnNldCA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICBlbnRyeS5nZW4gPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgdmFyIHR5cGUgPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkNtZCkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlLmNtZCkge1xuICAgICAgICAgICAgICBjYXNlIFwiZlwiOlxuICAgICAgICAgICAgICAgIGVudHJ5LmZyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJuXCI6XG4gICAgICAgICAgICAgICAgZW50cnkudW5jb21wcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZW50cnkub2Zmc2V0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihlbnRyeS5nZW4pIHx8ICEoZW50cnkuZnJlZSB8fCBlbnRyeS51bmNvbXByZXNzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgZW50cnkgaW4gWFJlZiBzdWJzZWN0aW9uOiAke2ZpcnN0fSwgJHtjb3VudH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaSA9PT0gMCAmJiBlbnRyeS5mcmVlICYmIGZpcnN0ID09PSAxKSB7XG4gICAgICAgICAgICBmaXJzdCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLmVudHJpZXNbaSArIGZpcnN0XSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzW2kgKyBmaXJzdF0gPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZVN0YXRlLmVudHJ5TnVtID0gMDtcbiAgICAgICAgdGFibGVTdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICB0YWJsZVN0YXRlLnBhcnNlckJ1ZjEgPSBwYXJzZXIuYnVmMTtcbiAgICAgICAgdGFibGVTdGF0ZS5wYXJzZXJCdWYyID0gcGFyc2VyLmJ1ZjI7XG4gICAgICAgIGRlbGV0ZSB0YWJsZVN0YXRlLmZpcnN0RW50cnlOdW07XG4gICAgICAgIGRlbGV0ZSB0YWJsZVN0YXRlLmVudHJ5Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVudHJpZXNbMF0gJiYgIXRoaXMuZW50cmllc1swXS5mcmVlKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiB0YWJsZTogdW5leHBlY3RlZCBmaXJzdCBvYmplY3RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICBwcm9jZXNzWFJlZlN0cmVhbTogZnVuY3Rpb24gWFJlZl9wcm9jZXNzWFJlZlN0cmVhbShzdHJlYW0pIHtcbiAgICAgIGlmICghKFwic3RyZWFtU3RhdGVcIiBpbiB0aGlzKSkge1xuICAgICAgICB2YXIgc3RyZWFtUGFyYW1ldGVycyA9IHN0cmVhbS5kaWN0O1xuICAgICAgICB2YXIgYnl0ZVdpZHRocyA9IHN0cmVhbVBhcmFtZXRlcnMuZ2V0KFwiV1wiKTtcbiAgICAgICAgdmFyIHJhbmdlID0gc3RyZWFtUGFyYW1ldGVycy5nZXQoXCJJbmRleFwiKTtcblxuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgcmFuZ2UgPSBbMCwgc3RyZWFtUGFyYW1ldGVycy5nZXQoXCJTaXplXCIpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RyZWFtU3RhdGUgPSB7XG4gICAgICAgICAgZW50cnlSYW5nZXM6IHJhbmdlLFxuICAgICAgICAgIGJ5dGVXaWR0aHMsXG4gICAgICAgICAgZW50cnlOdW06IDAsXG4gICAgICAgICAgc3RyZWFtUG9zOiBzdHJlYW0ucG9zXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVhZFhSZWZTdHJlYW0oc3RyZWFtKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnN0cmVhbVN0YXRlO1xuICAgICAgcmV0dXJuIHN0cmVhbS5kaWN0O1xuICAgIH0sXG4gICAgcmVhZFhSZWZTdHJlYW06IGZ1bmN0aW9uIFhSZWZfcmVhZFhSZWZTdHJlYW0oc3RyZWFtKSB7XG4gICAgICB2YXIgaSwgajtcbiAgICAgIHZhciBzdHJlYW1TdGF0ZSA9IHRoaXMuc3RyZWFtU3RhdGU7XG4gICAgICBzdHJlYW0ucG9zID0gc3RyZWFtU3RhdGUuc3RyZWFtUG9zO1xuICAgICAgdmFyIGJ5dGVXaWR0aHMgPSBzdHJlYW1TdGF0ZS5ieXRlV2lkdGhzO1xuICAgICAgdmFyIHR5cGVGaWVsZFdpZHRoID0gYnl0ZVdpZHRoc1swXTtcbiAgICAgIHZhciBvZmZzZXRGaWVsZFdpZHRoID0gYnl0ZVdpZHRoc1sxXTtcbiAgICAgIHZhciBnZW5lcmF0aW9uRmllbGRXaWR0aCA9IGJ5dGVXaWR0aHNbMl07XG4gICAgICB2YXIgZW50cnlSYW5nZXMgPSBzdHJlYW1TdGF0ZS5lbnRyeVJhbmdlcztcblxuICAgICAgd2hpbGUgKGVudHJ5UmFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gZW50cnlSYW5nZXNbMF07XG4gICAgICAgIHZhciBuID0gZW50cnlSYW5nZXNbMV07XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpcnN0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihuKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIHJhbmdlIGZpZWxkczogJHtmaXJzdH0sICR7bn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih0eXBlRmllbGRXaWR0aCkgfHwgIU51bWJlci5pc0ludGVnZXIob2Zmc2V0RmllbGRXaWR0aCkgfHwgIU51bWJlci5pc0ludGVnZXIoZ2VuZXJhdGlvbkZpZWxkV2lkdGgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgZW50cnkgZmllbGRzIGxlbmd0aDogJHtmaXJzdH0sICR7bn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IHN0cmVhbVN0YXRlLmVudHJ5TnVtOyBpIDwgbjsgKytpKSB7XG4gICAgICAgICAgc3RyZWFtU3RhdGUuZW50cnlOdW0gPSBpO1xuICAgICAgICAgIHN0cmVhbVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgdmFyIHR5cGUgPSAwLFxuICAgICAgICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICAgICAgICBnZW5lcmF0aW9uID0gMDtcblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB0eXBlRmllbGRXaWR0aDsgKytqKSB7XG4gICAgICAgICAgICB0eXBlID0gdHlwZSA8PCA4IHwgc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZUZpZWxkV2lkdGggPT09IDApIHtcbiAgICAgICAgICAgIHR5cGUgPSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBvZmZzZXRGaWVsZFdpZHRoOyArK2opIHtcbiAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCA8PCA4IHwgc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VuZXJhdGlvbkZpZWxkV2lkdGg7ICsraikge1xuICAgICAgICAgICAgZ2VuZXJhdGlvbiA9IGdlbmVyYXRpb24gPDwgOCB8IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVudHJ5ID0ge307XG4gICAgICAgICAgZW50cnkub2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICAgIGVudHJ5LmdlbiA9IGdlbmVyYXRpb247XG5cbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgZW50cnkuZnJlZSA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGVudHJ5LnVuY29tcHJlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiBlbnRyeSB0eXBlOiAke3R5cGV9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLmVudHJpZXNbZmlyc3QgKyBpXSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzW2ZpcnN0ICsgaV0gPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW1TdGF0ZS5lbnRyeU51bSA9IDA7XG4gICAgICAgIHN0cmVhbVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgIGVudHJ5UmFuZ2VzLnNwbGljZSgwLCAyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluZGV4T2JqZWN0czogZnVuY3Rpb24gWFJlZl9pbmRleE9iamVjdHMoKSB7XG4gICAgICB2YXIgVEFCID0gMHg5LFxuICAgICAgICAgIExGID0gMHhhLFxuICAgICAgICAgIENSID0gMHhkLFxuICAgICAgICAgIFNQQUNFID0gMHgyMDtcbiAgICAgIHZhciBQRVJDRU5UID0gMHgyNSxcbiAgICAgICAgICBMVCA9IDB4M2M7XG5cbiAgICAgIGZ1bmN0aW9uIHJlYWRUb2tlbihkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgdmFyIHRva2VuID0gXCJcIixcbiAgICAgICAgICAgIGNoID0gZGF0YVtvZmZzZXRdO1xuXG4gICAgICAgIHdoaWxlIChjaCAhPT0gTEYgJiYgY2ggIT09IENSICYmIGNoICE9PSBMVCkge1xuICAgICAgICAgIGlmICgrK29mZnNldCA+PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rZW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgY2ggPSBkYXRhW29mZnNldF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNraXBVbnRpbChkYXRhLCBvZmZzZXQsIHdoYXQpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHdoYXQubGVuZ3RoLFxuICAgICAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgc2tpcHBlZCA9IDA7XG5cbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiBkYXRhW29mZnNldCArIGldID09PSB3aGF0W2ldKSB7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICBza2lwcGVkKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2tpcHBlZDtcbiAgICAgIH1cblxuICAgICAgdmFyIG9ialJlZ0V4cCA9IC9eKFxcZCspXFxzKyhcXGQrKVxccytvYmpcXGIvO1xuICAgICAgY29uc3QgZW5kb2JqUmVnRXhwID0gL1xcYmVuZG9ialtcXGJcXHNdJC87XG4gICAgICBjb25zdCBuZXN0ZWRPYmpSZWdFeHAgPSAvXFxzKyhcXGQrXFxzK1xcZCtcXHMrb2JqW1xcYlxcczxdKSQvO1xuICAgICAgY29uc3QgQ0hFQ0tfQ09OVEVOVF9MRU5HVEggPSAyNTtcbiAgICAgIHZhciB0cmFpbGVyQnl0ZXMgPSBuZXcgVWludDhBcnJheShbMTE2LCAxMTQsIDk3LCAxMDUsIDEwOCwgMTAxLCAxMTRdKTtcbiAgICAgIHZhciBzdGFydHhyZWZCeXRlcyA9IG5ldyBVaW50OEFycmF5KFsxMTUsIDExNiwgOTcsIDExNCwgMTE2LCAxMjAsIDExNCwgMTAxLCAxMDJdKTtcbiAgICAgIGNvbnN0IG9iakJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzExMSwgOTgsIDEwNl0pO1xuICAgICAgdmFyIHhyZWZCeXRlcyA9IG5ldyBVaW50OEFycmF5KFs0NywgODgsIDgyLCAxMDEsIDEwMl0pO1xuICAgICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgICBzdHJlYW0ucG9zID0gMDtcbiAgICAgIHZhciBidWZmZXIgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgIHZhciBwb3NpdGlvbiA9IHN0cmVhbS5zdGFydCxcbiAgICAgICAgICBsZW5ndGggPSBidWZmZXIubGVuZ3RoO1xuICAgICAgdmFyIHRyYWlsZXJzID0gW10sXG4gICAgICAgICAgeHJlZlN0bXMgPSBbXTtcblxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBjaCA9IGJ1ZmZlcltwb3NpdGlvbl07XG5cbiAgICAgICAgaWYgKGNoID09PSBUQUIgfHwgY2ggPT09IExGIHx8IGNoID09PSBDUiB8fCBjaCA9PT0gU1BBQ0UpIHtcbiAgICAgICAgICArK3Bvc2l0aW9uO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSBQRVJDRU5UKSB7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgKytwb3NpdGlvbjtcblxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2ggPSBidWZmZXJbcG9zaXRpb25dO1xuICAgICAgICAgIH0gd2hpbGUgKGNoICE9PSBMRiAmJiBjaCAhPT0gQ1IpO1xuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG9rZW4gPSByZWFkVG9rZW4oYnVmZmVyLCBwb3NpdGlvbik7XG4gICAgICAgIHZhciBtO1xuXG4gICAgICAgIGlmICh0b2tlbi5zdGFydHNXaXRoKFwieHJlZlwiKSAmJiAodG9rZW4ubGVuZ3RoID09PSA0IHx8IC9cXHMvLnRlc3QodG9rZW5bNF0pKSkge1xuICAgICAgICAgIHBvc2l0aW9uICs9IHNraXBVbnRpbChidWZmZXIsIHBvc2l0aW9uLCB0cmFpbGVyQnl0ZXMpO1xuICAgICAgICAgIHRyYWlsZXJzLnB1c2gocG9zaXRpb24pO1xuICAgICAgICAgIHBvc2l0aW9uICs9IHNraXBVbnRpbChidWZmZXIsIHBvc2l0aW9uLCBzdGFydHhyZWZCeXRlcyk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9IG9ialJlZ0V4cC5leGVjKHRva2VuKSkge1xuICAgICAgICAgIGNvbnN0IG51bSA9IG1bMV0gfCAwLFxuICAgICAgICAgICAgICAgIGdlbiA9IG1bMl0gfCAwO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLmVudHJpZXNbbnVtXSB8fCB0aGlzLmVudHJpZXNbbnVtXS5nZW4gPT09IGdlbikge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzW251bV0gPSB7XG4gICAgICAgICAgICAgIG9mZnNldDogcG9zaXRpb24gLSBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgIGdlbixcbiAgICAgICAgICAgICAgdW5jb21wcmVzc2VkOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgICAgICBzdGFydFBvcyA9IHBvc2l0aW9uICsgdG9rZW4ubGVuZ3RoO1xuXG4gICAgICAgICAgd2hpbGUgKHN0YXJ0UG9zIDwgYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZW5kUG9zID0gc3RhcnRQb3MgKyBza2lwVW50aWwoYnVmZmVyLCBzdGFydFBvcywgb2JqQnl0ZXMpICsgNDtcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGggPSBlbmRQb3MgLSBwb3NpdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrUG9zID0gTWF0aC5tYXgoZW5kUG9zIC0gQ0hFQ0tfQ09OVEVOVF9MRU5HVEgsIHN0YXJ0UG9zKTtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuU3RyID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGJ1ZmZlci5zdWJhcnJheShjaGVja1BvcywgZW5kUG9zKSk7XG5cbiAgICAgICAgICAgIGlmIChlbmRvYmpSZWdFeHAudGVzdCh0b2tlblN0cikpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBvYmpUb2tlbiA9IG5lc3RlZE9ialJlZ0V4cC5leGVjKHRva2VuU3RyKTtcblxuICAgICAgICAgICAgICBpZiAob2JqVG9rZW4gJiYgb2JqVG9rZW5bMV0pIHtcbiAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ2luZGV4T2JqZWN0czogRm91bmQgbmV3IFwib2JqXCIgaW5zaWRlIG9mIGFub3RoZXIgXCJvYmpcIiwgJyArICdjYXVzZWQgYnkgbWlzc2luZyBcImVuZG9ialwiIC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICAgICAgICAgICAgICAgIGNvbnRlbnRMZW5ndGggLT0gb2JqVG9rZW5bMV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBidWZmZXIuc3ViYXJyYXkocG9zaXRpb24sIHBvc2l0aW9uICsgY29udGVudExlbmd0aCk7XG4gICAgICAgICAgdmFyIHhyZWZUYWdPZmZzZXQgPSBza2lwVW50aWwoY29udGVudCwgMCwgeHJlZkJ5dGVzKTtcblxuICAgICAgICAgIGlmICh4cmVmVGFnT2Zmc2V0IDwgY29udGVudExlbmd0aCAmJiBjb250ZW50W3hyZWZUYWdPZmZzZXQgKyA1XSA8IDY0KSB7XG4gICAgICAgICAgICB4cmVmU3Rtcy5wdXNoKHBvc2l0aW9uIC0gc3RyZWFtLnN0YXJ0KTtcbiAgICAgICAgICAgIHRoaXMueHJlZnN0bXNbcG9zaXRpb24gLSBzdHJlYW0uc3RhcnRdID0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwb3NpdGlvbiArPSBjb250ZW50TGVuZ3RoO1xuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnN0YXJ0c1dpdGgoXCJ0cmFpbGVyXCIpICYmICh0b2tlbi5sZW5ndGggPT09IDcgfHwgL1xccy8udGVzdCh0b2tlbls3XSkpKSB7XG4gICAgICAgICAgdHJhaWxlcnMucHVzaChwb3NpdGlvbik7XG4gICAgICAgICAgcG9zaXRpb24gKz0gc2tpcFVudGlsKGJ1ZmZlciwgcG9zaXRpb24sIHN0YXJ0eHJlZkJ5dGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb3NpdGlvbiArPSB0b2tlbi5sZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpLCBpaTtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSB4cmVmU3Rtcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaCh4cmVmU3Rtc1tpXSk7XG4gICAgICAgIHRoaXMucmVhZFhSZWYodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB0cmFpbGVyRGljdDtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSB0cmFpbGVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHN0cmVhbS5wb3MgPSB0cmFpbGVyc1tpXTtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IF9wYXJzZXIuUGFyc2VyKHtcbiAgICAgICAgICBsZXhlcjogbmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtKSxcbiAgICAgICAgICB4cmVmOiB0aGlzLFxuICAgICAgICAgIGFsbG93U3RyZWFtczogdHJ1ZSxcbiAgICAgICAgICByZWNvdmVyeU1vZGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBvYmogPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJ0cmFpbGVyXCIpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWN0ID0gcGFyc2VyLmdldE9iaigpO1xuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByb290RGljdDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJvb3REaWN0ID0gZGljdC5nZXQoXCJSb290XCIpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocm9vdERpY3QpIHx8ICFyb290RGljdC5oYXMoXCJQYWdlc1wiKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpY3QuaGFzKFwiSURcIikpIHtcbiAgICAgICAgICByZXR1cm4gZGljdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYWlsZXJEaWN0ID0gZGljdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYWlsZXJEaWN0KSB7XG4gICAgICAgIHJldHVybiB0cmFpbGVyRGljdDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IF91dGlsLkludmFsaWRQREZFeGNlcHRpb24oXCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUuXCIpO1xuICAgIH0sXG4gICAgcmVhZFhSZWY6IGZ1bmN0aW9uIFhSZWZfcmVhZFhSZWYocmVjb3ZlcnlNb2RlKSB7XG4gICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgICBjb25zdCBzdGFydFhSZWZQYXJzZWRDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBzdGFydFhSZWYgPSB0aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO1xuXG4gICAgICAgICAgaWYgKHN0YXJ0WFJlZlBhcnNlZENhY2hlW3N0YXJ0WFJlZl0pIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcInJlYWRYUmVmIC0gc2tpcHBpbmcgWFJlZiB0YWJsZSBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwYXJzZWQuXCIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RhcnRYUmVmUGFyc2VkQ2FjaGVbc3RhcnRYUmVmXSA9IHRydWU7XG4gICAgICAgICAgc3RyZWFtLnBvcyA9IHN0YXJ0WFJlZiArIHN0cmVhbS5zdGFydDtcbiAgICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIoe1xuICAgICAgICAgICAgbGV4ZXI6IG5ldyBfcGFyc2VyLkxleGVyKHN0cmVhbSksXG4gICAgICAgICAgICB4cmVmOiB0aGlzLFxuICAgICAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIG9iaiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICB2YXIgZGljdDtcblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJ4cmVmXCIpKSB7XG4gICAgICAgICAgICBkaWN0ID0gdGhpcy5wcm9jZXNzWFJlZlRhYmxlKHBhcnNlcik7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50b3BEaWN0KSB7XG4gICAgICAgICAgICAgIHRoaXMudG9wRGljdCA9IGRpY3Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9iaiA9IGRpY3QuZ2V0KFwiWFJlZlN0bVwiKTtcblxuICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICAgICAgICB2YXIgcG9zID0gb2JqO1xuXG4gICAgICAgICAgICAgIGlmICghKHBvcyBpbiB0aGlzLnhyZWZzdG1zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMueHJlZnN0bXNbcG9zXSA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKHBvcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlci5nZXRPYmooKSkgfHwgISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkocGFyc2VyLmdldE9iaigpLCBcIm9ialwiKSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShvYmogPSBwYXJzZXIuZ2V0T2JqKCkpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiBzdHJlYW1cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpY3QgPSB0aGlzLnByb2Nlc3NYUmVmU3RyZWFtKG9iaik7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50b3BEaWN0KSB7XG4gICAgICAgICAgICAgIHRoaXMudG9wRGljdCA9IGRpY3Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZGljdCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJGYWlsZWQgdG8gcmVhZCBYUmVmIHN0cmVhbVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBYUmVmIHN0cmVhbSBoZWFkZXJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2JqID0gZGljdC5nZXQoXCJQcmV2XCIpO1xuXG4gICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKG9iaik7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaChvYmoubnVtKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50b3BEaWN0O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIih3aGlsZSByZWFkaW5nIFhSZWYpOiBcIiArIGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmUGFyc2VFeGNlcHRpb24oKTtcbiAgICB9LFxuICAgIGdldEVudHJ5OiBmdW5jdGlvbiBYUmVmX2dldEVudHJ5KGkpIHtcbiAgICAgIHZhciB4cmVmRW50cnkgPSB0aGlzLmVudHJpZXNbaV07XG5cbiAgICAgIGlmICh4cmVmRW50cnkgJiYgIXhyZWZFbnRyeS5mcmVlICYmIHhyZWZFbnRyeS5vZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHhyZWZFbnRyeTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBmZXRjaElmUmVmOiBmdW5jdGlvbiBYUmVmX2ZldGNoSWZSZWYob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2gob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgZmV0Y2g6IGZ1bmN0aW9uIFhSZWZfZmV0Y2gocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pIHtcbiAgICAgIGlmICghKHJlZiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmIG9iamVjdCBpcyBub3QgYSByZWZlcmVuY2VcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG51bSA9IHJlZi5udW07XG5cbiAgICAgIGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLl9jYWNoZU1hcC5nZXQobnVtKTtcblxuICAgICAgaWYgKGNhY2hlRW50cnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FjaGVFbnRyeSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgJiYgIWNhY2hlRW50cnkub2JqSWQpIHtcbiAgICAgICAgICBjYWNoZUVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGVFbnRyeTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhyZWZFbnRyeSA9IHRoaXMuZ2V0RW50cnkobnVtKTtcblxuICAgICAgaWYgKHhyZWZFbnRyeSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9jYWNoZU1hcC5zZXQobnVtLCB4cmVmRW50cnkpO1xuXG4gICAgICAgIHJldHVybiB4cmVmRW50cnk7XG4gICAgICB9XG5cbiAgICAgIGlmICh4cmVmRW50cnkudW5jb21wcmVzc2VkKSB7XG4gICAgICAgIHhyZWZFbnRyeSA9IHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQocmVmLCB4cmVmRW50cnksIHN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4cmVmRW50cnkgPSB0aGlzLmZldGNoQ29tcHJlc3NlZChyZWYsIHhyZWZFbnRyeSwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHhyZWZFbnRyeSkpIHtcbiAgICAgICAgeHJlZkVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeHJlZkVudHJ5KSkge1xuICAgICAgICB4cmVmRW50cnkuZGljdC5vYmpJZCA9IHJlZi50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geHJlZkVudHJ5O1xuICAgIH0sXG5cbiAgICBmZXRjaFVuY29tcHJlc3NlZChyZWYsIHhyZWZFbnRyeSwgc3VwcHJlc3NFbmNyeXB0aW9uID0gZmFsc2UpIHtcbiAgICAgIHZhciBnZW4gPSByZWYuZ2VuO1xuICAgICAgdmFyIG51bSA9IHJlZi5udW07XG5cbiAgICAgIGlmICh4cmVmRW50cnkuZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZFbnRyeUV4Y2VwdGlvbihgSW5jb25zaXN0ZW50IGdlbmVyYXRpb24gaW4gWFJlZjogJHtyZWZ9YCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJlYW0gPSB0aGlzLnN0cmVhbS5tYWtlU3ViU3RyZWFtKHhyZWZFbnRyeS5vZmZzZXQgKyB0aGlzLnN0cmVhbS5zdGFydCk7XG4gICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIoe1xuICAgICAgICBsZXhlcjogbmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtKSxcbiAgICAgICAgeHJlZjogdGhpcyxcbiAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHZhciBvYmoxID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgdmFyIG9iajIgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICB2YXIgb2JqMyA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgaWYgKG9iajEgIT09IG51bSB8fCBvYmoyICE9PSBnZW4gfHwgIShvYmozIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuQ21kKSkge1xuICAgICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvYmozLmNtZCAhPT0gXCJvYmpcIikge1xuICAgICAgICBpZiAob2JqMy5jbWQuc3RhcnRzV2l0aChcIm9ialwiKSkge1xuICAgICAgICAgIG51bSA9IHBhcnNlSW50KG9iajMuY21kLnN1YnN0cmluZygzKSwgMTApO1xuXG4gICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVuY3J5cHQgJiYgIXN1cHByZXNzRW5jcnlwdGlvbikge1xuICAgICAgICB4cmVmRW50cnkgPSBwYXJzZXIuZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0obnVtLCBnZW4pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHhyZWZFbnRyeSA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHhyZWZFbnRyeSkpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVNYXAuc2V0KG51bSwgeHJlZkVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHhyZWZFbnRyeTtcbiAgICB9LFxuXG4gICAgZmV0Y2hDb21wcmVzc2VkKHJlZiwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24gPSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFibGVPZmZzZXQgPSB4cmVmRW50cnkub2Zmc2V0O1xuICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy5mZXRjaChfcHJpbWl0aXZlcy5SZWYuZ2V0KHRhYmxlT2Zmc2V0LCAwKSk7XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcImJhZCBPYmpTdG0gc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaXJzdCA9IHN0cmVhbS5kaWN0LmdldChcIkZpcnN0XCIpO1xuICAgICAgY29uc3QgbiA9IHN0cmVhbS5kaWN0LmdldChcIk5cIik7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihmaXJzdCkgfHwgIU51bWJlci5pc0ludGVnZXIobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiaW52YWxpZCBmaXJzdCBhbmQgbiBwYXJhbWV0ZXJzIGZvciBPYmpTdG0gc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIoe1xuICAgICAgICBsZXhlcjogbmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtKSxcbiAgICAgICAgeHJlZjogdGhpcyxcbiAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG51bXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobnVtKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke251bX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2Zmc2V0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke29mZnNldH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG51bXNbaV0gPSBudW07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVudHJpZXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgZW50cmllc1tpXSA9IG9iajtcblxuICAgICAgICBpZiAocGFyc2VyLmJ1ZjEgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5DbWQgJiYgcGFyc2VyLmJ1ZjEuY21kID09PSBcImVuZG9ialwiKSB7XG4gICAgICAgICAgcGFyc2VyLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShvYmopKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW0gPSBudW1zW2ldLFxuICAgICAgICAgICAgICBlbnRyeSA9IHRoaXMuZW50cmllc1tudW1dO1xuXG4gICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5vZmZzZXQgPT09IHRhYmxlT2Zmc2V0ICYmIGVudHJ5LmdlbiA9PT0gaSkge1xuICAgICAgICAgIHRoaXMuX2NhY2hlTWFwLnNldChudW0sIG9iaik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgeHJlZkVudHJ5ID0gZW50cmllc1t4cmVmRW50cnkuZ2VuXTtcblxuICAgICAgaWYgKHhyZWZFbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24oYEJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4cmVmRW50cnk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoSWZSZWZBc3luYyhvYmosIHN1cHByZXNzRW5jcnlwdGlvbikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaEFzeW5jKG9iaiwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hBc3luYyhyZWYsIHN1cHByZXNzRW5jcnlwdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2gocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgaWYgKCEoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpIHtcbiAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoZXguYmVnaW4sIGV4LmVuZCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoQXN5bmMocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRDYXRhbG9nT2JqOiBmdW5jdGlvbiBYUmVmX2dldENhdGFsb2dPYmooKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIFhSZWY7XG59KCk7XG5cbmV4cG9ydHMuWFJlZiA9IFhSZWY7XG5cbmNsYXNzIE5hbWVPck51bWJlclRyZWUge1xuICBjb25zdHJ1Y3Rvcihyb290LCB4cmVmLCB0eXBlKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IE5hbWVPck51bWJlclRyZWUpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBOYW1lT3JOdW1iZXJUcmVlLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gIH1cblxuICBnZXRBbGwoKSB7XG4gICAgY29uc3QgZGljdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdCkge1xuICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgfVxuXG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgcHJvY2Vzc2VkLnB1dCh0aGlzLnJvb3QpO1xuICAgIGNvbnN0IHF1ZXVlID0gW3RoaXMucm9vdF07XG5cbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb2JqID0geHJlZi5mZXRjaElmUmVmKHF1ZXVlLnNoaWZ0KCkpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvYmouaGFzKFwiS2lkc1wiKSkge1xuICAgICAgICBjb25zdCBraWRzID0gb2JqLmdldChcIktpZHNcIik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0ga2lkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2lkID0ga2lkc1tpXTtcblxuICAgICAgICAgIGlmIChwcm9jZXNzZWQuaGFzKGtpZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgRHVwbGljYXRlIGVudHJ5IGluIFwiJHt0aGlzLl90eXBlfVwiIHRyZWUuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcXVldWUucHVzaChraWQpO1xuICAgICAgICAgIHByb2Nlc3NlZC5wdXQoa2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbnRyaWVzID0gb2JqLmdldCh0aGlzLl90eXBlKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50cmllcykpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZW50cmllcy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICAgICAgZGljdFt4cmVmLmZldGNoSWZSZWYoZW50cmllc1tpXSldID0geHJlZi5mZXRjaElmUmVmKGVudHJpZXNbaSArIDFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaWN0O1xuICB9XG5cbiAgZ2V0KGtleSkge1xuICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmO1xuICAgIGxldCBraWRzT3JFbnRyaWVzID0geHJlZi5mZXRjaElmUmVmKHRoaXMucm9vdCk7XG4gICAgbGV0IGxvb3BDb3VudCA9IDA7XG4gICAgY29uc3QgTUFYX0xFVkVMUyA9IDEwO1xuXG4gICAgd2hpbGUgKGtpZHNPckVudHJpZXMuaGFzKFwiS2lkc1wiKSkge1xuICAgICAgaWYgKCsrbG9vcENvdW50ID4gTUFYX0xFVkVMUykge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYFNlYXJjaCBkZXB0aCBsaW1pdCByZWFjaGVkIGZvciBcIiR7dGhpcy5fdHlwZX1cIiB0cmVlLmApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2lkcyA9IGtpZHNPckVudHJpZXMuZ2V0KFwiS2lkc1wiKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBsZXQgbCA9IDAsXG4gICAgICAgICAgciA9IGtpZHMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKGwgPD0gcikge1xuICAgICAgICBjb25zdCBtID0gbCArIHIgPj4gMTtcbiAgICAgICAgY29uc3Qga2lkID0geHJlZi5mZXRjaElmUmVmKGtpZHNbbV0pO1xuICAgICAgICBjb25zdCBsaW1pdHMgPSBraWQuZ2V0KFwiTGltaXRzXCIpO1xuXG4gICAgICAgIGlmIChrZXkgPCB4cmVmLmZldGNoSWZSZWYobGltaXRzWzBdKSkge1xuICAgICAgICAgIHIgPSBtIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPiB4cmVmLmZldGNoSWZSZWYobGltaXRzWzFdKSkge1xuICAgICAgICAgIGwgPSBtICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBraWRzT3JFbnRyaWVzID0geHJlZi5mZXRjaElmUmVmKGtpZHNbbV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChsID4gcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlbnRyaWVzID0ga2lkc09yRW50cmllcy5nZXQodGhpcy5fdHlwZSk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgbGV0IGwgPSAwLFxuICAgICAgICAgIHIgPSBlbnRyaWVzLmxlbmd0aCAtIDI7XG5cbiAgICAgIHdoaWxlIChsIDw9IHIpIHtcbiAgICAgICAgY29uc3QgdG1wID0gbCArIHIgPj4gMSxcbiAgICAgICAgICAgICAgbSA9IHRtcCArICh0bXAgJiAxKTtcbiAgICAgICAgY29uc3QgY3VycmVudEtleSA9IHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW21dKTtcblxuICAgICAgICBpZiAoa2V5IDwgY3VycmVudEtleSkge1xuICAgICAgICAgIHIgPSBtIC0gMjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPiBjdXJyZW50S2V5KSB7XG4gICAgICAgICAgbCA9IG0gKyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB4cmVmLmZldGNoSWZSZWYoZW50cmllc1ttICsgMV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShgRmFsbGluZyBiYWNrIHRvIGFuIGV4aGF1c3RpdmUgc2VhcmNoLCBmb3Iga2V5IFwiJHtrZXl9XCIsIGAgKyBgaW4gXCIke3RoaXMuX3R5cGV9XCIgdHJlZS5gKTtcblxuICAgICAgZm9yIChsZXQgbSA9IDAsIG1tID0gZW50cmllcy5sZW5ndGg7IG0gPCBtbTsgbSArPSAyKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRLZXkgPSB4cmVmLmZldGNoSWZSZWYoZW50cmllc1ttXSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRLZXkgPT09IGtleSkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVGhlIFwiJHtrZXl9XCIga2V5IHdhcyBmb3VuZCBhdCBhbiBpbmNvcnJlY3QsIGAgKyBgaS5lLiBvdXQtb2Ytb3JkZXIsIHBvc2l0aW9uIGluIFwiJHt0aGlzLl90eXBlfVwiIHRyZWUuYCk7XG4gICAgICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW20gKyAxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIE5hbWVUcmVlIGV4dGVuZHMgTmFtZU9yTnVtYmVyVHJlZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QsIHhyZWYpIHtcbiAgICBzdXBlcihyb290LCB4cmVmLCBcIk5hbWVzXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTnVtYmVyVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWUge1xuICBjb25zdHJ1Y3Rvcihyb290LCB4cmVmKSB7XG4gICAgc3VwZXIocm9vdCwgeHJlZiwgXCJOdW1zXCIpO1xuICB9XG5cbn1cblxudmFyIEZpbGVTcGVjID0gZnVuY3Rpb24gRmlsZVNwZWNDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBGaWxlU3BlYyhyb290LCB4cmVmKSB7XG4gICAgaWYgKCFyb290IHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyb290KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIGlmIChyb290LmhhcyhcIkZTXCIpKSB7XG4gICAgICB0aGlzLmZzID0gcm9vdC5nZXQoXCJGU1wiKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcm9vdC5oYXMoXCJEZXNjXCIpID8gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShyb290LmdldChcIkRlc2NcIikpIDogXCJcIjtcblxuICAgIGlmIChyb290LmhhcyhcIlJGXCIpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJSZWxhdGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gdHJ1ZTtcblxuICAgIGlmICghcm9vdC5oYXMoXCJFRlwiKSkge1xuICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJOb24tZW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwaWNrUGxhdGZvcm1JdGVtKGRpY3QpIHtcbiAgICBpZiAoZGljdC5oYXMoXCJVRlwiKSkge1xuICAgICAgcmV0dXJuIGRpY3QuZ2V0KFwiVUZcIik7XG4gICAgfSBlbHNlIGlmIChkaWN0LmhhcyhcIkZcIikpIHtcbiAgICAgIHJldHVybiBkaWN0LmdldChcIkZcIik7XG4gICAgfSBlbHNlIGlmIChkaWN0LmhhcyhcIlVuaXhcIikpIHtcbiAgICAgIHJldHVybiBkaWN0LmdldChcIlVuaXhcIik7XG4gICAgfSBlbHNlIGlmIChkaWN0LmhhcyhcIk1hY1wiKSkge1xuICAgICAgcmV0dXJuIGRpY3QuZ2V0KFwiTWFjXCIpO1xuICAgIH0gZWxzZSBpZiAoZGljdC5oYXMoXCJET1NcIikpIHtcbiAgICAgIHJldHVybiBkaWN0LmdldChcIkRPU1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIEZpbGVTcGVjLnByb3RvdHlwZSA9IHtcbiAgICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgICBpZiAoIXRoaXMuX2ZpbGVuYW1lICYmIHRoaXMucm9vdCkge1xuICAgICAgICB2YXIgZmlsZW5hbWUgPSBwaWNrUGxhdGZvcm1JdGVtKHRoaXMucm9vdCkgfHwgXCJ1bm5hbWVkXCI7XG4gICAgICAgIHRoaXMuX2ZpbGVuYW1lID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShmaWxlbmFtZSkucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpLnJlcGxhY2UoL1xcXFxcXC8vZywgXCIvXCIpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gICAgfSxcblxuICAgIGdldCBjb250ZW50KCkge1xuICAgICAgaWYgKCF0aGlzLmNvbnRlbnRBdmFpbGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5jb250ZW50UmVmICYmIHRoaXMucm9vdCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRSZWYgPSBwaWNrUGxhdGZvcm1JdGVtKHRoaXMucm9vdC5nZXQoXCJFRlwiKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZW50ID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuY29udGVudFJlZikge1xuICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcbiAgICAgICAgdmFyIGZpbGVPYmogPSB4cmVmLmZldGNoSWZSZWYodGhpcy5jb250ZW50UmVmKTtcblxuICAgICAgICBpZiAoZmlsZU9iaiAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGZpbGVPYmopKSB7XG4gICAgICAgICAgY29udGVudCA9IGZpbGVPYmouZ2V0Qnl0ZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gcG9pbnRzIHRvIG5vbi1leGlzdGluZy9pbnZhbGlkIFwiICsgXCJjb250ZW50XCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvbnRlbnRcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0sXG5cbiAgICBnZXQgc2VyaWFsaXphYmxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZW5hbWU6IHRoaXMuZmlsZW5hbWUsXG4gICAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudFxuICAgICAgfTtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIEZpbGVTcGVjO1xufSgpO1xuXG5leHBvcnRzLkZpbGVTcGVjID0gRmlsZVNwZWM7XG5cbmNvbnN0IE9iamVjdExvYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gbWF5SGF2ZUNoaWxkcmVuKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmIHx8IHZhbHVlIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENoaWxkcmVuKG5vZGUsIG5vZGVzVG9WaXNpdCkge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKG5vZGUpKSB7XG4gICAgICBjb25zdCBkaWN0ID0gbm9kZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgPyBub2RlIDogbm9kZS5kaWN0O1xuICAgICAgY29uc3QgZGljdEtleXMgPSBkaWN0LmdldEtleXMoKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGljdEtleXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IGRpY3QuZ2V0UmF3KGRpY3RLZXlzW2ldKTtcblxuICAgICAgICBpZiAobWF5SGF2ZUNoaWxkcmVuKHJhd1ZhbHVlKSkge1xuICAgICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKHJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbm9kZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbm9kZVtpXTtcblxuICAgICAgICBpZiAobWF5SGF2ZUNoaWxkcmVuKHZhbHVlKSkge1xuICAgICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIE9iamVjdExvYWRlcihkaWN0LCBrZXlzLCB4cmVmKSB7XG4gICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICB0aGlzLmtleXMgPSBrZXlzO1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5yZWZTZXQgPSBudWxsO1xuICB9XG5cbiAgT2JqZWN0TG9hZGVyLnByb3RvdHlwZSA9IHtcbiAgICBhc3luYyBsb2FkKCkge1xuICAgICAgaWYgKCF0aGlzLnhyZWYuc3RyZWFtLmFsbENodW5rc0xvYWRlZCB8fCB0aGlzLnhyZWYuc3RyZWFtLmFsbENodW5rc0xvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAga2V5cyxcbiAgICAgICAgZGljdFxuICAgICAgfSA9IHRoaXM7XG4gICAgICB0aGlzLnJlZlNldCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgICAgIGNvbnN0IG5vZGVzVG9WaXNpdCA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBrZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSBkaWN0LmdldFJhdyhrZXlzW2ldKTtcblxuICAgICAgICBpZiAocmF3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKHJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fd2Fsayhub2Rlc1RvVmlzaXQpO1xuICAgIH0sXG5cbiAgICBhc3luYyBfd2Fsayhub2Rlc1RvVmlzaXQpIHtcbiAgICAgIGNvbnN0IG5vZGVzVG9SZXZpc2l0ID0gW107XG4gICAgICBjb25zdCBwZW5kaW5nUmVxdWVzdHMgPSBbXTtcblxuICAgICAgd2hpbGUgKG5vZGVzVG9WaXNpdC5sZW5ndGgpIHtcbiAgICAgICAgbGV0IGN1cnJlbnROb2RlID0gbm9kZXNUb1Zpc2l0LnBvcCgpO1xuXG4gICAgICAgIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgICAgIGlmICh0aGlzLnJlZlNldC5oYXMoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5yZWZTZXQucHV0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy54cmVmLmZldGNoKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgaWYgKCEoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGVzVG9SZXZpc2l0LnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3RzLnB1c2goe1xuICAgICAgICAgICAgICBiZWdpbjogZXguYmVnaW4sXG4gICAgICAgICAgICAgIGVuZDogZXguZW5kXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUuZ2V0QmFzZVN0cmVhbXMpIHtcbiAgICAgICAgICBjb25zdCBiYXNlU3RyZWFtcyA9IGN1cnJlbnROb2RlLmdldEJhc2VTdHJlYW1zKCk7XG4gICAgICAgICAgbGV0IGZvdW5kTWlzc2luZ0RhdGEgPSBmYWxzZTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGJhc2VTdHJlYW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IGJhc2VTdHJlYW1zW2ldO1xuXG4gICAgICAgICAgICBpZiAoc3RyZWFtLmFsbENodW5rc0xvYWRlZCAmJiAhc3RyZWFtLmFsbENodW5rc0xvYWRlZCgpKSB7XG4gICAgICAgICAgICAgIGZvdW5kTWlzc2luZ0RhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgYmVnaW46IHN0cmVhbS5zdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IHN0cmVhbS5lbmRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZvdW5kTWlzc2luZ0RhdGEpIHtcbiAgICAgICAgICAgIG5vZGVzVG9SZXZpc2l0LnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFkZENoaWxkcmVuKGN1cnJlbnROb2RlLCBub2Rlc1RvVmlzaXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGVuZGluZ1JlcXVlc3RzLmxlbmd0aCkge1xuICAgICAgICBhd2FpdCB0aGlzLnhyZWYuc3RyZWFtLm1hbmFnZXIucmVxdWVzdFJhbmdlcyhwZW5kaW5nUmVxdWVzdHMpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IG5vZGVzVG9SZXZpc2l0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNUb1JldmlzaXRbaV07XG5cbiAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgICAgICAgdGhpcy5yZWZTZXQucmVtb3ZlKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl93YWxrKG5vZGVzVG9SZXZpc2l0KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWZTZXQgPSBudWxsO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIE9iamVjdExvYWRlcjtcbn0oKTtcblxuZXhwb3J0cy5PYmplY3RMb2FkZXIgPSBPYmplY3RMb2FkZXI7XG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUGFyc2VyID0gZXhwb3J0cy5MaW5lYXJpemF0aW9uID0gZXhwb3J0cy5MZXhlciA9IHZvaWQgMDtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxudmFyIF9jY2l0dF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEzKTtcblxudmFyIF9qYmlnMl9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE1KTtcblxudmFyIF9qcGVnX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTgpO1xuXG52YXIgX2pweF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIwKTtcblxuY29uc3QgTUFYX0xFTkdUSF9UT19DQUNIRSA9IDEwMDA7XG5jb25zdCBNQVhfQURMRVIzMl9MRU5HVEggPSA1NTUyO1xuXG5mdW5jdGlvbiBjb21wdXRlQWRsZXIzMihieXRlcykge1xuICBjb25zdCBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgbGV0IGEgPSAxLFxuICAgICAgYiA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlc0xlbmd0aDsgKytpKSB7XG4gICAgYSArPSBieXRlc1tpXSAmIDB4ZmY7XG4gICAgYiArPSBhO1xuICB9XG5cbiAgcmV0dXJuIGIgJSA2NTUyMSA8PCAxNiB8IGEgJSA2NTUyMTtcbn1cblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGxleGVyLFxuICAgIHhyZWYsXG4gICAgYWxsb3dTdHJlYW1zID0gZmFsc2UsXG4gICAgcmVjb3ZlcnlNb2RlID0gZmFsc2VcbiAgfSkge1xuICAgIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgICB0aGlzLnhyZWYgPSB4cmVmO1xuICAgIHRoaXMuYWxsb3dTdHJlYW1zID0gYWxsb3dTdHJlYW1zO1xuICAgIHRoaXMucmVjb3ZlcnlNb2RlID0gcmVjb3ZlcnlNb2RlO1xuICAgIHRoaXMuaW1hZ2VDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5yZWZpbGwoKTtcbiAgfVxuXG4gIHJlZmlsbCgpIHtcbiAgICB0aGlzLmJ1ZjEgPSB0aGlzLmxleGVyLmdldE9iaigpO1xuICAgIHRoaXMuYnVmMiA9IHRoaXMubGV4ZXIuZ2V0T2JqKCk7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBpZiAodGhpcy5idWYyIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuQ21kICYmIHRoaXMuYnVmMi5jbWQgPT09IFwiSURcIikge1xuICAgICAgdGhpcy5idWYxID0gdGhpcy5idWYyO1xuICAgICAgdGhpcy5idWYyID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWYxID0gdGhpcy5idWYyO1xuICAgICAgdGhpcy5idWYyID0gdGhpcy5sZXhlci5nZXRPYmooKTtcbiAgICB9XG4gIH1cblxuICB0cnlTaGlmdCgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSA9IG51bGwpIHtcbiAgICBjb25zdCBidWYxID0gdGhpcy5idWYxO1xuICAgIHRoaXMuc2hpZnQoKTtcblxuICAgIGlmIChidWYxIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuQ21kKSB7XG4gICAgICBzd2l0Y2ggKGJ1ZjEuY21kKSB7XG4gICAgICAgIGNhc2UgXCJCSVwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VJbmxpbmVJbWFnZShjaXBoZXJUcmFuc2Zvcm0pO1xuXG4gICAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcblxuICAgICAgICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjEsIFwiXVwiKSAmJiAhKDAsIF9wcmltaXRpdmVzLmlzRU9GKSh0aGlzLmJ1ZjEpKSB7XG4gICAgICAgICAgICBhcnJheS5wdXNoKHRoaXMuZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRW5kIG9mIGZpbGUgaW5zaWRlIGFycmF5XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICAgIHJldHVybiBhcnJheTtcblxuICAgICAgICBjYXNlIFwiPDxcIjpcbiAgICAgICAgICBjb25zdCBkaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKTtcblxuICAgICAgICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjEsIFwiPj5cIikgJiYgISgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0aGlzLmJ1ZjEpKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIk1hbGZvcm1lZCBkaWN0aW9uYXJ5OiBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0XCIpO1xuICAgICAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1ZjEubmFtZTtcbiAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcblxuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGljdC5zZXQoa2V5LCB0aGlzLmdldE9iaihjaXBoZXJUcmFuc2Zvcm0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRU9GKSh0aGlzLmJ1ZjEpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkVuZCBvZiBmaWxlIGluc2lkZSBkaWN0aW9uYXJ5XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGljdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjIsIFwic3RyZWFtXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxvd1N0cmVhbXMgPyB0aGlzLm1ha2VTdHJlYW0oZGljdCwgY2lwaGVyVHJhbnNmb3JtKSA6IGRpY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICAgIHJldHVybiBkaWN0O1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGJ1ZjE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoYnVmMSkpIHtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuYnVmMSkgJiYgKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjIsIFwiUlwiKSkge1xuICAgICAgICBjb25zdCByZWYgPSBfcHJpbWl0aXZlcy5SZWYuZ2V0KGJ1ZjEsIHRoaXMuYnVmMSk7XG5cbiAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiByZWY7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBidWYxO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYnVmMSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKGNpcGhlclRyYW5zZm9ybSkge1xuICAgICAgICByZXR1cm4gY2lwaGVyVHJhbnNmb3JtLmRlY3J5cHRTdHJpbmcoYnVmMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBidWYxO1xuICAgIH1cblxuICAgIHJldHVybiBidWYxO1xuICB9XG5cbiAgZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKSB7XG4gICAgY29uc3QgRSA9IDB4NDUsXG4gICAgICAgICAgSSA9IDB4NDksXG4gICAgICAgICAgU1BBQ0UgPSAweDIwLFxuICAgICAgICAgIExGID0gMHhhLFxuICAgICAgICAgIENSID0gMHhkO1xuICAgIGNvbnN0IG4gPSAxMCxcbiAgICAgICAgICBOVUwgPSAweDA7XG4gICAgY29uc3Qgc3RhcnRQb3MgPSBzdHJlYW0ucG9zO1xuICAgIGxldCBzdGF0ZSA9IDAsXG4gICAgICAgIGNoLFxuICAgICAgICBtYXliZUVJUG9zO1xuXG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgaWYgKHN0YXRlID09PSAwKSB7XG4gICAgICAgIHN0YXRlID0gY2ggPT09IEUgPyAxIDogMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IDEpIHtcbiAgICAgICAgc3RhdGUgPSBjaCA9PT0gSSA/IDIgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RhdGUgPT09IDIsIFwiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQgLSBpbnZhbGlkIHN0YXRlLlwiKTtcblxuICAgICAgICBpZiAoY2ggPT09IFNQQUNFIHx8IGNoID09PSBMRiB8fCBjaCA9PT0gQ1IpIHtcbiAgICAgICAgICBtYXliZUVJUG9zID0gc3RyZWFtLnBvcztcbiAgICAgICAgICBjb25zdCBmb2xsb3dpbmdCeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMobik7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmb2xsb3dpbmdCeXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICBjaCA9IGZvbGxvd2luZ0J5dGVzW2ldO1xuXG4gICAgICAgICAgICBpZiAoY2ggPT09IE5VTCAmJiBmb2xsb3dpbmdCeXRlc1tpICsgMV0gIT09IE5VTCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoICE9PSBMRiAmJiBjaCAhPT0gQ1IgJiYgKGNoIDwgU1BBQ0UgfHwgY2ggPiAweDdmKSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gMikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaCA9PT0gLTEpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBcIiArIFwiUmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aG91dCBmaW5kaW5nIGEgdmFsaWQgRUkgbWFya2VyXCIpO1xuXG4gICAgICBpZiAobWF5YmVFSVBvcykge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoJy4uLiB0cnlpbmcgdG8gcmVjb3ZlciBieSB1c2luZyB0aGUgbGFzdCBcIkVJXCIgb2NjdXJyZW5jZS4nKTtcbiAgICAgICAgc3RyZWFtLnNraXAoLShzdHJlYW0ucG9zIC0gbWF5YmVFSVBvcykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBlbmRPZmZzZXQgPSA0O1xuICAgIHN0cmVhbS5za2lwKC1lbmRPZmZzZXQpO1xuICAgIGNoID0gc3RyZWFtLnBlZWtCeXRlKCk7XG4gICAgc3RyZWFtLnNraXAoZW5kT2Zmc2V0KTtcblxuICAgIGlmICghKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpKSB7XG4gICAgICBlbmRPZmZzZXQtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnBvcyAtIGVuZE9mZnNldCAtIHN0YXJ0UG9zO1xuICB9XG5cbiAgZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICBjb25zdCBzdGFydFBvcyA9IHN0cmVhbS5wb3M7XG4gICAgbGV0IGZvdW5kRU9JID0gZmFsc2UsXG4gICAgICAgIGIsXG4gICAgICAgIG1hcmtlckxlbmd0aDtcblxuICAgIHdoaWxlICgoYiA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgaWYgKGIgIT09IDB4ZmYpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoc3RyZWFtLmdldEJ5dGUoKSkge1xuICAgICAgICBjYXNlIDB4MDA6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmOlxuICAgICAgICAgIHN0cmVhbS5za2lwKC0xKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4ZDk6XG4gICAgICAgICAgZm91bmRFT0kgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHhjMDpcbiAgICAgICAgY2FzZSAweGMxOlxuICAgICAgICBjYXNlIDB4YzI6XG4gICAgICAgIGNhc2UgMHhjMzpcbiAgICAgICAgY2FzZSAweGM1OlxuICAgICAgICBjYXNlIDB4YzY6XG4gICAgICAgIGNhc2UgMHhjNzpcbiAgICAgICAgY2FzZSAweGM5OlxuICAgICAgICBjYXNlIDB4Y2E6XG4gICAgICAgIGNhc2UgMHhjYjpcbiAgICAgICAgY2FzZSAweGNkOlxuICAgICAgICBjYXNlIDB4Y2U6XG4gICAgICAgIGNhc2UgMHhjZjpcbiAgICAgICAgY2FzZSAweGM0OlxuICAgICAgICBjYXNlIDB4Y2M6XG4gICAgICAgIGNhc2UgMHhkYTpcbiAgICAgICAgY2FzZSAweGRiOlxuICAgICAgICBjYXNlIDB4ZGM6XG4gICAgICAgIGNhc2UgMHhkZDpcbiAgICAgICAgY2FzZSAweGRlOlxuICAgICAgICBjYXNlIDB4ZGY6XG4gICAgICAgIGNhc2UgMHhlMDpcbiAgICAgICAgY2FzZSAweGUxOlxuICAgICAgICBjYXNlIDB4ZTI6XG4gICAgICAgIGNhc2UgMHhlMzpcbiAgICAgICAgY2FzZSAweGU0OlxuICAgICAgICBjYXNlIDB4ZTU6XG4gICAgICAgIGNhc2UgMHhlNjpcbiAgICAgICAgY2FzZSAweGU3OlxuICAgICAgICBjYXNlIDB4ZTg6XG4gICAgICAgIGNhc2UgMHhlOTpcbiAgICAgICAgY2FzZSAweGVhOlxuICAgICAgICBjYXNlIDB4ZWI6XG4gICAgICAgIGNhc2UgMHhlYzpcbiAgICAgICAgY2FzZSAweGVkOlxuICAgICAgICBjYXNlIDB4ZWU6XG4gICAgICAgIGNhc2UgMHhlZjpcbiAgICAgICAgY2FzZSAweGZlOlxuICAgICAgICAgIG1hcmtlckxlbmd0aCA9IHN0cmVhbS5nZXRVaW50MTYoKTtcblxuICAgICAgICAgIGlmIChtYXJrZXJMZW5ndGggPiAyKSB7XG4gICAgICAgICAgICBzdHJlYW0uc2tpcChtYXJrZXJMZW5ndGggLSAyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtLnNraXAoLTIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm91bmRFT0kpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gc3RyZWFtLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgaWYgKGIgPT09IC0xKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbmxpbmUgRENURGVjb2RlIGltYWdlIHN0cmVhbTogXCIgKyBcIkVPSSBtYXJrZXIgbm90IGZvdW5kLCBzZWFyY2hpbmcgZm9yIC9FSS8gaW5zdGVhZC5cIik7XG4gICAgICBzdHJlYW0uc2tpcCgtbGVuZ3RoKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoc3RyZWFtKTtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKSB7XG4gICAgY29uc3QgVElMREUgPSAweDdlLFxuICAgICAgICAgIEdUID0gMHgzZTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHN0cmVhbS5wb3M7XG4gICAgbGV0IGNoO1xuXG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgaWYgKGNoID09PSBUSUxERSkge1xuICAgICAgICBjb25zdCB0aWxkZVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgIGNoID0gc3RyZWFtLnBlZWtCeXRlKCk7XG5cbiAgICAgICAgd2hpbGUgKCgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSkge1xuICAgICAgICAgIHN0cmVhbS5za2lwKCk7XG4gICAgICAgICAgY2ggPSBzdHJlYW0ucGVla0J5dGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaCA9PT0gR1QpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmVhbS5wb3MgPiB0aWxkZVBvcykge1xuICAgICAgICAgIGNvbnN0IG1heWJlRUkgPSBzdHJlYW0ucGVla0J5dGVzKDIpO1xuXG4gICAgICAgICAgaWYgKG1heWJlRUlbMF0gPT09IDB4NDUgJiYgbWF5YmVFSVsxXSA9PT0gMHg0OSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gc3RyZWFtLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW5saW5lIEFTQ0lJODVEZWNvZGUgaW1hZ2Ugc3RyZWFtOiBcIiArIFwiRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLlwiKTtcbiAgICAgIHN0cmVhbS5za2lwKC1sZW5ndGgpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTtcbiAgICB9XG5cbiAgICB0aGlzLmlubGluZVN0cmVhbVNraXBFSShzdHJlYW0pO1xuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cblxuICBmaW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKSB7XG4gICAgY29uc3QgR1QgPSAweDNlO1xuICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvcztcbiAgICBsZXQgY2g7XG5cbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLmdldEJ5dGUoKSkgIT09IC0xKSB7XG4gICAgICBpZiAoY2ggPT09IEdUKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IHN0cmVhbS5wb3MgLSBzdGFydFBvcztcblxuICAgIGlmIChjaCA9PT0gLTEpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIklubGluZSBBU0NJSUhleERlY29kZSBpbWFnZSBzdHJlYW06IFwiICsgXCJFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuXCIpO1xuICAgICAgc3RyZWFtLnNraXAoLWxlbmd0aCk7XG4gICAgICByZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSk7XG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxuXG4gIGlubGluZVN0cmVhbVNraXBFSShzdHJlYW0pIHtcbiAgICBjb25zdCBFID0gMHg0NSxcbiAgICAgICAgICBJID0gMHg0OTtcbiAgICBsZXQgc3RhdGUgPSAwLFxuICAgICAgICBjaDtcblxuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gMCkge1xuICAgICAgICBzdGF0ZSA9IGNoID09PSBFID8gMSA6IDA7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAxKSB7XG4gICAgICAgIHN0YXRlID0gY2ggPT09IEkgPyAyIDogMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IDIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFrZUlubGluZUltYWdlKGNpcGhlclRyYW5zZm9ybSkge1xuICAgIGNvbnN0IGxleGVyID0gdGhpcy5sZXhlcjtcbiAgICBjb25zdCBzdHJlYW0gPSBsZXhlci5zdHJlYW07XG4gICAgY29uc3QgZGljdCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHRoaXMueHJlZik7XG4gICAgbGV0IGRpY3RMZW5ndGg7XG5cbiAgICB3aGlsZSAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYxLCBcIklEXCIpICYmICEoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKHRoaXMuYnVmMSkpIHtcbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodGhpcy5idWYxKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJEaWN0aW9uYXJ5IGtleSBtdXN0IGJlIGEgbmFtZSBvYmplY3RcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuYnVmMS5uYW1lO1xuICAgICAgdGhpcy5zaGlmdCgpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRU9GKSh0aGlzLmJ1ZjEpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkaWN0LnNldChrZXksIHRoaXMuZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSkpO1xuICAgIH1cblxuICAgIGlmIChsZXhlci5iZWdpbklubGluZUltYWdlUG9zICE9PSAtMSkge1xuICAgICAgZGljdExlbmd0aCA9IHN0cmVhbS5wb3MgLSBsZXhlci5iZWdpbklubGluZUltYWdlUG9zO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlciA9IGRpY3QuZ2V0KFwiRmlsdGVyXCIsIFwiRlwiKTtcbiAgICBsZXQgZmlsdGVyTmFtZTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXIpKSB7XG4gICAgICBmaWx0ZXJOYW1lID0gZmlsdGVyLm5hbWU7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcbiAgICAgIGNvbnN0IGZpbHRlclplcm8gPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihmaWx0ZXJbMF0pO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyWmVybykpIHtcbiAgICAgICAgZmlsdGVyTmFtZSA9IGZpbHRlclplcm8ubmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IHN0cmVhbS5wb3M7XG4gICAgbGV0IGxlbmd0aDtcblxuICAgIGlmIChmaWx0ZXJOYW1lID09PSBcIkRDVERlY29kZVwiIHx8IGZpbHRlck5hbWUgPT09IFwiRENUXCIpIHtcbiAgICAgIGxlbmd0aCA9IHRoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyTmFtZSA9PT0gXCJBU0NJSTg1RGVjb2RlXCIgfHwgZmlsdGVyTmFtZSA9PT0gXCJBODVcIikge1xuICAgICAgbGVuZ3RoID0gdGhpcy5maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyTmFtZSA9PT0gXCJBU0NJSUhleERlY29kZVwiIHx8IGZpbHRlck5hbWUgPT09IFwiQUh4XCIpIHtcbiAgICAgIGxlbmd0aCA9IHRoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTtcbiAgICB9XG5cbiAgICBsZXQgaW1hZ2VTdHJlYW0gPSBzdHJlYW0ubWFrZVN1YlN0cmVhbShzdGFydFBvcywgbGVuZ3RoLCBkaWN0KTtcbiAgICBsZXQgY2FjaGVLZXk7XG5cbiAgICBpZiAobGVuZ3RoIDwgTUFYX0xFTkdUSF9UT19DQUNIRSAmJiBkaWN0TGVuZ3RoIDwgTUFYX0FETEVSMzJfTEVOR1RIKSB7XG4gICAgICBjb25zdCBpbWFnZUJ5dGVzID0gaW1hZ2VTdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgIGltYWdlU3RyZWFtLnJlc2V0KCk7XG4gICAgICBjb25zdCBpbml0aWFsU3RyZWFtUG9zID0gc3RyZWFtLnBvcztcbiAgICAgIHN0cmVhbS5wb3MgPSBsZXhlci5iZWdpbklubGluZUltYWdlUG9zO1xuICAgICAgY29uc3QgZGljdEJ5dGVzID0gc3RyZWFtLmdldEJ5dGVzKGRpY3RMZW5ndGgpO1xuICAgICAgc3RyZWFtLnBvcyA9IGluaXRpYWxTdHJlYW1Qb3M7XG4gICAgICBjYWNoZUtleSA9IGNvbXB1dGVBZGxlcjMyKGltYWdlQnl0ZXMpICsgXCJfXCIgKyBjb21wdXRlQWRsZXIzMihkaWN0Qnl0ZXMpO1xuICAgICAgY29uc3QgY2FjaGVFbnRyeSA9IHRoaXMuaW1hZ2VDYWNoZVtjYWNoZUtleV07XG5cbiAgICAgIGlmIChjYWNoZUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5idWYyID0gX3ByaW1pdGl2ZXMuQ21kLmdldChcIkVJXCIpO1xuICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgIGNhY2hlRW50cnkucmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIGNhY2hlRW50cnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNpcGhlclRyYW5zZm9ybSkge1xuICAgICAgaW1hZ2VTdHJlYW0gPSBjaXBoZXJUcmFuc2Zvcm0uY3JlYXRlU3RyZWFtKGltYWdlU3RyZWFtLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIGltYWdlU3RyZWFtID0gdGhpcy5maWx0ZXIoaW1hZ2VTdHJlYW0sIGRpY3QsIGxlbmd0aCk7XG4gICAgaW1hZ2VTdHJlYW0uZGljdCA9IGRpY3Q7XG5cbiAgICBpZiAoY2FjaGVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW1hZ2VTdHJlYW0uY2FjaGVLZXkgPSBgaW5saW5lXyR7bGVuZ3RofV8ke2NhY2hlS2V5fWA7XG4gICAgICB0aGlzLmltYWdlQ2FjaGVbY2FjaGVLZXldID0gaW1hZ2VTdHJlYW07XG4gICAgfVxuXG4gICAgdGhpcy5idWYyID0gX3ByaW1pdGl2ZXMuQ21kLmdldChcIkVJXCIpO1xuICAgIHRoaXMuc2hpZnQoKTtcbiAgICByZXR1cm4gaW1hZ2VTdHJlYW07XG4gIH1cblxuICBfZmluZFN0cmVhbUxlbmd0aChzdGFydFBvcywgc2lnbmF0dXJlKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RyZWFtXG4gICAgfSA9IHRoaXMubGV4ZXI7XG4gICAgc3RyZWFtLnBvcyA9IHN0YXJ0UG9zO1xuICAgIGNvbnN0IFNDQU5fQkxPQ0tfTEVOR1RIID0gMjA0ODtcbiAgICBjb25zdCBzaWduYXR1cmVMZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoO1xuXG4gICAgd2hpbGUgKHN0cmVhbS5wb3MgPCBzdHJlYW0uZW5kKSB7XG4gICAgICBjb25zdCBzY2FuQnl0ZXMgPSBzdHJlYW0ucGVla0J5dGVzKFNDQU5fQkxPQ0tfTEVOR1RIKTtcbiAgICAgIGNvbnN0IHNjYW5MZW5ndGggPSBzY2FuQnl0ZXMubGVuZ3RoIC0gc2lnbmF0dXJlTGVuZ3RoO1xuXG4gICAgICBpZiAoc2Nhbkxlbmd0aCA8PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBsZXQgcG9zID0gMDtcblxuICAgICAgd2hpbGUgKHBvcyA8IHNjYW5MZW5ndGgpIHtcbiAgICAgICAgbGV0IGogPSAwO1xuXG4gICAgICAgIHdoaWxlIChqIDwgc2lnbmF0dXJlTGVuZ3RoICYmIHNjYW5CeXRlc1twb3MgKyBqXSA9PT0gc2lnbmF0dXJlW2pdKSB7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGogPj0gc2lnbmF0dXJlTGVuZ3RoKSB7XG4gICAgICAgICAgc3RyZWFtLnBvcyArPSBwb3M7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbS5wb3MgLSBzdGFydFBvcztcbiAgICAgICAgfVxuXG4gICAgICAgIHBvcysrO1xuICAgICAgfVxuXG4gICAgICBzdHJlYW0ucG9zICs9IHNjYW5MZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgbWFrZVN0cmVhbShkaWN0LCBjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICBjb25zdCBsZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgbGV0IHN0cmVhbSA9IGxleGVyLnN0cmVhbTtcbiAgICBsZXhlci5za2lwVG9OZXh0TGluZSgpO1xuICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvcyAtIDE7XG4gICAgbGV0IGxlbmd0aCA9IGRpY3QuZ2V0KFwiTGVuZ3RoXCIpO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGxlbmd0aCkpIHtcbiAgICAgICgwLCBfdXRpbC5pbmZvKShgQmFkIGxlbmd0aCBcIiR7bGVuZ3RofVwiIGluIHN0cmVhbWApO1xuICAgICAgbGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBzdHJlYW0ucG9zID0gc3RhcnRQb3MgKyBsZW5ndGg7XG4gICAgbGV4ZXIubmV4dENoYXIoKTtcblxuICAgIGlmICh0aGlzLnRyeVNoaWZ0KCkgJiYgKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjIsIFwiZW5kc3RyZWFtXCIpKSB7XG4gICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEVORFNUUkVBTV9TSUdOQVRVUkUgPSBuZXcgVWludDhBcnJheShbMHg2NSwgMHg2RSwgMHg2NCwgMHg3MywgMHg3NCwgMHg3MiwgMHg2NSwgMHg2MSwgMHg2RF0pO1xuXG4gICAgICBsZXQgYWN0dWFsTGVuZ3RoID0gdGhpcy5fZmluZFN0cmVhbUxlbmd0aChzdGFydFBvcywgRU5EU1RSRUFNX1NJR05BVFVSRSk7XG5cbiAgICAgIGlmIChhY3R1YWxMZW5ndGggPCAwKSB7XG4gICAgICAgIGNvbnN0IE1BWF9UUlVOQ0FUSU9OID0gMTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBNQVhfVFJVTkNBVElPTjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZW5kID0gRU5EU1RSRUFNX1NJR05BVFVSRS5sZW5ndGggLSBpO1xuICAgICAgICAgIGNvbnN0IFRSVU5DQVRFRF9TSUdOQVRVUkUgPSBFTkRTVFJFQU1fU0lHTkFUVVJFLnNsaWNlKDAsIGVuZCk7XG5cbiAgICAgICAgICBjb25zdCBtYXliZUxlbmd0aCA9IHRoaXMuX2ZpbmRTdHJlYW1MZW5ndGgoc3RhcnRQb3MsIFRSVU5DQVRFRF9TSUdOQVRVUkUpO1xuXG4gICAgICAgICAgaWYgKG1heWJlTGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RCeXRlID0gc3RyZWFtLnBlZWtCeXRlcyhlbmQgKyAxKVtlbmRdO1xuXG4gICAgICAgICAgICBpZiAoISgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGxhc3RCeXRlKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBGb3VuZCBcIiR7KDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKFRSVU5DQVRFRF9TSUdOQVRVUkUpfVwiIHdoZW4gYCArIFwic2VhcmNoaW5nIGZvciBlbmRzdHJlYW0gY29tbWFuZC5cIik7XG4gICAgICAgICAgICBhY3R1YWxMZW5ndGggPSBtYXliZUxlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhY3R1YWxMZW5ndGggPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTWlzc2luZyBlbmRzdHJlYW0gY29tbWFuZC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGVuZ3RoID0gYWN0dWFsTGVuZ3RoO1xuICAgICAgbGV4ZXIubmV4dENoYXIoKTtcbiAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNoaWZ0KCk7XG4gICAgc3RyZWFtID0gc3RyZWFtLm1ha2VTdWJTdHJlYW0oc3RhcnRQb3MsIGxlbmd0aCwgZGljdCk7XG5cbiAgICBpZiAoY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgICBzdHJlYW0gPSBjaXBoZXJUcmFuc2Zvcm0uY3JlYXRlU3RyZWFtKHN0cmVhbSwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICBzdHJlYW0gPSB0aGlzLmZpbHRlcihzdHJlYW0sIGRpY3QsIGxlbmd0aCk7XG4gICAgc3RyZWFtLmRpY3QgPSBkaWN0O1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBmaWx0ZXIoc3RyZWFtLCBkaWN0LCBsZW5ndGgpIHtcbiAgICBsZXQgZmlsdGVyID0gZGljdC5nZXQoXCJGaWx0ZXJcIiwgXCJGXCIpO1xuICAgIGxldCBwYXJhbXMgPSBkaWN0LmdldChcIkRlY29kZVBhcm1zXCIsIFwiRFBcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zKSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBjb250YWluIGFuIEFycmF5LCBcIiArIFwid2hlbiAvRmlsdGVyIGNvbnRhaW5zIGEgTmFtZS5cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm1ha2VGaWx0ZXIoc3RyZWFtLCBmaWx0ZXIubmFtZSwgbGVuZ3RoLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIGxldCBtYXliZUxlbmd0aCA9IGxlbmd0aDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcbiAgICAgIGNvbnN0IGZpbHRlckFycmF5ID0gZmlsdGVyO1xuICAgICAgY29uc3QgcGFyYW1zQXJyYXkgPSBwYXJhbXM7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGZpbHRlckFycmF5Lmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgZmlsdGVyID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZmlsdGVyQXJyYXlbaV0pO1xuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgQmFkIGZpbHRlciBuYW1lIFwiJHtmaWx0ZXJ9XCJgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmFtcyA9IG51bGw7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zQXJyYXkpICYmIGkgaW4gcGFyYW1zQXJyYXkpIHtcbiAgICAgICAgICBwYXJhbXMgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihwYXJhbXNBcnJheVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW0gPSB0aGlzLm1ha2VGaWx0ZXIoc3RyZWFtLCBmaWx0ZXIubmFtZSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7XG4gICAgICAgIG1heWJlTGVuZ3RoID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgbWFrZUZpbHRlcihzdHJlYW0sIG5hbWUsIG1heWJlTGVuZ3RoLCBwYXJhbXMpIHtcbiAgICBpZiAobWF5YmVMZW5ndGggPT09IDApIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgRW1wdHkgXCIke25hbWV9XCIgc3RyZWFtLmApO1xuICAgICAgcmV0dXJuIG5ldyBfc3RyZWFtLk51bGxTdHJlYW0oKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeHJlZlN0cmVhbVN0YXRzID0gdGhpcy54cmVmLnN0YXRzLnN0cmVhbVR5cGVzO1xuXG4gICAgICBpZiAobmFtZSA9PT0gXCJGbGF0ZURlY29kZVwiIHx8IG5hbWUgPT09IFwiRmxcIikge1xuICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5GTEFURV0gPSB0cnVlO1xuXG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uUHJlZGljdG9yU3RyZWFtKG5ldyBfc3RyZWFtLkZsYXRlU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5GbGF0ZVN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IFwiTFpXRGVjb2RlXCIgfHwgbmFtZSA9PT0gXCJMWldcIikge1xuICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5MWlddID0gdHJ1ZTtcbiAgICAgICAgbGV0IGVhcmx5Q2hhbmdlID0gMTtcblxuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgaWYgKHBhcmFtcy5oYXMoXCJFYXJseUNoYW5nZVwiKSkge1xuICAgICAgICAgICAgZWFybHlDaGFuZ2UgPSBwYXJhbXMuZ2V0KFwiRWFybHlDaGFuZ2VcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBfc3RyZWFtLlByZWRpY3RvclN0cmVhbShuZXcgX3N0cmVhbS5MWldTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgZWFybHlDaGFuZ2UpLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5MWldTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgZWFybHlDaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gXCJEQ1REZWNvZGVcIiB8fCBuYW1lID09PSBcIkRDVFwiKSB7XG4gICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLkRDVF0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gbmV3IF9qcGVnX3N0cmVhbS5KcGVnU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHN0cmVhbS5kaWN0LCBwYXJhbXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gXCJKUFhEZWNvZGVcIiB8fCBuYW1lID09PSBcIkpQWFwiKSB7XG4gICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLkpQWF0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gbmV3IF9qcHhfc3RyZWFtLkpweFN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBzdHJlYW0uZGljdCwgcGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IFwiQVNDSUk4NURlY29kZVwiIHx8IG5hbWUgPT09IFwiQTg1XCIpIHtcbiAgICAgICAgeHJlZlN0cmVhbVN0YXRzW191dGlsLlN0cmVhbVR5cGUuQTg1XSA9IHRydWU7XG4gICAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5Bc2NpaTg1U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gXCJBU0NJSUhleERlY29kZVwiIHx8IG5hbWUgPT09IFwiQUh4XCIpIHtcbiAgICAgICAgeHJlZlN0cmVhbVN0YXRzW191dGlsLlN0cmVhbVR5cGUuQUhYXSA9IHRydWU7XG4gICAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5Bc2NpaUhleFN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IFwiQ0NJVFRGYXhEZWNvZGVcIiB8fCBuYW1lID09PSBcIkNDRlwiKSB7XG4gICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLkNDRl0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gbmV3IF9jY2l0dF9zdHJlYW0uQ0NJVFRGYXhTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IFwiUnVuTGVuZ3RoRGVjb2RlXCIgfHwgbmFtZSA9PT0gXCJSTFwiKSB7XG4gICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLlJMWF0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uUnVuTGVuZ3RoU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gXCJKQklHMkRlY29kZVwiKSB7XG4gICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLkpCSUddID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBfamJpZzJfc3RyZWFtLkpiaWcyU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHN0cmVhbS5kaWN0LCBwYXJhbXMpO1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYEZpbHRlciBcIiR7bmFtZX1cIiBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgSW52YWxpZCBzdHJlYW06IFwiJHtleH1cImApO1xuICAgICAgcmV0dXJuIG5ldyBfc3RyZWFtLk51bGxTdHJlYW0oKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjtcbmNvbnN0IHNwZWNpYWxDaGFycyA9IFsxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAyLCAyLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcblxuZnVuY3Rpb24gdG9IZXhEaWdpdChjaCkge1xuICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB7XG4gICAgcmV0dXJuIGNoICYgMHgwZjtcbiAgfVxuXG4gIGlmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NDYgfHwgY2ggPj0gMHg2MSAmJiBjaCA8PSAweDY2KSB7XG4gICAgcmV0dXJuIChjaCAmIDB4MGYpICsgOTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuY2xhc3MgTGV4ZXIge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0sIGtub3duQ29tbWFuZHMgPSBudWxsKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgIHRoaXMuc3RyQnVmID0gW107XG4gICAgdGhpcy5rbm93bkNvbW1hbmRzID0ga25vd25Db21tYW5kcztcbiAgICB0aGlzLl9oZXhTdHJpbmdOdW1XYXJuID0gMDtcbiAgICB0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3MgPSAtMTtcbiAgfVxuXG4gIG5leHRDaGFyKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRDaGFyID0gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICB9XG5cbiAgcGVla0NoYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtLnBlZWtCeXRlKCk7XG4gIH1cblxuICBnZXROdW1iZXIoKSB7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcbiAgICBsZXQgZU5vdGF0aW9uID0gZmFsc2U7XG4gICAgbGV0IGRpdmlkZUJ5ID0gMDtcbiAgICBsZXQgc2lnbiA9IDA7XG5cbiAgICBpZiAoY2ggPT09IDB4MmQpIHtcbiAgICAgIHNpZ24gPSAtMTtcbiAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICBpZiAoY2ggPT09IDB4MmQpIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyYikge1xuICAgICAgc2lnbiA9IDE7XG4gICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IDB4MGEgfHwgY2ggPT09IDB4MGQpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICB9IHdoaWxlIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCk7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAweDJlKSB7XG4gICAgICBkaXZpZGVCeSA9IDEwO1xuICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoIDwgMHgzMCB8fCBjaCA+IDB4MzkpIHtcbiAgICAgIGlmIChkaXZpZGVCeSA9PT0gMTAgJiYgc2lnbiA9PT0gMCAmJiAoKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpIHx8IGNoID09PSAtMSkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTGV4ZXIuZ2V0TnVtYmVyIC0gdHJlYXRpbmcgYSBzaW5nbGUgZGVjaW1hbCBwb2ludCBhcyB6ZXJvLlwiKTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBudW1iZXI6ICR7U3RyaW5nLmZyb21DaGFyQ29kZShjaCl9IChjaGFyQ29kZSAke2NofSlgKTtcbiAgICB9XG5cbiAgICBzaWduID0gc2lnbiB8fCAxO1xuICAgIGxldCBiYXNlVmFsdWUgPSBjaCAtIDB4MzA7XG4gICAgbGV0IHBvd2VyVmFsdWUgPSAwO1xuICAgIGxldCBwb3dlclZhbHVlU2lnbiA9IDE7XG5cbiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwKSB7XG4gICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREaWdpdCA9IGNoIC0gMHgzMDtcblxuICAgICAgICBpZiAoZU5vdGF0aW9uKSB7XG4gICAgICAgICAgcG93ZXJWYWx1ZSA9IHBvd2VyVmFsdWUgKiAxMCArIGN1cnJlbnREaWdpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZGl2aWRlQnkgIT09IDApIHtcbiAgICAgICAgICAgIGRpdmlkZUJ5ICo9IDEwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJhc2VWYWx1ZSA9IGJhc2VWYWx1ZSAqIDEwICsgY3VycmVudERpZ2l0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJlKSB7XG4gICAgICAgIGlmIChkaXZpZGVCeSA9PT0gMCkge1xuICAgICAgICAgIGRpdmlkZUJ5ID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyZCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJCYWRseSBmb3JtYXR0ZWQgbnVtYmVyOiBtaW51cyBzaWduIGluIHRoZSBtaWRkbGVcIik7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDQ1IHx8IGNoID09PSAweDY1KSB7XG4gICAgICAgIGNoID0gdGhpcy5wZWVrQ2hhcigpO1xuXG4gICAgICAgIGlmIChjaCA9PT0gMHgyYiB8fCBjaCA9PT0gMHgyZCkge1xuICAgICAgICAgIHBvd2VyVmFsdWVTaWduID0gY2ggPT09IDB4MmQgPyAtMSA6IDE7XG4gICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoIDwgMHgzMCB8fCBjaCA+IDB4MzkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVOb3RhdGlvbiA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGl2aWRlQnkgIT09IDApIHtcbiAgICAgIGJhc2VWYWx1ZSAvPSBkaXZpZGVCeTtcbiAgICB9XG5cbiAgICBpZiAoZU5vdGF0aW9uKSB7XG4gICAgICBiYXNlVmFsdWUgKj0gMTAgKiogKHBvd2VyVmFsdWVTaWduICogcG93ZXJWYWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpZ24gKiBiYXNlVmFsdWU7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgbGV0IG51bVBhcmVuID0gMTtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIGNvbnN0IHN0ckJ1ZiA9IHRoaXMuc3RyQnVmO1xuICAgIHN0ckJ1Zi5sZW5ndGggPSAwO1xuICAgIGxldCBjaCA9IHRoaXMubmV4dENoYXIoKTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBsZXQgY2hhckJ1ZmZlcmVkID0gZmFsc2U7XG5cbiAgICAgIHN3aXRjaCAoY2ggfCAwKSB7XG4gICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW50ZXJtaW5hdGVkIHN0cmluZ1wiKTtcbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4Mjg6XG4gICAgICAgICAgKytudW1QYXJlbjtcbiAgICAgICAgICBzdHJCdWYucHVzaChcIihcIik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweDI5OlxuICAgICAgICAgIGlmICgtLW51bVBhcmVuID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyQnVmLnB1c2goXCIpXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHg1YzpcbiAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcblxuICAgICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVudGVybWluYXRlZCBzdHJpbmdcIik7XG4gICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDZlOlxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChcIlxcblwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHg3MjpcbiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goXCJcXHJcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4NzQ6XG4gICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiXFx0XCIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDYyOlxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChcIlxcYlwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHg2NjpcbiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goXCJcXGZcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4NWM6XG4gICAgICAgICAgICBjYXNlIDB4Mjg6XG4gICAgICAgICAgICBjYXNlIDB4Mjk6XG4gICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHgzMDpcbiAgICAgICAgICAgIGNhc2UgMHgzMTpcbiAgICAgICAgICAgIGNhc2UgMHgzMjpcbiAgICAgICAgICAgIGNhc2UgMHgzMzpcbiAgICAgICAgICAgIGNhc2UgMHgzNDpcbiAgICAgICAgICAgIGNhc2UgMHgzNTpcbiAgICAgICAgICAgIGNhc2UgMHgzNjpcbiAgICAgICAgICAgIGNhc2UgMHgzNzpcbiAgICAgICAgICAgICAgbGV0IHggPSBjaCAmIDB4MGY7XG4gICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICBjaGFyQnVmZmVyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzcpIHtcbiAgICAgICAgICAgICAgICB4ID0gKHggPDwgMykgKyAoY2ggJiAweDBmKTtcbiAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzcpIHtcbiAgICAgICAgICAgICAgICAgIGNoYXJCdWZmZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgeCA9ICh4IDw8IDMpICsgKGNoICYgMHgwZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh4KSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4MGQ6XG4gICAgICAgICAgICAgIGlmICh0aGlzLnBlZWtDaGFyKCkgPT09IDB4MGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDBhOlxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICghY2hhckJ1ZmZlcmVkKSB7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHJCdWYuam9pbihcIlwiKTtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgbGV0IGNoLCBwcmV2aW91c0NoO1xuICAgIGNvbnN0IHN0ckJ1ZiA9IHRoaXMuc3RyQnVmO1xuICAgIHN0ckJ1Zi5sZW5ndGggPSAwO1xuXG4gICAgd2hpbGUgKChjaCA9IHRoaXMubmV4dENoYXIoKSkgPj0gMCAmJiAhc3BlY2lhbENoYXJzW2NoXSkge1xuICAgICAgaWYgKGNoID09PSAweDIzKSB7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgIGlmIChzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTGV4ZXJfZ2V0TmFtZTogXCIgKyBcIk5VTUJFUiBTSUdOICgjKSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBoZXhhZGVjaW1hbCBudW1iZXIuXCIpO1xuICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiI1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHggPSB0b0hleERpZ2l0KGNoKTtcblxuICAgICAgICBpZiAoeCAhPT0gLTEpIHtcbiAgICAgICAgICBwcmV2aW91c0NoID0gY2g7XG4gICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgY29uc3QgeDIgPSB0b0hleERpZ2l0KGNoKTtcblxuICAgICAgICAgIGlmICh4MiA9PT0gLTEpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKX0pIGAgKyBcImluIGhleGFkZWNpbWFsIG51bWJlci5cIik7XG4gICAgICAgICAgICBzdHJCdWYucHVzaChcIiNcIiwgU3RyaW5nLmZyb21DaGFyQ29kZShwcmV2aW91c0NoKSk7XG5cbiAgICAgICAgICAgIGlmIChzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHggPDwgNCB8IHgyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyQnVmLnB1c2goXCIjXCIsIFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHJCdWYubGVuZ3RoID4gMTI3KSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYE5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogJHtzdHJCdWYubGVuZ3RofWApO1xuICAgIH1cblxuICAgIHJldHVybiBfcHJpbWl0aXZlcy5OYW1lLmdldChzdHJCdWYuam9pbihcIlwiKSk7XG4gIH1cblxuICBfaGV4U3RyaW5nV2FybihjaCkge1xuICAgIGNvbnN0IE1BWF9IRVhfU1RSSU5HX05VTV9XQVJOID0gNTtcblxuICAgIGlmICh0aGlzLl9oZXhTdHJpbmdOdW1XYXJuKysgPT09IE1BWF9IRVhfU1RSSU5HX05VTV9XQVJOKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBhZGRpdGlvbmFsIGludmFsaWQgY2hhcmFjdGVycy5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hleFN0cmluZ051bVdhcm4gPiBNQVhfSEVYX1NUUklOR19OVU1fV0FSTikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICgwLCBfdXRpbC53YXJuKShgZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgaW52YWxpZCBjaGFyYWN0ZXI6ICR7Y2h9YCk7XG4gIH1cblxuICBnZXRIZXhTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcbiAgICBsZXQgaXNGaXJzdEhleCA9IHRydWU7XG4gICAgbGV0IGZpcnN0RGlnaXQsIHNlY29uZERpZ2l0O1xuICAgIHRoaXMuX2hleFN0cmluZ051bVdhcm4gPSAwO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChjaCA8IDApIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW50ZXJtaW5hdGVkIGhleCBzdHJpbmdcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzZSkge1xuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmIChzcGVjaWFsQ2hhcnNbY2hdID09PSAxKSB7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0ZpcnN0SGV4KSB7XG4gICAgICAgICAgZmlyc3REaWdpdCA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgaWYgKGZpcnN0RGlnaXQgPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLl9oZXhTdHJpbmdXYXJuKGNoKTtcblxuICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Vjb25kRGlnaXQgPSB0b0hleERpZ2l0KGNoKTtcblxuICAgICAgICAgIGlmIChzZWNvbmREaWdpdCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2hleFN0cmluZ1dhcm4oY2gpO1xuXG4gICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZmlyc3REaWdpdCA8PCA0IHwgc2Vjb25kRGlnaXQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzRmlyc3RIZXggPSAhaXNGaXJzdEhleDtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ckJ1Zi5qb2luKFwiXCIpO1xuICB9XG5cbiAgZ2V0T2JqKCkge1xuICAgIGxldCBjb21tZW50ID0gZmFsc2U7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoY2ggPCAwKSB7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5FT0Y7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgIGlmIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCkge1xuICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyNSkge1xuICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3BlY2lhbENoYXJzW2NoXSAhPT0gMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjaCB8IDApIHtcbiAgICAgIGNhc2UgMHgzMDpcbiAgICAgIGNhc2UgMHgzMTpcbiAgICAgIGNhc2UgMHgzMjpcbiAgICAgIGNhc2UgMHgzMzpcbiAgICAgIGNhc2UgMHgzNDpcbiAgICAgIGNhc2UgMHgzNTpcbiAgICAgIGNhc2UgMHgzNjpcbiAgICAgIGNhc2UgMHgzNzpcbiAgICAgIGNhc2UgMHgzODpcbiAgICAgIGNhc2UgMHgzOTpcbiAgICAgIGNhc2UgMHgyYjpcbiAgICAgIGNhc2UgMHgyZDpcbiAgICAgIGNhc2UgMHgyZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7XG5cbiAgICAgIGNhc2UgMHgyODpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNhc2UgMHgyZjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFtZSgpO1xuXG4gICAgICBjYXNlIDB4NWI6XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoXCJbXCIpO1xuXG4gICAgICBjYXNlIDB4NWQ6XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoXCJdXCIpO1xuXG4gICAgICBjYXNlIDB4M2M6XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgIGlmIChjaCA9PT0gMHgzYykge1xuICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChcIjw8XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGV4U3RyaW5nKCk7XG5cbiAgICAgIGNhc2UgMHgzZTpcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgaWYgKGNoID09PSAweDNlKSB7XG4gICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwiPj5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChcIj5cIik7XG5cbiAgICAgIGNhc2UgMHg3YjpcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChcIntcIik7XG5cbiAgICAgIGNhc2UgMHg3ZDpcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChcIn1cIik7XG5cbiAgICAgIGNhc2UgMHgyOTpcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYElsbGVnYWwgY2hhcmFjdGVyOiAke2NofWApO1xuICAgIH1cblxuICAgIGxldCBzdHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICBjb25zdCBrbm93bkNvbW1hbmRzID0gdGhpcy5rbm93bkNvbW1hbmRzO1xuICAgIGxldCBrbm93bkNvbW1hbmRGb3VuZCA9IGtub3duQ29tbWFuZHMgJiYga25vd25Db21tYW5kc1tzdHJdICE9PSB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmICFzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZUNvbW1hbmQgPSBzdHIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgICAgaWYgKGtub3duQ29tbWFuZEZvdW5kICYmIGtub3duQ29tbWFuZHNbcG9zc2libGVDb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMTI4KSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgQ29tbWFuZCB0b2tlbiB0b28gbG9uZzogJHtzdHIubGVuZ3RofWApO1xuICAgICAgfVxuXG4gICAgICBzdHIgPSBwb3NzaWJsZUNvbW1hbmQ7XG4gICAgICBrbm93bkNvbW1hbmRGb3VuZCA9IGtub3duQ29tbWFuZHMgJiYga25vd25Db21tYW5kc1tzdHJdICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHN0ciA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiZmFsc2VcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwibnVsbFwiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RyID09PSBcIkJJXCIpIHtcbiAgICAgIHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcyA9IHRoaXMuc3RyZWFtLnBvcztcbiAgICB9XG5cbiAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChzdHIpO1xuICB9XG5cbiAgc2tpcFRvTmV4dExpbmUoKSB7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgIHdoaWxlIChjaCA+PSAwKSB7XG4gICAgICBpZiAoY2ggPT09IDB4MGQpIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgaWYgKGNoID09PSAweDBhKSB7XG4gICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDBhKSB7XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuTGV4ZXIgPSBMZXhlcjtcblxuY2xhc3MgTGluZWFyaXphdGlvbiB7XG4gIHN0YXRpYyBjcmVhdGUoc3RyZWFtKSB7XG4gICAgZnVuY3Rpb24gZ2V0SW50KGxpbkRpY3QsIG5hbWUsIGFsbG93WmVyb1ZhbHVlID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IG9iaiA9IGxpbkRpY3QuZ2V0KG5hbWUpO1xuXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopICYmIChhbGxvd1plcm9WYWx1ZSA/IG9iaiA+PSAwIDogb2JqID4gMCkpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCIke25hbWV9XCIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGAgKyBcImRpY3Rpb25hcnkgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SGludHMobGluRGljdCkge1xuICAgICAgY29uc3QgaGludHMgPSBsaW5EaWN0LmdldChcIkhcIik7XG4gICAgICBsZXQgaGludHNMZW5ndGg7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhpbnRzKSAmJiAoKGhpbnRzTGVuZ3RoID0gaGludHMubGVuZ3RoKSA9PT0gMiB8fCBoaW50c0xlbmd0aCA9PT0gNCkpIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGhpbnRzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgaGludCA9IGhpbnRzW2luZGV4XTtcblxuICAgICAgICAgIGlmICghKE51bWJlci5pc0ludGVnZXIoaGludCkgJiYgaGludCA+IDApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhpbnQgKCR7aW5kZXh9KSBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhpbnRzO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcih7XG4gICAgICBsZXhlcjogbmV3IExleGVyKHN0cmVhbSksXG4gICAgICB4cmVmOiBudWxsXG4gICAgfSk7XG4gICAgY29uc3Qgb2JqMSA9IHBhcnNlci5nZXRPYmooKTtcbiAgICBjb25zdCBvYmoyID0gcGFyc2VyLmdldE9iaigpO1xuICAgIGNvbnN0IG9iajMgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgY29uc3QgbGluRGljdCA9IHBhcnNlci5nZXRPYmooKTtcbiAgICBsZXQgb2JqLCBsZW5ndGg7XG5cbiAgICBpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKG9iajEpICYmIE51bWJlci5pc0ludGVnZXIob2JqMikgJiYgKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmozLCBcIm9ialwiKSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShsaW5EaWN0KSAmJiAoMCwgX3V0aWwuaXNOdW0pKG9iaiA9IGxpbkRpY3QuZ2V0KFwiTGluZWFyaXplZFwiKSkgJiYgb2JqID4gMCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoKGxlbmd0aCA9IGdldEludChsaW5EaWN0LCBcIkxcIikpICE9PSBzdHJlYW0ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIkxcIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSAnICsgXCJkb2VzIG5vdCBlcXVhbCB0aGUgc3RyZWFtIGxlbmd0aC5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlbmd0aCxcbiAgICAgIGhpbnRzOiBnZXRIaW50cyhsaW5EaWN0KSxcbiAgICAgIG9iamVjdE51bWJlckZpcnN0OiBnZXRJbnQobGluRGljdCwgXCJPXCIpLFxuICAgICAgZW5kRmlyc3Q6IGdldEludChsaW5EaWN0LCBcIkVcIiksXG4gICAgICBudW1QYWdlczogZ2V0SW50KGxpbkRpY3QsIFwiTlwiKSxcbiAgICAgIG1haW5YUmVmRW50cmllc09mZnNldDogZ2V0SW50KGxpbkRpY3QsIFwiVFwiKSxcbiAgICAgIHBhZ2VGaXJzdDogbGluRGljdC5oYXMoXCJQXCIpID8gZ2V0SW50KGxpbkRpY3QsIFwiUFwiLCB0cnVlKSA6IDBcbiAgICB9O1xuICB9XG5cbn1cblxuZXhwb3J0cy5MaW5lYXJpemF0aW9uID0gTGluZWFyaXphdGlvbjtcblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MWldTdHJlYW0gPSBleHBvcnRzLlN0cmluZ1N0cmVhbSA9IGV4cG9ydHMuU3RyZWFtc1NlcXVlbmNlU3RyZWFtID0gZXhwb3J0cy5TdHJlYW0gPSBleHBvcnRzLlJ1bkxlbmd0aFN0cmVhbSA9IGV4cG9ydHMuUHJlZGljdG9yU3RyZWFtID0gZXhwb3J0cy5OdWxsU3RyZWFtID0gZXhwb3J0cy5GbGF0ZVN0cmVhbSA9IGV4cG9ydHMuRGVjb2RlU3RyZWFtID0gZXhwb3J0cy5EZWNyeXB0U3RyZWFtID0gZXhwb3J0cy5Bc2NpaUhleFN0cmVhbSA9IGV4cG9ydHMuQXNjaWk4NVN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxudmFyIFN0cmVhbSA9IGZ1bmN0aW9uIFN0cmVhbUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIFN0cmVhbShhcnJheUJ1ZmZlciwgc3RhcnQsIGxlbmd0aCwgZGljdCkge1xuICAgIHRoaXMuYnl0ZXMgPSBhcnJheUJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBhcnJheUJ1ZmZlciA6IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBzdGFydCArIGxlbmd0aCB8fCB0aGlzLmJ5dGVzLmxlbmd0aDtcbiAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICB9XG5cbiAgU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5kIC0gdGhpcy5zdGFydDtcbiAgICB9LFxuXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sZW5ndGggPT09IDA7XG4gICAgfSxcblxuICAgIGdldEJ5dGU6IGZ1bmN0aW9uIFN0cmVhbV9nZXRCeXRlKCkge1xuICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMuZW5kKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuYnl0ZXNbdGhpcy5wb3MrK107XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIFN0cmVhbV9nZXRVaW50MTYoKSB7XG4gICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgIHZhciBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuXG4gICAgICBpZiAoYjAgPT09IC0xIHx8IGIxID09PSAtMSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoYjAgPDwgOCkgKyBiMTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBTdHJlYW1fZ2V0SW50MzIoKSB7XG4gICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgIHZhciBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgICAgdmFyIGIyID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICB2YXIgYjMgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xuICAgIH0sXG5cbiAgICBnZXRCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgdmFyIHBvcyA9IHRoaXMucG9zO1xuICAgICAgdmFyIHN0ckVuZCA9IHRoaXMuZW5kO1xuXG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICBjb25zdCBzdWJhcnJheSA9IGJ5dGVzLnN1YmFycmF5KHBvcywgc3RyRW5kKTtcbiAgICAgICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVuZCA9IHBvcyArIGxlbmd0aDtcblxuICAgICAgaWYgKGVuZCA+IHN0ckVuZCkge1xuICAgICAgICBlbmQgPSBzdHJFbmQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgY29uc3Qgc3ViYXJyYXkgPSBieXRlcy5zdWJhcnJheShwb3MsIGVuZCk7XG4gICAgICByZXR1cm4gZm9yY2VDbGFtcGVkID8gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN1YmFycmF5KSA6IHN1YmFycmF5O1xuICAgIH0sXG5cbiAgICBwZWVrQnl0ZTogZnVuY3Rpb24gU3RyZWFtX3BlZWtCeXRlKCkge1xuICAgICAgdmFyIHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgICAgaWYgKHBlZWtlZEJ5dGUgIT09IC0xKSB7XG4gICAgICAgIHRoaXMucG9zLS07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwZWVrZWRCeXRlO1xuICAgIH0sXG5cbiAgICBwZWVrQnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQgPSBmYWxzZSkge1xuICAgICAgdmFyIGJ5dGVzID0gdGhpcy5nZXRCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCk7XG4gICAgICB0aGlzLnBvcyAtPSBieXRlcy5sZW5ndGg7XG4gICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfSxcblxuICAgIGdldEJ5dGVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgICBpZiAoYmVnaW4gPCAwKSB7XG4gICAgICAgIGJlZ2luID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuZCA+IHRoaXMuZW5kKSB7XG4gICAgICAgIGVuZCA9IHRoaXMuZW5kO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShiZWdpbiwgZW5kKTtcbiAgICB9LFxuXG4gICAgc2tpcDogZnVuY3Rpb24gU3RyZWFtX3NraXAobikge1xuICAgICAgaWYgKCFuKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyArPSBuO1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIFN0cmVhbV9yZXNldCgpIHtcbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9LFxuICAgIG1vdmVTdGFydDogZnVuY3Rpb24gU3RyZWFtX21vdmVTdGFydCgpIHtcbiAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLnBvcztcbiAgICB9LFxuICAgIG1ha2VTdWJTdHJlYW06IGZ1bmN0aW9uIFN0cmVhbV9tYWtlU3ViU3RyZWFtKHN0YXJ0LCBsZW5ndGgsIGRpY3QpIHtcbiAgICAgIHJldHVybiBuZXcgU3RyZWFtKHRoaXMuYnl0ZXMuYnVmZmVyLCBzdGFydCwgbGVuZ3RoLCBkaWN0KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuU3RyZWFtID0gU3RyZWFtO1xuXG52YXIgU3RyaW5nU3RyZWFtID0gZnVuY3Rpb24gU3RyaW5nU3RyZWFtQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gU3RyaW5nU3RyZWFtKHN0cikge1xuICAgIGNvbnN0IGJ5dGVzID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHN0cik7XG4gICAgU3RyZWFtLmNhbGwodGhpcywgYnl0ZXMpO1xuICB9XG5cbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZSA9IFN0cmVhbS5wcm90b3R5cGU7XG4gIHJldHVybiBTdHJpbmdTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuU3RyaW5nU3RyZWFtID0gU3RyaW5nU3RyZWFtO1xuXG52YXIgRGVjb2RlU3RyZWFtID0gZnVuY3Rpb24gRGVjb2RlU3RyZWFtQ2xvc3VyZSgpIHtcbiAgdmFyIGVtcHR5QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG5cbiAgZnVuY3Rpb24gRGVjb2RlU3RyZWFtKG1heWJlTWluQnVmZmVyTGVuZ3RoKSB7XG4gICAgdGhpcy5fcmF3TWluQnVmZmVyTGVuZ3RoID0gbWF5YmVNaW5CdWZmZXJMZW5ndGggfHwgMDtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSAwO1xuICAgIHRoaXMuZW9mID0gZmFsc2U7XG4gICAgdGhpcy5idWZmZXIgPSBlbXB0eUJ1ZmZlcjtcbiAgICB0aGlzLm1pbkJ1ZmZlckxlbmd0aCA9IDUxMjtcblxuICAgIGlmIChtYXliZU1pbkJ1ZmZlckxlbmd0aCkge1xuICAgICAgd2hpbGUgKHRoaXMubWluQnVmZmVyTGVuZ3RoIDwgbWF5YmVNaW5CdWZmZXJMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5taW5CdWZmZXJMZW5ndGggKj0gMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBEZWNvZGVTdHJlYW0ucHJvdG90eXBlID0ge1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgd2hpbGUgKCF0aGlzLmVvZiAmJiB0aGlzLmJ1ZmZlckxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnJlYWRCbG9jaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5idWZmZXJMZW5ndGggPT09IDA7XG4gICAgfSxcblxuICAgIGVuc3VyZUJ1ZmZlcjogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX2Vuc3VyZUJ1ZmZlcihyZXF1ZXN0ZWQpIHtcbiAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcblxuICAgICAgaWYgKHJlcXVlc3RlZCA8PSBidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2l6ZSA9IHRoaXMubWluQnVmZmVyTGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoc2l6ZSA8IHJlcXVlc3RlZCkge1xuICAgICAgICBzaXplICo9IDI7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWZmZXIyID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7XG4gICAgICBidWZmZXIyLnNldChidWZmZXIpO1xuICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyID0gYnVmZmVyMjtcbiAgICB9LFxuICAgIGdldEJ5dGU6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9nZXRCeXRlKCkge1xuICAgICAgdmFyIHBvcyA9IHRoaXMucG9zO1xuXG4gICAgICB3aGlsZSAodGhpcy5idWZmZXJMZW5ndGggPD0gcG9zKSB7XG4gICAgICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXTtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX2dldFVpbnQxNigpIHtcbiAgICAgIHZhciBiMCA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgICAgdmFyIGIxID0gdGhpcy5nZXRCeXRlKCk7XG5cbiAgICAgIGlmIChiMCA9PT0gLTEgfHwgYjEgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChiMCA8PCA4KSArIGIxO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9nZXRJbnQzMigpIHtcbiAgICAgIHZhciBiMCA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgICAgdmFyIGIxID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICB2YXIgYjIgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgIHZhciBiMyA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgICAgcmV0dXJuIChiMCA8PCAyNCkgKyAoYjEgPDwgMTYpICsgKGIyIDw8IDgpICsgYjM7XG4gICAgfSxcblxuICAgIGdldEJ5dGVzKGxlbmd0aCwgZm9yY2VDbGFtcGVkID0gZmFsc2UpIHtcbiAgICAgIHZhciBlbmQsXG4gICAgICAgICAgcG9zID0gdGhpcy5wb3M7XG5cbiAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVCdWZmZXIocG9zICsgbGVuZ3RoKTtcbiAgICAgICAgZW5kID0gcG9zICsgbGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICghdGhpcy5lb2YgJiYgdGhpcy5idWZmZXJMZW5ndGggPCBlbmQpIHtcbiAgICAgICAgICB0aGlzLnJlYWRCbG9jaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZkVuZCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuXG4gICAgICAgIGlmIChlbmQgPiBidWZFbmQpIHtcbiAgICAgICAgICBlbmQgPSBidWZFbmQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlICghdGhpcy5lb2YpIHtcbiAgICAgICAgICB0aGlzLnJlYWRCbG9jaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5kID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgY29uc3Qgc3ViYXJyYXkgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheShwb3MsIGVuZCk7XG4gICAgICByZXR1cm4gZm9yY2VDbGFtcGVkICYmICEoc3ViYXJyYXkgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkgPyBuZXcgVWludDhDbGFtcGVkQXJyYXkoc3ViYXJyYXkpIDogc3ViYXJyYXk7XG4gICAgfSxcblxuICAgIHBlZWtCeXRlOiBmdW5jdGlvbiBEZWNvZGVTdHJlYW1fcGVla0J5dGUoKSB7XG4gICAgICB2YXIgcGVla2VkQnl0ZSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuXG4gICAgICBpZiAocGVla2VkQnl0ZSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5wb3MtLTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBlZWtlZEJ5dGU7XG4gICAgfSxcblxuICAgIHBlZWtCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgICB2YXIgYnl0ZXMgPSB0aGlzLmdldEJ5dGVzKGxlbmd0aCwgZm9yY2VDbGFtcGVkKTtcbiAgICAgIHRoaXMucG9zIC09IGJ5dGVzLmxlbmd0aDtcbiAgICAgIHJldHVybiBieXRlcztcbiAgICB9LFxuXG4gICAgbWFrZVN1YlN0cmVhbTogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX21ha2VTdWJTdHJlYW0oc3RhcnQsIGxlbmd0aCwgZGljdCkge1xuICAgICAgdmFyIGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuXG4gICAgICB3aGlsZSAodGhpcy5idWZmZXJMZW5ndGggPD0gZW5kICYmICF0aGlzLmVvZikge1xuICAgICAgICB0aGlzLnJlYWRCbG9jaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFN0cmVhbSh0aGlzLmJ1ZmZlciwgc3RhcnQsIGxlbmd0aCwgZGljdCk7XG4gICAgfSxcblxuICAgIGdldEJ5dGVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIERlY29kZVN0cmVhbS5nZXRCeXRlUmFuZ2VcIik7XG4gICAgfSxcblxuICAgIHNraXA6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9za2lwKG4pIHtcbiAgICAgIGlmICghbikge1xuICAgICAgICBuID0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgKz0gbjtcbiAgICB9LFxuICAgIHJlc2V0OiBmdW5jdGlvbiBEZWNvZGVTdHJlYW1fcmVzZXQoKSB7XG4gICAgICB0aGlzLnBvcyA9IDA7XG4gICAgfSxcbiAgICBnZXRCYXNlU3RyZWFtczogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX2dldEJhc2VTdHJlYW1zKCkge1xuICAgICAgaWYgKHRoaXMuc3RyICYmIHRoaXMuc3RyLmdldEJhc2VTdHJlYW1zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ci5nZXRCYXNlU3RyZWFtcygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9O1xuICByZXR1cm4gRGVjb2RlU3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLkRlY29kZVN0cmVhbSA9IERlY29kZVN0cmVhbTtcblxudmFyIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbSA9IGZ1bmN0aW9uIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbShzdHJlYW1zKSB7XG4gICAgdGhpcy5zdHJlYW1zID0gc3RyZWFtcztcbiAgICBsZXQgbWF5YmVMZW5ndGggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gc3RyZWFtcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBzdHJlYW1zW2ldO1xuXG4gICAgICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgRGVjb2RlU3RyZWFtKSB7XG4gICAgICAgIG1heWJlTGVuZ3RoICs9IHN0cmVhbS5fcmF3TWluQnVmZmVyTGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF5YmVMZW5ndGggKz0gc3RyZWFtLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBEZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gIH1cblxuICBTdHJlYW1zU2VxdWVuY2VTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICBTdHJlYW1zU2VxdWVuY2VTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIHN0cmVhbVNlcXVlbmNlU3RyZWFtUmVhZEJsb2NrKCkge1xuICAgIHZhciBzdHJlYW1zID0gdGhpcy5zdHJlYW1zO1xuXG4gICAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHN0cmVhbSA9IHN0cmVhbXMuc2hpZnQoKTtcbiAgICB2YXIgY2h1bmsgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgdmFyIG5ld0xlbmd0aCA9IGJ1ZmZlckxlbmd0aCArIGNodW5rLmxlbmd0aDtcbiAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIobmV3TGVuZ3RoKTtcbiAgICBidWZmZXIuc2V0KGNodW5rLCBidWZmZXJMZW5ndGgpO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gbmV3TGVuZ3RoO1xuICB9O1xuXG4gIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbS5wcm90b3R5cGUuZ2V0QmFzZVN0cmVhbXMgPSBmdW5jdGlvbiBTdHJlYW1zU2VxdWVuY2VTdHJlYW1fZ2V0QmFzZVN0cmVhbXMoKSB7XG4gICAgdmFyIGJhc2VTdHJlYW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLnN0cmVhbXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuc3RyZWFtc1tpXTtcblxuICAgICAgaWYgKHN0cmVhbS5nZXRCYXNlU3RyZWFtcykge1xuICAgICAgICBiYXNlU3RyZWFtcy5wdXNoKC4uLnN0cmVhbS5nZXRCYXNlU3RyZWFtcygpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVN0cmVhbXM7XG4gIH07XG5cbiAgcmV0dXJuIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbTtcbn0oKTtcblxuZXhwb3J0cy5TdHJlYW1zU2VxdWVuY2VTdHJlYW0gPSBTdHJlYW1zU2VxdWVuY2VTdHJlYW07XG5cbnZhciBGbGF0ZVN0cmVhbSA9IGZ1bmN0aW9uIEZsYXRlU3RyZWFtQ2xvc3VyZSgpIHtcbiAgdmFyIGNvZGVMZW5Db2RlTWFwID0gbmV3IEludDMyQXJyYXkoWzE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTVdKTtcbiAgdmFyIGxlbmd0aERlY29kZSA9IG5ldyBJbnQzMkFycmF5KFsweDAwMDAzLCAweDAwMDA0LCAweDAwMDA1LCAweDAwMDA2LCAweDAwMDA3LCAweDAwMDA4LCAweDAwMDA5LCAweDAwMDBhLCAweDEwMDBiLCAweDEwMDBkLCAweDEwMDBmLCAweDEwMDExLCAweDIwMDEzLCAweDIwMDE3LCAweDIwMDFiLCAweDIwMDFmLCAweDMwMDIzLCAweDMwMDJiLCAweDMwMDMzLCAweDMwMDNiLCAweDQwMDQzLCAweDQwMDUzLCAweDQwMDYzLCAweDQwMDczLCAweDUwMDgzLCAweDUwMGEzLCAweDUwMGMzLCAweDUwMGUzLCAweDAwMTAyLCAweDAwMTAyLCAweDAwMTAyXSk7XG4gIHZhciBkaXN0RGVjb2RlID0gbmV3IEludDMyQXJyYXkoWzB4MDAwMDEsIDB4MDAwMDIsIDB4MDAwMDMsIDB4MDAwMDQsIDB4MTAwMDUsIDB4MTAwMDcsIDB4MjAwMDksIDB4MjAwMGQsIDB4MzAwMTEsIDB4MzAwMTksIDB4NDAwMjEsIDB4NDAwMzEsIDB4NTAwNDEsIDB4NTAwNjEsIDB4NjAwODEsIDB4NjAwYzEsIDB4NzAxMDEsIDB4NzAxODEsIDB4ODAyMDEsIDB4ODAzMDEsIDB4OTA0MDEsIDB4OTA2MDEsIDB4YTA4MDEsIDB4YTBjMDEsIDB4YjEwMDEsIDB4YjE4MDEsIDB4YzIwMDEsIDB4YzMwMDEsIDB4ZDQwMDEsIDB4ZDYwMDFdKTtcbiAgdmFyIGZpeGVkTGl0Q29kZVRhYiA9IFtuZXcgSW50MzJBcnJheShbMHg3MDEwMCwgMHg4MDA1MCwgMHg4MDAxMCwgMHg4MDExOCwgMHg3MDExMCwgMHg4MDA3MCwgMHg4MDAzMCwgMHg5MDBjMCwgMHg3MDEwOCwgMHg4MDA2MCwgMHg4MDAyMCwgMHg5MDBhMCwgMHg4MDAwMCwgMHg4MDA4MCwgMHg4MDA0MCwgMHg5MDBlMCwgMHg3MDEwNCwgMHg4MDA1OCwgMHg4MDAxOCwgMHg5MDA5MCwgMHg3MDExNCwgMHg4MDA3OCwgMHg4MDAzOCwgMHg5MDBkMCwgMHg3MDEwYywgMHg4MDA2OCwgMHg4MDAyOCwgMHg5MDBiMCwgMHg4MDAwOCwgMHg4MDA4OCwgMHg4MDA0OCwgMHg5MDBmMCwgMHg3MDEwMiwgMHg4MDA1NCwgMHg4MDAxNCwgMHg4MDExYywgMHg3MDExMiwgMHg4MDA3NCwgMHg4MDAzNCwgMHg5MDBjOCwgMHg3MDEwYSwgMHg4MDA2NCwgMHg4MDAyNCwgMHg5MDBhOCwgMHg4MDAwNCwgMHg4MDA4NCwgMHg4MDA0NCwgMHg5MDBlOCwgMHg3MDEwNiwgMHg4MDA1YywgMHg4MDAxYywgMHg5MDA5OCwgMHg3MDExNiwgMHg4MDA3YywgMHg4MDAzYywgMHg5MDBkOCwgMHg3MDEwZSwgMHg4MDA2YywgMHg4MDAyYywgMHg5MDBiOCwgMHg4MDAwYywgMHg4MDA4YywgMHg4MDA0YywgMHg5MDBmOCwgMHg3MDEwMSwgMHg4MDA1MiwgMHg4MDAxMiwgMHg4MDExYSwgMHg3MDExMSwgMHg4MDA3MiwgMHg4MDAzMiwgMHg5MDBjNCwgMHg3MDEwOSwgMHg4MDA2MiwgMHg4MDAyMiwgMHg5MDBhNCwgMHg4MDAwMiwgMHg4MDA4MiwgMHg4MDA0MiwgMHg5MDBlNCwgMHg3MDEwNSwgMHg4MDA1YSwgMHg4MDAxYSwgMHg5MDA5NCwgMHg3MDExNSwgMHg4MDA3YSwgMHg4MDAzYSwgMHg5MDBkNCwgMHg3MDEwZCwgMHg4MDA2YSwgMHg4MDAyYSwgMHg5MDBiNCwgMHg4MDAwYSwgMHg4MDA4YSwgMHg4MDA0YSwgMHg5MDBmNCwgMHg3MDEwMywgMHg4MDA1NiwgMHg4MDAxNiwgMHg4MDExZSwgMHg3MDExMywgMHg4MDA3NiwgMHg4MDAzNiwgMHg5MDBjYywgMHg3MDEwYiwgMHg4MDA2NiwgMHg4MDAyNiwgMHg5MDBhYywgMHg4MDAwNiwgMHg4MDA4NiwgMHg4MDA0NiwgMHg5MDBlYywgMHg3MDEwNywgMHg4MDA1ZSwgMHg4MDAxZSwgMHg5MDA5YywgMHg3MDExNywgMHg4MDA3ZSwgMHg4MDAzZSwgMHg5MDBkYywgMHg3MDEwZiwgMHg4MDA2ZSwgMHg4MDAyZSwgMHg5MDBiYywgMHg4MDAwZSwgMHg4MDA4ZSwgMHg4MDA0ZSwgMHg5MDBmYywgMHg3MDEwMCwgMHg4MDA1MSwgMHg4MDAxMSwgMHg4MDExOSwgMHg3MDExMCwgMHg4MDA3MSwgMHg4MDAzMSwgMHg5MDBjMiwgMHg3MDEwOCwgMHg4MDA2MSwgMHg4MDAyMSwgMHg5MDBhMiwgMHg4MDAwMSwgMHg4MDA4MSwgMHg4MDA0MSwgMHg5MDBlMiwgMHg3MDEwNCwgMHg4MDA1OSwgMHg4MDAxOSwgMHg5MDA5MiwgMHg3MDExNCwgMHg4MDA3OSwgMHg4MDAzOSwgMHg5MDBkMiwgMHg3MDEwYywgMHg4MDA2OSwgMHg4MDAyOSwgMHg5MDBiMiwgMHg4MDAwOSwgMHg4MDA4OSwgMHg4MDA0OSwgMHg5MDBmMiwgMHg3MDEwMiwgMHg4MDA1NSwgMHg4MDAxNSwgMHg4MDExZCwgMHg3MDExMiwgMHg4MDA3NSwgMHg4MDAzNSwgMHg5MDBjYSwgMHg3MDEwYSwgMHg4MDA2NSwgMHg4MDAyNSwgMHg5MDBhYSwgMHg4MDAwNSwgMHg4MDA4NSwgMHg4MDA0NSwgMHg5MDBlYSwgMHg3MDEwNiwgMHg4MDA1ZCwgMHg4MDAxZCwgMHg5MDA5YSwgMHg3MDExNiwgMHg4MDA3ZCwgMHg4MDAzZCwgMHg5MDBkYSwgMHg3MDEwZSwgMHg4MDA2ZCwgMHg4MDAyZCwgMHg5MDBiYSwgMHg4MDAwZCwgMHg4MDA4ZCwgMHg4MDA0ZCwgMHg5MDBmYSwgMHg3MDEwMSwgMHg4MDA1MywgMHg4MDAxMywgMHg4MDExYiwgMHg3MDExMSwgMHg4MDA3MywgMHg4MDAzMywgMHg5MDBjNiwgMHg3MDEwOSwgMHg4MDA2MywgMHg4MDAyMywgMHg5MDBhNiwgMHg4MDAwMywgMHg4MDA4MywgMHg4MDA0MywgMHg5MDBlNiwgMHg3MDEwNSwgMHg4MDA1YiwgMHg4MDAxYiwgMHg5MDA5NiwgMHg3MDExNSwgMHg4MDA3YiwgMHg4MDAzYiwgMHg5MDBkNiwgMHg3MDEwZCwgMHg4MDA2YiwgMHg4MDAyYiwgMHg5MDBiNiwgMHg4MDAwYiwgMHg4MDA4YiwgMHg4MDA0YiwgMHg5MDBmNiwgMHg3MDEwMywgMHg4MDA1NywgMHg4MDAxNywgMHg4MDExZiwgMHg3MDExMywgMHg4MDA3NywgMHg4MDAzNywgMHg5MDBjZSwgMHg3MDEwYiwgMHg4MDA2NywgMHg4MDAyNywgMHg5MDBhZSwgMHg4MDAwNywgMHg4MDA4NywgMHg4MDA0NywgMHg5MDBlZSwgMHg3MDEwNywgMHg4MDA1ZiwgMHg4MDAxZiwgMHg5MDA5ZSwgMHg3MDExNywgMHg4MDA3ZiwgMHg4MDAzZiwgMHg5MDBkZSwgMHg3MDEwZiwgMHg4MDA2ZiwgMHg4MDAyZiwgMHg5MDBiZSwgMHg4MDAwZiwgMHg4MDA4ZiwgMHg4MDA0ZiwgMHg5MDBmZSwgMHg3MDEwMCwgMHg4MDA1MCwgMHg4MDAxMCwgMHg4MDExOCwgMHg3MDExMCwgMHg4MDA3MCwgMHg4MDAzMCwgMHg5MDBjMSwgMHg3MDEwOCwgMHg4MDA2MCwgMHg4MDAyMCwgMHg5MDBhMSwgMHg4MDAwMCwgMHg4MDA4MCwgMHg4MDA0MCwgMHg5MDBlMSwgMHg3MDEwNCwgMHg4MDA1OCwgMHg4MDAxOCwgMHg5MDA5MSwgMHg3MDExNCwgMHg4MDA3OCwgMHg4MDAzOCwgMHg5MDBkMSwgMHg3MDEwYywgMHg4MDA2OCwgMHg4MDAyOCwgMHg5MDBiMSwgMHg4MDAwOCwgMHg4MDA4OCwgMHg4MDA0OCwgMHg5MDBmMSwgMHg3MDEwMiwgMHg4MDA1NCwgMHg4MDAxNCwgMHg4MDExYywgMHg3MDExMiwgMHg4MDA3NCwgMHg4MDAzNCwgMHg5MDBjOSwgMHg3MDEwYSwgMHg4MDA2NCwgMHg4MDAyNCwgMHg5MDBhOSwgMHg4MDAwNCwgMHg4MDA4NCwgMHg4MDA0NCwgMHg5MDBlOSwgMHg3MDEwNiwgMHg4MDA1YywgMHg4MDAxYywgMHg5MDA5OSwgMHg3MDExNiwgMHg4MDA3YywgMHg4MDAzYywgMHg5MDBkOSwgMHg3MDEwZSwgMHg4MDA2YywgMHg4MDAyYywgMHg5MDBiOSwgMHg4MDAwYywgMHg4MDA4YywgMHg4MDA0YywgMHg5MDBmOSwgMHg3MDEwMSwgMHg4MDA1MiwgMHg4MDAxMiwgMHg4MDExYSwgMHg3MDExMSwgMHg4MDA3MiwgMHg4MDAzMiwgMHg5MDBjNSwgMHg3MDEwOSwgMHg4MDA2MiwgMHg4MDAyMiwgMHg5MDBhNSwgMHg4MDAwMiwgMHg4MDA4MiwgMHg4MDA0MiwgMHg5MDBlNSwgMHg3MDEwNSwgMHg4MDA1YSwgMHg4MDAxYSwgMHg5MDA5NSwgMHg3MDExNSwgMHg4MDA3YSwgMHg4MDAzYSwgMHg5MDBkNSwgMHg3MDEwZCwgMHg4MDA2YSwgMHg4MDAyYSwgMHg5MDBiNSwgMHg4MDAwYSwgMHg4MDA4YSwgMHg4MDA0YSwgMHg5MDBmNSwgMHg3MDEwMywgMHg4MDA1NiwgMHg4MDAxNiwgMHg4MDExZSwgMHg3MDExMywgMHg4MDA3NiwgMHg4MDAzNiwgMHg5MDBjZCwgMHg3MDEwYiwgMHg4MDA2NiwgMHg4MDAyNiwgMHg5MDBhZCwgMHg4MDAwNiwgMHg4MDA4NiwgMHg4MDA0NiwgMHg5MDBlZCwgMHg3MDEwNywgMHg4MDA1ZSwgMHg4MDAxZSwgMHg5MDA5ZCwgMHg3MDExNywgMHg4MDA3ZSwgMHg4MDAzZSwgMHg5MDBkZCwgMHg3MDEwZiwgMHg4MDA2ZSwgMHg4MDAyZSwgMHg5MDBiZCwgMHg4MDAwZSwgMHg4MDA4ZSwgMHg4MDA0ZSwgMHg5MDBmZCwgMHg3MDEwMCwgMHg4MDA1MSwgMHg4MDAxMSwgMHg4MDExOSwgMHg3MDExMCwgMHg4MDA3MSwgMHg4MDAzMSwgMHg5MDBjMywgMHg3MDEwOCwgMHg4MDA2MSwgMHg4MDAyMSwgMHg5MDBhMywgMHg4MDAwMSwgMHg4MDA4MSwgMHg4MDA0MSwgMHg5MDBlMywgMHg3MDEwNCwgMHg4MDA1OSwgMHg4MDAxOSwgMHg5MDA5MywgMHg3MDExNCwgMHg4MDA3OSwgMHg4MDAzOSwgMHg5MDBkMywgMHg3MDEwYywgMHg4MDA2OSwgMHg4MDAyOSwgMHg5MDBiMywgMHg4MDAwOSwgMHg4MDA4OSwgMHg4MDA0OSwgMHg5MDBmMywgMHg3MDEwMiwgMHg4MDA1NSwgMHg4MDAxNSwgMHg4MDExZCwgMHg3MDExMiwgMHg4MDA3NSwgMHg4MDAzNSwgMHg5MDBjYiwgMHg3MDEwYSwgMHg4MDA2NSwgMHg4MDAyNSwgMHg5MDBhYiwgMHg4MDAwNSwgMHg4MDA4NSwgMHg4MDA0NSwgMHg5MDBlYiwgMHg3MDEwNiwgMHg4MDA1ZCwgMHg4MDAxZCwgMHg5MDA5YiwgMHg3MDExNiwgMHg4MDA3ZCwgMHg4MDAzZCwgMHg5MDBkYiwgMHg3MDEwZSwgMHg4MDA2ZCwgMHg4MDAyZCwgMHg5MDBiYiwgMHg4MDAwZCwgMHg4MDA4ZCwgMHg4MDA0ZCwgMHg5MDBmYiwgMHg3MDEwMSwgMHg4MDA1MywgMHg4MDAxMywgMHg4MDExYiwgMHg3MDExMSwgMHg4MDA3MywgMHg4MDAzMywgMHg5MDBjNywgMHg3MDEwOSwgMHg4MDA2MywgMHg4MDAyMywgMHg5MDBhNywgMHg4MDAwMywgMHg4MDA4MywgMHg4MDA0MywgMHg5MDBlNywgMHg3MDEwNSwgMHg4MDA1YiwgMHg4MDAxYiwgMHg5MDA5NywgMHg3MDExNSwgMHg4MDA3YiwgMHg4MDAzYiwgMHg5MDBkNywgMHg3MDEwZCwgMHg4MDA2YiwgMHg4MDAyYiwgMHg5MDBiNywgMHg4MDAwYiwgMHg4MDA4YiwgMHg4MDA0YiwgMHg5MDBmNywgMHg3MDEwMywgMHg4MDA1NywgMHg4MDAxNywgMHg4MDExZiwgMHg3MDExMywgMHg4MDA3NywgMHg4MDAzNywgMHg5MDBjZiwgMHg3MDEwYiwgMHg4MDA2NywgMHg4MDAyNywgMHg5MDBhZiwgMHg4MDAwNywgMHg4MDA4NywgMHg4MDA0NywgMHg5MDBlZiwgMHg3MDEwNywgMHg4MDA1ZiwgMHg4MDAxZiwgMHg5MDA5ZiwgMHg3MDExNywgMHg4MDA3ZiwgMHg4MDAzZiwgMHg5MDBkZiwgMHg3MDEwZiwgMHg4MDA2ZiwgMHg4MDAyZiwgMHg5MDBiZiwgMHg4MDAwZiwgMHg4MDA4ZiwgMHg4MDA0ZiwgMHg5MDBmZl0pLCA5XTtcbiAgdmFyIGZpeGVkRGlzdENvZGVUYWIgPSBbbmV3IEludDMyQXJyYXkoWzB4NTAwMDAsIDB4NTAwMTAsIDB4NTAwMDgsIDB4NTAwMTgsIDB4NTAwMDQsIDB4NTAwMTQsIDB4NTAwMGMsIDB4NTAwMWMsIDB4NTAwMDIsIDB4NTAwMTIsIDB4NTAwMGEsIDB4NTAwMWEsIDB4NTAwMDYsIDB4NTAwMTYsIDB4NTAwMGUsIDB4MDAwMDAsIDB4NTAwMDEsIDB4NTAwMTEsIDB4NTAwMDksIDB4NTAwMTksIDB4NTAwMDUsIDB4NTAwMTUsIDB4NTAwMGQsIDB4NTAwMWQsIDB4NTAwMDMsIDB4NTAwMTMsIDB4NTAwMGIsIDB4NTAwMWIsIDB4NTAwMDcsIDB4NTAwMTcsIDB4NTAwMGYsIDB4MDAwMDBdKSwgNV07XG5cbiAgZnVuY3Rpb24gRmxhdGVTdHJlYW0oc3RyLCBtYXliZUxlbmd0aCkge1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgIHZhciBjbWYgPSBzdHIuZ2V0Qnl0ZSgpO1xuICAgIHZhciBmbGcgPSBzdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgaWYgKGNtZiA9PT0gLTEgfHwgZmxnID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW06ICR7Y21mfSwgJHtmbGd9YCk7XG4gICAgfVxuXG4gICAgaWYgKChjbWYgJiAweDBmKSAhPT0gMHgwOCkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBmbGF0ZSBzdHJlYW06ICR7Y21mfSwgJHtmbGd9YCk7XG4gICAgfVxuXG4gICAgaWYgKCgoY21mIDw8IDgpICsgZmxnKSAlIDMxICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEJhZCBGQ0hFQ0sgaW4gZmxhdGUgc3RyZWFtOiAke2NtZn0sICR7ZmxnfWApO1xuICAgIH1cblxuICAgIGlmIChmbGcgJiAweDIwKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAke2NtZn0sICR7ZmxnfWApO1xuICAgIH1cblxuICAgIHRoaXMuY29kZVNpemUgPSAwO1xuICAgIHRoaXMuY29kZUJ1ZiA9IDA7XG4gICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICB9XG5cbiAgRmxhdGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICBGbGF0ZVN0cmVhbS5wcm90b3R5cGUuZ2V0Qml0cyA9IGZ1bmN0aW9uIEZsYXRlU3RyZWFtX2dldEJpdHMoYml0cykge1xuICAgIHZhciBzdHIgPSB0aGlzLnN0cjtcbiAgICB2YXIgY29kZVNpemUgPSB0aGlzLmNvZGVTaXplO1xuICAgIHZhciBjb2RlQnVmID0gdGhpcy5jb2RlQnVmO1xuICAgIHZhciBiO1xuXG4gICAgd2hpbGUgKGNvZGVTaXplIDwgYml0cykge1xuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW1cIik7XG4gICAgICB9XG5cbiAgICAgIGNvZGVCdWYgfD0gYiA8PCBjb2RlU2l6ZTtcbiAgICAgIGNvZGVTaXplICs9IDg7XG4gICAgfVxuXG4gICAgYiA9IGNvZGVCdWYgJiAoMSA8PCBiaXRzKSAtIDE7XG4gICAgdGhpcy5jb2RlQnVmID0gY29kZUJ1ZiA+PiBiaXRzO1xuICAgIHRoaXMuY29kZVNpemUgPSBjb2RlU2l6ZSAtPSBiaXRzO1xuICAgIHJldHVybiBiO1xuICB9O1xuXG4gIEZsYXRlU3RyZWFtLnByb3RvdHlwZS5nZXRDb2RlID0gZnVuY3Rpb24gRmxhdGVTdHJlYW1fZ2V0Q29kZSh0YWJsZSkge1xuICAgIHZhciBzdHIgPSB0aGlzLnN0cjtcbiAgICB2YXIgY29kZXMgPSB0YWJsZVswXTtcbiAgICB2YXIgbWF4TGVuID0gdGFibGVbMV07XG4gICAgdmFyIGNvZGVTaXplID0gdGhpcy5jb2RlU2l6ZTtcbiAgICB2YXIgY29kZUJ1ZiA9IHRoaXMuY29kZUJ1ZjtcbiAgICB2YXIgYjtcblxuICAgIHdoaWxlIChjb2RlU2l6ZSA8IG1heExlbikge1xuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb2RlQnVmIHw9IGIgPDwgY29kZVNpemU7XG4gICAgICBjb2RlU2l6ZSArPSA4O1xuICAgIH1cblxuICAgIHZhciBjb2RlID0gY29kZXNbY29kZUJ1ZiAmICgxIDw8IG1heExlbikgLSAxXTtcbiAgICB2YXIgY29kZUxlbiA9IGNvZGUgPj4gMTY7XG4gICAgdmFyIGNvZGVWYWwgPSBjb2RlICYgMHhmZmZmO1xuXG4gICAgaWYgKGNvZGVMZW4gPCAxIHx8IGNvZGVTaXplIDwgY29kZUxlbikge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGVCdWYgPSBjb2RlQnVmID4+IGNvZGVMZW47XG4gICAgdGhpcy5jb2RlU2l6ZSA9IGNvZGVTaXplIC0gY29kZUxlbjtcbiAgICByZXR1cm4gY29kZVZhbDtcbiAgfTtcblxuICBGbGF0ZVN0cmVhbS5wcm90b3R5cGUuZ2VuZXJhdGVIdWZmbWFuVGFibGUgPSBmdW5jdGlvbiBmbGF0ZVN0cmVhbUdlbmVyYXRlSHVmZm1hblRhYmxlKGxlbmd0aHMpIHtcbiAgICB2YXIgbiA9IGxlbmd0aHMubGVuZ3RoO1xuICAgIHZhciBtYXhMZW4gPSAwO1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKGxlbmd0aHNbaV0gPiBtYXhMZW4pIHtcbiAgICAgICAgbWF4TGVuID0gbGVuZ3Roc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2l6ZSA9IDEgPDwgbWF4TGVuO1xuICAgIHZhciBjb2RlcyA9IG5ldyBJbnQzMkFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgbGVuID0gMSwgY29kZSA9IDAsIHNraXAgPSAyOyBsZW4gPD0gbWF4TGVuOyArK2xlbiwgY29kZSA8PD0gMSwgc2tpcCA8PD0gMSkge1xuICAgICAgZm9yICh2YXIgdmFsID0gMDsgdmFsIDwgbjsgKyt2YWwpIHtcbiAgICAgICAgaWYgKGxlbmd0aHNbdmFsXSA9PT0gbGVuKSB7XG4gICAgICAgICAgdmFyIGNvZGUyID0gMDtcbiAgICAgICAgICB2YXIgdCA9IGNvZGU7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIGNvZGUyID0gY29kZTIgPDwgMSB8IHQgJiAxO1xuICAgICAgICAgICAgdCA+Pj0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGkgPSBjb2RlMjsgaSA8IHNpemU7IGkgKz0gc2tpcCkge1xuICAgICAgICAgICAgY29kZXNbaV0gPSBsZW4gPDwgMTYgfCB2YWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgKytjb2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtjb2RlcywgbWF4TGVuXTtcbiAgfTtcblxuICBGbGF0ZVN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gRmxhdGVTdHJlYW1fcmVhZEJsb2NrKCkge1xuICAgIHZhciBidWZmZXIsIGxlbjtcbiAgICB2YXIgc3RyID0gdGhpcy5zdHI7XG4gICAgdmFyIGhkciA9IHRoaXMuZ2V0Qml0cygzKTtcblxuICAgIGlmIChoZHIgJiAxKSB7XG4gICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgfVxuXG4gICAgaGRyID4+PSAxO1xuXG4gICAgaWYgKGhkciA9PT0gMCkge1xuICAgICAgdmFyIGI7XG5cbiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJsb2NrTGVuID0gYjtcblxuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBibG9ja0xlbiB8PSBiIDw8IDg7XG5cbiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoZWNrID0gYjtcblxuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBjaGVjayB8PSBiIDw8IDg7XG5cbiAgICAgIGlmIChjaGVjayAhPT0gKH5ibG9ja0xlbiAmIDB4ZmZmZikgJiYgKGJsb2NrTGVuICE9PSAwIHx8IGNoZWNrICE9PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW1cIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZUJ1ZiA9IDA7XG4gICAgICB0aGlzLmNvZGVTaXplID0gMDtcbiAgICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoLFxuICAgICAgICAgICAgZW5kID0gYnVmZmVyTGVuZ3RoICsgYmxvY2tMZW47XG4gICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihlbmQpO1xuICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBlbmQ7XG5cbiAgICAgIGlmIChibG9ja0xlbiA9PT0gMCkge1xuICAgICAgICBpZiAoc3RyLnBlZWtCeXRlKCkgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBibG9jayA9IHN0ci5nZXRCeXRlcyhibG9ja0xlbik7XG4gICAgICAgIGJ1ZmZlci5zZXQoYmxvY2ssIGJ1ZmZlckxlbmd0aCk7XG5cbiAgICAgICAgaWYgKGJsb2NrLmxlbmd0aCA8IGJsb2NrTGVuKSB7XG4gICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGl0Q29kZVRhYmxlO1xuICAgIHZhciBkaXN0Q29kZVRhYmxlO1xuXG4gICAgaWYgKGhkciA9PT0gMSkge1xuICAgICAgbGl0Q29kZVRhYmxlID0gZml4ZWRMaXRDb2RlVGFiO1xuICAgICAgZGlzdENvZGVUYWJsZSA9IGZpeGVkRGlzdENvZGVUYWI7XG4gICAgfSBlbHNlIGlmIChoZHIgPT09IDIpIHtcbiAgICAgIHZhciBudW1MaXRDb2RlcyA9IHRoaXMuZ2V0Qml0cyg1KSArIDI1NztcbiAgICAgIHZhciBudW1EaXN0Q29kZXMgPSB0aGlzLmdldEJpdHMoNSkgKyAxO1xuICAgICAgdmFyIG51bUNvZGVMZW5Db2RlcyA9IHRoaXMuZ2V0Qml0cyg0KSArIDQ7XG4gICAgICB2YXIgY29kZUxlbkNvZGVMZW5ndGhzID0gbmV3IFVpbnQ4QXJyYXkoY29kZUxlbkNvZGVNYXAubGVuZ3RoKTtcbiAgICAgIHZhciBpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQ29kZUxlbkNvZGVzOyArK2kpIHtcbiAgICAgICAgY29kZUxlbkNvZGVMZW5ndGhzW2NvZGVMZW5Db2RlTWFwW2ldXSA9IHRoaXMuZ2V0Qml0cygzKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvZGVMZW5Db2RlVGFiID0gdGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShjb2RlTGVuQ29kZUxlbmd0aHMpO1xuICAgICAgbGVuID0gMDtcbiAgICAgIGkgPSAwO1xuICAgICAgdmFyIGNvZGVzID0gbnVtTGl0Q29kZXMgKyBudW1EaXN0Q29kZXM7XG4gICAgICB2YXIgY29kZUxlbmd0aHMgPSBuZXcgVWludDhBcnJheShjb2Rlcyk7XG4gICAgICB2YXIgYml0c0xlbmd0aCwgYml0c09mZnNldCwgd2hhdDtcblxuICAgICAgd2hpbGUgKGkgPCBjb2Rlcykge1xuICAgICAgICB2YXIgY29kZSA9IHRoaXMuZ2V0Q29kZShjb2RlTGVuQ29kZVRhYik7XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IDE2KSB7XG4gICAgICAgICAgYml0c0xlbmd0aCA9IDI7XG4gICAgICAgICAgYml0c09mZnNldCA9IDM7XG4gICAgICAgICAgd2hhdCA9IGxlbjtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAxNykge1xuICAgICAgICAgIGJpdHNMZW5ndGggPSAzO1xuICAgICAgICAgIGJpdHNPZmZzZXQgPSAzO1xuICAgICAgICAgIHdoYXQgPSBsZW4gPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDE4KSB7XG4gICAgICAgICAgYml0c0xlbmd0aCA9IDc7XG4gICAgICAgICAgYml0c09mZnNldCA9IDExO1xuICAgICAgICAgIHdoYXQgPSBsZW4gPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvZGVMZW5ndGhzW2krK10gPSBsZW4gPSBjb2RlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlcGVhdExlbmd0aCA9IHRoaXMuZ2V0Qml0cyhiaXRzTGVuZ3RoKSArIGJpdHNPZmZzZXQ7XG5cbiAgICAgICAgd2hpbGUgKHJlcGVhdExlbmd0aC0tID4gMCkge1xuICAgICAgICAgIGNvZGVMZW5ndGhzW2krK10gPSB3aGF0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpdENvZGVUYWJsZSA9IHRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMuc3ViYXJyYXkoMCwgbnVtTGl0Q29kZXMpKTtcbiAgICAgIGRpc3RDb2RlVGFibGUgPSB0aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKGNvZGVMZW5ndGhzLnN1YmFycmF5KG51bUxpdENvZGVzLCBjb2RlcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIGJsb2NrIHR5cGUgaW4gZmxhdGUgc3RyZWFtXCIpO1xuICAgIH1cblxuICAgIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgIHZhciBsaW1pdCA9IGJ1ZmZlciA/IGJ1ZmZlci5sZW5ndGggOiAwO1xuICAgIHZhciBwb3MgPSB0aGlzLmJ1ZmZlckxlbmd0aDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgY29kZTEgPSB0aGlzLmdldENvZGUobGl0Q29kZVRhYmxlKTtcblxuICAgICAgaWYgKGNvZGUxIDwgMjU2KSB7XG4gICAgICAgIGlmIChwb3MgKyAxID49IGxpbWl0KSB7XG4gICAgICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIocG9zICsgMSk7XG4gICAgICAgICAgbGltaXQgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZmVyW3BvcysrXSA9IGNvZGUxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvZGUxID09PSAyNTYpIHtcbiAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBwb3M7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29kZTEgLT0gMjU3O1xuICAgICAgY29kZTEgPSBsZW5ndGhEZWNvZGVbY29kZTFdO1xuICAgICAgdmFyIGNvZGUyID0gY29kZTEgPj4gMTY7XG5cbiAgICAgIGlmIChjb2RlMiA+IDApIHtcbiAgICAgICAgY29kZTIgPSB0aGlzLmdldEJpdHMoY29kZTIpO1xuICAgICAgfVxuXG4gICAgICBsZW4gPSAoY29kZTEgJiAweGZmZmYpICsgY29kZTI7XG4gICAgICBjb2RlMSA9IHRoaXMuZ2V0Q29kZShkaXN0Q29kZVRhYmxlKTtcbiAgICAgIGNvZGUxID0gZGlzdERlY29kZVtjb2RlMV07XG4gICAgICBjb2RlMiA9IGNvZGUxID4+IDE2O1xuXG4gICAgICBpZiAoY29kZTIgPiAwKSB7XG4gICAgICAgIGNvZGUyID0gdGhpcy5nZXRCaXRzKGNvZGUyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpc3QgPSAoY29kZTEgJiAweGZmZmYpICsgY29kZTI7XG5cbiAgICAgIGlmIChwb3MgKyBsZW4gPj0gbGltaXQpIHtcbiAgICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIocG9zICsgbGVuKTtcbiAgICAgICAgbGltaXQgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IGxlbjsgKytrLCArK3Bvcykge1xuICAgICAgICBidWZmZXJbcG9zXSA9IGJ1ZmZlcltwb3MgLSBkaXN0XTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIEZsYXRlU3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLkZsYXRlU3RyZWFtID0gRmxhdGVTdHJlYW07XG5cbnZhciBQcmVkaWN0b3JTdHJlYW0gPSBmdW5jdGlvbiBQcmVkaWN0b3JTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBQcmVkaWN0b3JTdHJlYW0oc3RyLCBtYXliZUxlbmd0aCwgcGFyYW1zKSB7XG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShwYXJhbXMpKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHZhciBwcmVkaWN0b3IgPSB0aGlzLnByZWRpY3RvciA9IHBhcmFtcy5nZXQoXCJQcmVkaWN0b3JcIikgfHwgMTtcblxuICAgIGlmIChwcmVkaWN0b3IgPD0gMSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICBpZiAocHJlZGljdG9yICE9PSAyICYmIChwcmVkaWN0b3IgPCAxMCB8fCBwcmVkaWN0b3IgPiAxNSkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5zdXBwb3J0ZWQgcHJlZGljdG9yOiAke3ByZWRpY3Rvcn1gKTtcbiAgICB9XG5cbiAgICBpZiAocHJlZGljdG9yID09PSAyKSB7XG4gICAgICB0aGlzLnJlYWRCbG9jayA9IHRoaXMucmVhZEJsb2NrVGlmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWFkQmxvY2sgPSB0aGlzLnJlYWRCbG9ja1BuZztcbiAgICB9XG5cbiAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnMgPSBwYXJhbXMuZ2V0KFwiQ29sb3JzXCIpIHx8IDE7XG4gICAgdmFyIGJpdHMgPSB0aGlzLmJpdHMgPSBwYXJhbXMuZ2V0KFwiQml0c1BlckNvbXBvbmVudFwiKSB8fCA4O1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5jb2x1bW5zID0gcGFyYW1zLmdldChcIkNvbHVtbnNcIikgfHwgMTtcbiAgICB0aGlzLnBpeEJ5dGVzID0gY29sb3JzICogYml0cyArIDcgPj4gMztcbiAgICB0aGlzLnJvd0J5dGVzID0gY29sdW1ucyAqIGNvbG9ycyAqIGJpdHMgKyA3ID4+IDM7XG4gICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgUHJlZGljdG9yU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG5cbiAgUHJlZGljdG9yU3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2tUaWZmID0gZnVuY3Rpb24gcHJlZGljdG9yU3RyZWFtUmVhZEJsb2NrVGlmZigpIHtcbiAgICB2YXIgcm93Qnl0ZXMgPSB0aGlzLnJvd0J5dGVzO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgcm93Qnl0ZXMpO1xuICAgIHZhciBiaXRzID0gdGhpcy5iaXRzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcmF3Qnl0ZXMgPSB0aGlzLnN0ci5nZXRCeXRlcyhyb3dCeXRlcyk7XG4gICAgdGhpcy5lb2YgPSAhcmF3Qnl0ZXMubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluYnVmID0gMCxcbiAgICAgICAgb3V0YnVmID0gMDtcbiAgICB2YXIgaW5iaXRzID0gMCxcbiAgICAgICAgb3V0Yml0cyA9IDA7XG4gICAgdmFyIHBvcyA9IGJ1ZmZlckxlbmd0aDtcbiAgICB2YXIgaTtcblxuICAgIGlmIChiaXRzID09PSAxICYmIGNvbG9ycyA9PT0gMSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSByYXdCeXRlc1tpXSBeIGluYnVmO1xuICAgICAgICBjIF49IGMgPj4gMTtcbiAgICAgICAgYyBePSBjID4+IDI7XG4gICAgICAgIGMgXj0gYyA+PiA0O1xuICAgICAgICBpbmJ1ZiA9IChjICYgMSkgPDwgNztcbiAgICAgICAgYnVmZmVyW3BvcysrXSA9IGM7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChiaXRzID09PSA4KSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JzOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW3BvcysrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW3Bvc10gPSBidWZmZXJbcG9zIC0gY29sb3JzXSArIHJhd0J5dGVzW2ldO1xuICAgICAgICBwb3MrKztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJpdHMgPT09IDE2KSB7XG4gICAgICB2YXIgYnl0ZXNQZXJQaXhlbCA9IGNvbG9ycyAqIDI7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlc1BlclBpeGVsOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW3BvcysrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIHN1bSA9ICgocmF3Qnl0ZXNbaV0gJiAweGZmKSA8PCA4KSArIChyYXdCeXRlc1tpICsgMV0gJiAweGZmKSArICgoYnVmZmVyW3BvcyAtIGJ5dGVzUGVyUGl4ZWxdICYgMHhmZikgPDwgOCkgKyAoYnVmZmVyW3BvcyAtIGJ5dGVzUGVyUGl4ZWwgKyAxXSAmIDB4ZmYpO1xuICAgICAgICBidWZmZXJbcG9zKytdID0gc3VtID4+IDggJiAweGZmO1xuICAgICAgICBidWZmZXJbcG9zKytdID0gc3VtICYgMHhmZjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbXBBcnJheSA9IG5ldyBVaW50OEFycmF5KGNvbG9ycyArIDEpO1xuICAgICAgdmFyIGJpdE1hc2sgPSAoMSA8PCBiaXRzKSAtIDE7XG4gICAgICB2YXIgaiA9IDAsXG4gICAgICAgICAgayA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgIHZhciBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29sdW1uczsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIGtrID0gMDsga2sgPCBjb2xvcnM7ICsra2spIHtcbiAgICAgICAgICBpZiAoaW5iaXRzIDwgYml0cykge1xuICAgICAgICAgICAgaW5idWYgPSBpbmJ1ZiA8PCA4IHwgcmF3Qnl0ZXNbaisrXSAmIDB4ZmY7XG4gICAgICAgICAgICBpbmJpdHMgKz0gODtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb21wQXJyYXlba2tdID0gY29tcEFycmF5W2trXSArIChpbmJ1ZiA+PiBpbmJpdHMgLSBiaXRzKSAmIGJpdE1hc2s7XG4gICAgICAgICAgaW5iaXRzIC09IGJpdHM7XG4gICAgICAgICAgb3V0YnVmID0gb3V0YnVmIDw8IGJpdHMgfCBjb21wQXJyYXlba2tdO1xuICAgICAgICAgIG91dGJpdHMgKz0gYml0cztcblxuICAgICAgICAgIGlmIChvdXRiaXRzID49IDgpIHtcbiAgICAgICAgICAgIGJ1ZmZlcltrKytdID0gb3V0YnVmID4+IG91dGJpdHMgLSA4ICYgMHhmZjtcbiAgICAgICAgICAgIG91dGJpdHMgLT0gODtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG91dGJpdHMgPiAwKSB7XG4gICAgICAgIGJ1ZmZlcltrKytdID0gKG91dGJ1ZiA8PCA4IC0gb3V0Yml0cykgKyAoaW5idWYgJiAoMSA8PCA4IC0gb3V0Yml0cykgLSAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCArPSByb3dCeXRlcztcbiAgfTtcblxuICBQcmVkaWN0b3JTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9ja1BuZyA9IGZ1bmN0aW9uIHByZWRpY3RvclN0cmVhbVJlYWRCbG9ja1BuZygpIHtcbiAgICB2YXIgcm93Qnl0ZXMgPSB0aGlzLnJvd0J5dGVzO1xuICAgIHZhciBwaXhCeXRlcyA9IHRoaXMucGl4Qnl0ZXM7XG4gICAgdmFyIHByZWRpY3RvciA9IHRoaXMuc3RyLmdldEJ5dGUoKTtcbiAgICB2YXIgcmF3Qnl0ZXMgPSB0aGlzLnN0ci5nZXRCeXRlcyhyb3dCeXRlcyk7XG4gICAgdGhpcy5lb2YgPSAhcmF3Qnl0ZXMubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIHZhciBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyByb3dCeXRlcyk7XG4gICAgdmFyIHByZXZSb3cgPSBidWZmZXIuc3ViYXJyYXkoYnVmZmVyTGVuZ3RoIC0gcm93Qnl0ZXMsIGJ1ZmZlckxlbmd0aCk7XG5cbiAgICBpZiAocHJldlJvdy5sZW5ndGggPT09IDApIHtcbiAgICAgIHByZXZSb3cgPSBuZXcgVWludDhBcnJheShyb3dCeXRlcyk7XG4gICAgfVxuXG4gICAgdmFyIGksXG4gICAgICAgIGogPSBidWZmZXJMZW5ndGgsXG4gICAgICAgIHVwLFxuICAgICAgICBjO1xuXG4gICAgc3dpdGNoIChwcmVkaWN0b3IpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgICBidWZmZXJbaisrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpeEJ5dGVzOyArK2kpIHtcbiAgICAgICAgICBidWZmZXJbaisrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgYnVmZmVyW2pdID0gYnVmZmVyW2ogLSBwaXhCeXRlc10gKyByYXdCeXRlc1tpXSAmIDB4ZmY7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgICBidWZmZXJbaisrXSA9IHByZXZSb3dbaV0gKyByYXdCeXRlc1tpXSAmIDB4ZmY7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGl4Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltqKytdID0gKHByZXZSb3dbaV0gPj4gMSkgKyByYXdCeXRlc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltqXSA9IChwcmV2Um93W2ldICsgYnVmZmVyW2ogLSBwaXhCeXRlc10gPj4gMSkgKyByYXdCeXRlc1tpXSAmIDB4ZmY7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpeEJ5dGVzOyArK2kpIHtcbiAgICAgICAgICB1cCA9IHByZXZSb3dbaV07XG4gICAgICAgICAgYyA9IHJhd0J5dGVzW2ldO1xuICAgICAgICAgIGJ1ZmZlcltqKytdID0gdXAgKyBjO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgdXAgPSBwcmV2Um93W2ldO1xuICAgICAgICAgIHZhciB1cExlZnQgPSBwcmV2Um93W2kgLSBwaXhCeXRlc107XG4gICAgICAgICAgdmFyIGxlZnQgPSBidWZmZXJbaiAtIHBpeEJ5dGVzXTtcbiAgICAgICAgICB2YXIgcCA9IGxlZnQgKyB1cCAtIHVwTGVmdDtcbiAgICAgICAgICB2YXIgcGEgPSBwIC0gbGVmdDtcblxuICAgICAgICAgIGlmIChwYSA8IDApIHtcbiAgICAgICAgICAgIHBhID0gLXBhO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBwYiA9IHAgLSB1cDtcblxuICAgICAgICAgIGlmIChwYiA8IDApIHtcbiAgICAgICAgICAgIHBiID0gLXBiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBwYyA9IHAgLSB1cExlZnQ7XG5cbiAgICAgICAgICBpZiAocGMgPCAwKSB7XG4gICAgICAgICAgICBwYyA9IC1wYztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjID0gcmF3Qnl0ZXNbaV07XG5cbiAgICAgICAgICBpZiAocGEgPD0gcGIgJiYgcGEgPD0gcGMpIHtcbiAgICAgICAgICAgIGJ1ZmZlcltqKytdID0gbGVmdCArIGM7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYiA8PSBwYykge1xuICAgICAgICAgICAgYnVmZmVyW2orK10gPSB1cCArIGM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlcltqKytdID0gdXBMZWZ0ICsgYztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICR7cHJlZGljdG9yfWApO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyTGVuZ3RoICs9IHJvd0J5dGVzO1xuICB9O1xuXG4gIHJldHVybiBQcmVkaWN0b3JTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuUHJlZGljdG9yU3RyZWFtID0gUHJlZGljdG9yU3RyZWFtO1xuXG52YXIgRGVjcnlwdFN0cmVhbSA9IGZ1bmN0aW9uIERlY3J5cHRTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBEZWNyeXB0U3RyZWFtKHN0ciwgbWF5YmVMZW5ndGgsIGRlY3J5cHQpIHtcbiAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcbiAgICB0aGlzLmRlY3J5cHQgPSBkZWNyeXB0O1xuICAgIHRoaXMubmV4dENodW5rID0gbnVsbDtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICB9XG5cbiAgdmFyIGNodW5rU2l6ZSA9IDUxMjtcbiAgRGVjcnlwdFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gIERlY3J5cHRTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIERlY3J5cHRTdHJlYW1fcmVhZEJsb2NrKCkge1xuICAgIHZhciBjaHVuaztcblxuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICBjaHVuayA9IHRoaXMubmV4dENodW5rO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaHVuayA9IHRoaXMuc3RyLmdldEJ5dGVzKGNodW5rU2l6ZSk7XG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWNodW5rIHx8IGNodW5rLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubmV4dENodW5rID0gdGhpcy5zdHIuZ2V0Qnl0ZXMoY2h1bmtTaXplKTtcbiAgICB2YXIgaGFzTW9yZURhdGEgPSB0aGlzLm5leHRDaHVuayAmJiB0aGlzLm5leHRDaHVuay5sZW5ndGggPiAwO1xuICAgIHZhciBkZWNyeXB0ID0gdGhpcy5kZWNyeXB0O1xuICAgIGNodW5rID0gZGVjcnlwdChjaHVuaywgIWhhc01vcmVEYXRhKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBjaHVuay5sZW5ndGg7XG4gICAgdmFyIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIG4pO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCsrXSA9IGNodW5rW2ldO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoO1xuICB9O1xuXG4gIHJldHVybiBEZWNyeXB0U3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLkRlY3J5cHRTdHJlYW0gPSBEZWNyeXB0U3RyZWFtO1xuXG52YXIgQXNjaWk4NVN0cmVhbSA9IGZ1bmN0aW9uIEFzY2lpODVTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBBc2NpaTg1U3RyZWFtKHN0ciwgbWF5YmVMZW5ndGgpIHtcbiAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcbiAgICB0aGlzLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoNSk7XG5cbiAgICBpZiAobWF5YmVMZW5ndGgpIHtcbiAgICAgIG1heWJlTGVuZ3RoID0gMC44ICogbWF5YmVMZW5ndGg7XG4gICAgfVxuXG4gICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICB9XG5cbiAgQXNjaWk4NVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gIEFzY2lpODVTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIEFzY2lpODVTdHJlYW1fcmVhZEJsb2NrKCkge1xuICAgIHZhciBUSUxEQV9DSEFSID0gMHg3ZTtcbiAgICB2YXIgWl9MT1dFUl9DSEFSID0gMHg3YTtcbiAgICB2YXIgRU9GID0gLTE7XG4gICAgdmFyIHN0ciA9IHRoaXMuc3RyO1xuICAgIHZhciBjID0gc3RyLmdldEJ5dGUoKTtcblxuICAgIHdoaWxlICgoMCwgX2NvcmVfdXRpbHMuaXNXaGl0ZVNwYWNlKShjKSkge1xuICAgICAgYyA9IHN0ci5nZXRCeXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKGMgPT09IEVPRiB8fCBjID09PSBUSUxEQV9DSEFSKSB7XG4gICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoLFxuICAgICAgICBidWZmZXI7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAoYyA9PT0gWl9MT1dFUl9DSEFSKSB7XG4gICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyA0KTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoICsgaV0gPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1ZmZlckxlbmd0aCArPSA0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xuICAgICAgaW5wdXRbMF0gPSBjO1xuXG4gICAgICBmb3IgKGkgPSAxOyBpIDwgNTsgKytpKSB7XG4gICAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgICAgIHdoaWxlICgoMCwgX2NvcmVfdXRpbHMuaXNXaGl0ZVNwYWNlKShjKSkge1xuICAgICAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXRbaV0gPSBjO1xuXG4gICAgICAgIGlmIChjID09PSBFT0YgfHwgYyA9PT0gVElMREFfQ0hBUikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIGkgLSAxKTtcbiAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoICs9IGkgLSAxO1xuXG4gICAgICBpZiAoaSA8IDUpIHtcbiAgICAgICAgZm9yICg7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICBpbnB1dFtpXSA9IDB4MjEgKyA4NDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHQgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgNTsgKytpKSB7XG4gICAgICAgIHQgPSB0ICogODUgKyAoaW5wdXRbaV0gLSAweDIxKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMzsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCArIGldID0gdCAmIDB4ZmY7XG4gICAgICAgIHQgPj49IDg7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBBc2NpaTg1U3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLkFzY2lpODVTdHJlYW0gPSBBc2NpaTg1U3RyZWFtO1xuXG52YXIgQXNjaWlIZXhTdHJlYW0gPSBmdW5jdGlvbiBBc2NpaUhleFN0cmVhbUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIEFzY2lpSGV4U3RyZWFtKHN0ciwgbWF5YmVMZW5ndGgpIHtcbiAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcbiAgICB0aGlzLmZpcnN0RGlnaXQgPSAtMTtcblxuICAgIGlmIChtYXliZUxlbmd0aCkge1xuICAgICAgbWF5YmVMZW5ndGggPSAwLjUgKiBtYXliZUxlbmd0aDtcbiAgICB9XG5cbiAgICBEZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gIH1cblxuICBBc2NpaUhleFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gIEFzY2lpSGV4U3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiBBc2NpaUhleFN0cmVhbV9yZWFkQmxvY2soKSB7XG4gICAgdmFyIFVQU1RSRUFNX0JMT0NLX1NJWkUgPSA4MDAwO1xuICAgIHZhciBieXRlcyA9IHRoaXMuc3RyLmdldEJ5dGVzKFVQU1RSRUFNX0JMT0NLX1NJWkUpO1xuXG4gICAgaWYgKCFieXRlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWF4RGVjb2RlTGVuZ3RoID0gYnl0ZXMubGVuZ3RoICsgMSA+PiAxO1xuICAgIHZhciBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCArIG1heERlY29kZUxlbmd0aCk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIHZhciBmaXJzdERpZ2l0ID0gdGhpcy5maXJzdERpZ2l0O1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYnl0ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGNoID0gYnl0ZXNbaV0sXG4gICAgICAgICAgZGlnaXQ7XG5cbiAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHtcbiAgICAgICAgZGlnaXQgPSBjaCAmIDB4MGY7XG4gICAgICB9IGVsc2UgaWYgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg0NiB8fCBjaCA+PSAweDYxICYmIGNoIDw9IDB4NjYpIHtcbiAgICAgICAgZGlnaXQgPSAoY2ggJiAweDBmKSArIDk7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNlKSB7XG4gICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0RGlnaXQgPCAwKSB7XG4gICAgICAgIGZpcnN0RGlnaXQgPSBkaWdpdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSBmaXJzdERpZ2l0IDw8IDQgfCBkaWdpdDtcbiAgICAgICAgZmlyc3REaWdpdCA9IC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaXJzdERpZ2l0ID49IDAgJiYgdGhpcy5lb2YpIHtcbiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSBmaXJzdERpZ2l0IDw8IDQ7XG4gICAgICBmaXJzdERpZ2l0ID0gLTE7XG4gICAgfVxuXG4gICAgdGhpcy5maXJzdERpZ2l0ID0gZmlyc3REaWdpdDtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgfTtcblxuICByZXR1cm4gQXNjaWlIZXhTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuQXNjaWlIZXhTdHJlYW0gPSBBc2NpaUhleFN0cmVhbTtcblxudmFyIFJ1bkxlbmd0aFN0cmVhbSA9IGZ1bmN0aW9uIFJ1bkxlbmd0aFN0cmVhbUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIFJ1bkxlbmd0aFN0cmVhbShzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICB9XG5cbiAgUnVuTGVuZ3RoU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG5cbiAgUnVuTGVuZ3RoU3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiBSdW5MZW5ndGhTdHJlYW1fcmVhZEJsb2NrKCkge1xuICAgIHZhciByZXBlYXRIZWFkZXIgPSB0aGlzLnN0ci5nZXRCeXRlcygyKTtcblxuICAgIGlmICghcmVwZWF0SGVhZGVyIHx8IHJlcGVhdEhlYWRlci5sZW5ndGggPCAyIHx8IHJlcGVhdEhlYWRlclswXSA9PT0gMTI4KSB7XG4gICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJ1ZmZlcjtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgdmFyIG4gPSByZXBlYXRIZWFkZXJbMF07XG5cbiAgICBpZiAobiA8IDEyOCkge1xuICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgbiArIDEpO1xuICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCsrXSA9IHJlcGVhdEhlYWRlclsxXTtcblxuICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLnN0ci5nZXRCeXRlcyhuKTtcbiAgICAgICAgYnVmZmVyLnNldChzb3VyY2UsIGJ1ZmZlckxlbmd0aCk7XG4gICAgICAgIGJ1ZmZlckxlbmd0aCArPSBuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuID0gMjU3IC0gbjtcbiAgICAgIHZhciBiID0gcmVwZWF0SGVhZGVyWzFdO1xuICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgbiArIDEpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gYjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgfTtcblxuICByZXR1cm4gUnVuTGVuZ3RoU3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLlJ1bkxlbmd0aFN0cmVhbSA9IFJ1bkxlbmd0aFN0cmVhbTtcblxudmFyIExaV1N0cmVhbSA9IGZ1bmN0aW9uIExaV1N0cmVhbUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIExaV1N0cmVhbShzdHIsIG1heWJlTGVuZ3RoLCBlYXJseUNoYW5nZSkge1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgIHRoaXMuY2FjaGVkRGF0YSA9IDA7XG4gICAgdGhpcy5iaXRzQ2FjaGVkID0gMDtcbiAgICB2YXIgbWF4THp3RGljdGlvbmFyeVNpemUgPSA0MDk2O1xuICAgIHZhciBsendTdGF0ZSA9IHtcbiAgICAgIGVhcmx5Q2hhbmdlLFxuICAgICAgY29kZUxlbmd0aDogOSxcbiAgICAgIG5leHRDb2RlOiAyNTgsXG4gICAgICBkaWN0aW9uYXJ5VmFsdWVzOiBuZXcgVWludDhBcnJheShtYXhMendEaWN0aW9uYXJ5U2l6ZSksXG4gICAgICBkaWN0aW9uYXJ5TGVuZ3RoczogbmV3IFVpbnQxNkFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSxcbiAgICAgIGRpY3Rpb25hcnlQcmV2Q29kZXM6IG5ldyBVaW50MTZBcnJheShtYXhMendEaWN0aW9uYXJ5U2l6ZSksXG4gICAgICBjdXJyZW50U2VxdWVuY2U6IG5ldyBVaW50OEFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSxcbiAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDogMFxuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgICBsendTdGF0ZS5kaWN0aW9uYXJ5VmFsdWVzW2ldID0gaTtcbiAgICAgIGx6d1N0YXRlLmRpY3Rpb25hcnlMZW5ndGhzW2ldID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLmx6d1N0YXRlID0gbHp3U3RhdGU7XG4gICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICB9XG5cbiAgTFpXU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG5cbiAgTFpXU3RyZWFtLnByb3RvdHlwZS5yZWFkQml0cyA9IGZ1bmN0aW9uIExaV1N0cmVhbV9yZWFkQml0cyhuKSB7XG4gICAgdmFyIGJpdHNDYWNoZWQgPSB0aGlzLmJpdHNDYWNoZWQ7XG4gICAgdmFyIGNhY2hlZERhdGEgPSB0aGlzLmNhY2hlZERhdGE7XG5cbiAgICB3aGlsZSAoYml0c0NhY2hlZCA8IG4pIHtcbiAgICAgIHZhciBjID0gdGhpcy5zdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgICBpZiAoYyA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY2FjaGVkRGF0YSA9IGNhY2hlZERhdGEgPDwgOCB8IGM7XG4gICAgICBiaXRzQ2FjaGVkICs9IDg7XG4gICAgfVxuXG4gICAgdGhpcy5iaXRzQ2FjaGVkID0gYml0c0NhY2hlZCAtPSBuO1xuICAgIHRoaXMuY2FjaGVkRGF0YSA9IGNhY2hlZERhdGE7XG4gICAgdGhpcy5sYXN0Q29kZSA9IG51bGw7XG4gICAgcmV0dXJuIGNhY2hlZERhdGEgPj4+IGJpdHNDYWNoZWQgJiAoMSA8PCBuKSAtIDE7XG4gIH07XG5cbiAgTFpXU3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiBMWldTdHJlYW1fcmVhZEJsb2NrKCkge1xuICAgIHZhciBibG9ja1NpemUgPSA1MTI7XG4gICAgdmFyIGVzdGltYXRlZERlY29kZWRTaXplID0gYmxvY2tTaXplICogMixcbiAgICAgICAgZGVjb2RlZFNpemVEZWx0YSA9IGJsb2NrU2l6ZTtcbiAgICB2YXIgaSwgaiwgcTtcbiAgICB2YXIgbHp3U3RhdGUgPSB0aGlzLmx6d1N0YXRlO1xuXG4gICAgaWYgKCFsendTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlYXJseUNoYW5nZSA9IGx6d1N0YXRlLmVhcmx5Q2hhbmdlO1xuICAgIHZhciBuZXh0Q29kZSA9IGx6d1N0YXRlLm5leHRDb2RlO1xuICAgIHZhciBkaWN0aW9uYXJ5VmFsdWVzID0gbHp3U3RhdGUuZGljdGlvbmFyeVZhbHVlcztcbiAgICB2YXIgZGljdGlvbmFyeUxlbmd0aHMgPSBsendTdGF0ZS5kaWN0aW9uYXJ5TGVuZ3RocztcbiAgICB2YXIgZGljdGlvbmFyeVByZXZDb2RlcyA9IGx6d1N0YXRlLmRpY3Rpb25hcnlQcmV2Q29kZXM7XG4gICAgdmFyIGNvZGVMZW5ndGggPSBsendTdGF0ZS5jb2RlTGVuZ3RoO1xuICAgIHZhciBwcmV2Q29kZSA9IGx6d1N0YXRlLnByZXZDb2RlO1xuICAgIHZhciBjdXJyZW50U2VxdWVuY2UgPSBsendTdGF0ZS5jdXJyZW50U2VxdWVuY2U7XG4gICAgdmFyIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA9IGx6d1N0YXRlLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aDtcbiAgICB2YXIgZGVjb2RlZExlbmd0aCA9IDA7XG4gICAgdmFyIGN1cnJlbnRCdWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyBlc3RpbWF0ZWREZWNvZGVkU2l6ZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcbiAgICAgIHZhciBjb2RlID0gdGhpcy5yZWFkQml0cyhjb2RlTGVuZ3RoKTtcbiAgICAgIHZhciBoYXNQcmV2ID0gY3VycmVudFNlcXVlbmNlTGVuZ3RoID4gMDtcblxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlWzBdID0gY29kZTtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoY29kZSA+PSAyNTgpIHtcbiAgICAgICAgaWYgKGNvZGUgPCBuZXh0Q29kZSkge1xuICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA9IGRpY3Rpb25hcnlMZW5ndGhzW2NvZGVdO1xuXG4gICAgICAgICAgZm9yIChqID0gY3VycmVudFNlcXVlbmNlTGVuZ3RoIC0gMSwgcSA9IGNvZGU7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgICBjdXJyZW50U2VxdWVuY2Vbal0gPSBkaWN0aW9uYXJ5VmFsdWVzW3FdO1xuICAgICAgICAgICAgcSA9IGRpY3Rpb25hcnlQcmV2Q29kZXNbcV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZVtjdXJyZW50U2VxdWVuY2VMZW5ndGgrK10gPSBjdXJyZW50U2VxdWVuY2VbMF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMjU2KSB7XG4gICAgICAgIGNvZGVMZW5ndGggPSA5O1xuICAgICAgICBuZXh0Q29kZSA9IDI1ODtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gMDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmx6d1N0YXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc1ByZXYpIHtcbiAgICAgICAgZGljdGlvbmFyeVByZXZDb2Rlc1tuZXh0Q29kZV0gPSBwcmV2Q29kZTtcbiAgICAgICAgZGljdGlvbmFyeUxlbmd0aHNbbmV4dENvZGVdID0gZGljdGlvbmFyeUxlbmd0aHNbcHJldkNvZGVdICsgMTtcbiAgICAgICAgZGljdGlvbmFyeVZhbHVlc1tuZXh0Q29kZV0gPSBjdXJyZW50U2VxdWVuY2VbMF07XG4gICAgICAgIG5leHRDb2RlKys7XG4gICAgICAgIGNvZGVMZW5ndGggPSBuZXh0Q29kZSArIGVhcmx5Q2hhbmdlICYgbmV4dENvZGUgKyBlYXJseUNoYW5nZSAtIDEgPyBjb2RlTGVuZ3RoIDogTWF0aC5taW4oTWF0aC5sb2cobmV4dENvZGUgKyBlYXJseUNoYW5nZSkgLyAwLjY5MzE0NzE4MDU1OTk0NTMgKyAxLCAxMikgfCAwO1xuICAgICAgfVxuXG4gICAgICBwcmV2Q29kZSA9IGNvZGU7XG4gICAgICBkZWNvZGVkTGVuZ3RoICs9IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDtcblxuICAgICAgaWYgKGVzdGltYXRlZERlY29kZWRTaXplIDwgZGVjb2RlZExlbmd0aCkge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgZXN0aW1hdGVkRGVjb2RlZFNpemUgKz0gZGVjb2RlZFNpemVEZWx0YTtcbiAgICAgICAgfSB3aGlsZSAoZXN0aW1hdGVkRGVjb2RlZFNpemUgPCBkZWNvZGVkTGVuZ3RoKTtcblxuICAgICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCArIGVzdGltYXRlZERlY29kZWRTaXplKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gMDsgaiA8IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDsgaisrKSB7XG4gICAgICAgIGJ1ZmZlcltjdXJyZW50QnVmZmVyTGVuZ3RoKytdID0gY3VycmVudFNlcXVlbmNlW2pdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGx6d1N0YXRlLm5leHRDb2RlID0gbmV4dENvZGU7XG4gICAgbHp3U3RhdGUuY29kZUxlbmd0aCA9IGNvZGVMZW5ndGg7XG4gICAgbHp3U3RhdGUucHJldkNvZGUgPSBwcmV2Q29kZTtcbiAgICBsendTdGF0ZS5jdXJyZW50U2VxdWVuY2VMZW5ndGggPSBjdXJyZW50U2VxdWVuY2VMZW5ndGg7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBjdXJyZW50QnVmZmVyTGVuZ3RoO1xuICB9O1xuXG4gIHJldHVybiBMWldTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuTFpXU3RyZWFtID0gTFpXU3RyZWFtO1xuXG52YXIgTnVsbFN0cmVhbSA9IGZ1bmN0aW9uIE51bGxTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBOdWxsU3RyZWFtKCkge1xuICAgIFN0cmVhbS5jYWxsKHRoaXMsIG5ldyBVaW50OEFycmF5KDApKTtcbiAgfVxuXG4gIE51bGxTdHJlYW0ucHJvdG90eXBlID0gU3RyZWFtLnByb3RvdHlwZTtcbiAgcmV0dXJuIE51bGxTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuTnVsbFN0cmVhbSA9IE51bGxTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ0NJVFRGYXhTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY2NpdHQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE0KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIENDSVRURmF4U3RyZWFtID0gZnVuY3Rpb24gQ0NJVFRGYXhTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBDQ0lUVEZheFN0cmVhbShzdHIsIG1heWJlTGVuZ3RoLCBwYXJhbXMpIHtcbiAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocGFyYW1zKSkge1xuICAgICAgcGFyYW1zID0gX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2UgPSB7XG4gICAgICBuZXh0KCkge1xuICAgICAgICByZXR1cm4gc3RyLmdldEJ5dGUoKTtcbiAgICAgIH1cblxuICAgIH07XG4gICAgdGhpcy5jY2l0dEZheERlY29kZXIgPSBuZXcgX2NjaXR0LkNDSVRURmF4RGVjb2Rlcihzb3VyY2UsIHtcbiAgICAgIEs6IHBhcmFtcy5nZXQoXCJLXCIpLFxuICAgICAgRW5kT2ZMaW5lOiBwYXJhbXMuZ2V0KFwiRW5kT2ZMaW5lXCIpLFxuICAgICAgRW5jb2RlZEJ5dGVBbGlnbjogcGFyYW1zLmdldChcIkVuY29kZWRCeXRlQWxpZ25cIiksXG4gICAgICBDb2x1bW5zOiBwYXJhbXMuZ2V0KFwiQ29sdW1uc1wiKSxcbiAgICAgIFJvd3M6IHBhcmFtcy5nZXQoXCJSb3dzXCIpLFxuICAgICAgRW5kT2ZCbG9jazogcGFyYW1zLmdldChcIkVuZE9mQmxvY2tcIiksXG4gICAgICBCbGFja0lzMTogcGFyYW1zLmdldChcIkJsYWNrSXMxXCIpXG4gICAgfSk7XG5cbiAgICBfc3RyZWFtLkRlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgfVxuXG4gIENDSVRURmF4U3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoX3N0cmVhbS5EZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICBDQ0lUVEZheFN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgIHdoaWxlICghdGhpcy5lb2YpIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNjaXR0RmF4RGVjb2Rlci5yZWFkTmV4dENoYXIoKTtcblxuICAgICAgaWYgKGMgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCArIDEpO1xuICAgICAgdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK10gPSBjO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQ0NJVFRGYXhTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuQ0NJVFRGYXhTdHJlYW0gPSBDQ0lUVEZheFN0cmVhbTtcblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5DQ0lUVEZheERlY29kZXIgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IENDSVRURmF4RGVjb2RlciA9IGZ1bmN0aW9uIENDSVRURmF4RGVjb2RlcigpIHtcbiAgY29uc3QgY2NpdHRFT0wgPSAtMjtcbiAgY29uc3QgY2NpdHRFT0YgPSAtMTtcbiAgY29uc3QgdHdvRGltUGFzcyA9IDA7XG4gIGNvbnN0IHR3b0RpbUhvcml6ID0gMTtcbiAgY29uc3QgdHdvRGltVmVydDAgPSAyO1xuICBjb25zdCB0d29EaW1WZXJ0UjEgPSAzO1xuICBjb25zdCB0d29EaW1WZXJ0TDEgPSA0O1xuICBjb25zdCB0d29EaW1WZXJ0UjIgPSA1O1xuICBjb25zdCB0d29EaW1WZXJ0TDIgPSA2O1xuICBjb25zdCB0d29EaW1WZXJ0UjMgPSA3O1xuICBjb25zdCB0d29EaW1WZXJ0TDMgPSA4O1xuICBjb25zdCB0d29EaW1UYWJsZSA9IFtbLTEsIC0xXSwgWy0xLCAtMV0sIFs3LCB0d29EaW1WZXJ0TDNdLCBbNywgdHdvRGltVmVydFIzXSwgWzYsIHR3b0RpbVZlcnRMMl0sIFs2LCB0d29EaW1WZXJ0TDJdLCBbNiwgdHdvRGltVmVydFIyXSwgWzYsIHR3b0RpbVZlcnRSMl0sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF1dO1xuICBjb25zdCB3aGl0ZVRhYmxlMSA9IFtbLTEsIC0xXSwgWzEyLCBjY2l0dEVPTF0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWzExLCAxNzkyXSwgWzExLCAxNzkyXSwgWzEyLCAxOTg0XSwgWzEyLCAyMDQ4XSwgWzEyLCAyMTEyXSwgWzEyLCAyMTc2XSwgWzEyLCAyMjQwXSwgWzEyLCAyMzA0XSwgWzExLCAxODU2XSwgWzExLCAxODU2XSwgWzExLCAxOTIwXSwgWzExLCAxOTIwXSwgWzEyLCAyMzY4XSwgWzEyLCAyNDMyXSwgWzEyLCAyNDk2XSwgWzEyLCAyNTYwXV07XG4gIGNvbnN0IHdoaXRlVGFibGUyID0gW1stMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbOCwgMjldLCBbOCwgMjldLCBbOCwgMzBdLCBbOCwgMzBdLCBbOCwgNDVdLCBbOCwgNDVdLCBbOCwgNDZdLCBbOCwgNDZdLCBbNywgMjJdLCBbNywgMjJdLCBbNywgMjJdLCBbNywgMjJdLCBbNywgMjNdLCBbNywgMjNdLCBbNywgMjNdLCBbNywgMjNdLCBbOCwgNDddLCBbOCwgNDddLCBbOCwgNDhdLCBbOCwgNDhdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNywgMjBdLCBbNywgMjBdLCBbNywgMjBdLCBbNywgMjBdLCBbOCwgMzNdLCBbOCwgMzNdLCBbOCwgMzRdLCBbOCwgMzRdLCBbOCwgMzVdLCBbOCwgMzVdLCBbOCwgMzZdLCBbOCwgMzZdLCBbOCwgMzddLCBbOCwgMzddLCBbOCwgMzhdLCBbOCwgMzhdLCBbNywgMTldLCBbNywgMTldLCBbNywgMTldLCBbNywgMTldLCBbOCwgMzFdLCBbOCwgMzFdLCBbOCwgMzJdLCBbOCwgMzJdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzgsIDUzXSwgWzgsIDUzXSwgWzgsIDU0XSwgWzgsIDU0XSwgWzcsIDI2XSwgWzcsIDI2XSwgWzcsIDI2XSwgWzcsIDI2XSwgWzgsIDM5XSwgWzgsIDM5XSwgWzgsIDQwXSwgWzgsIDQwXSwgWzgsIDQxXSwgWzgsIDQxXSwgWzgsIDQyXSwgWzgsIDQyXSwgWzgsIDQzXSwgWzgsIDQzXSwgWzgsIDQ0XSwgWzgsIDQ0XSwgWzcsIDIxXSwgWzcsIDIxXSwgWzcsIDIxXSwgWzcsIDIxXSwgWzcsIDI4XSwgWzcsIDI4XSwgWzcsIDI4XSwgWzcsIDI4XSwgWzgsIDYxXSwgWzgsIDYxXSwgWzgsIDYyXSwgWzgsIDYyXSwgWzgsIDYzXSwgWzgsIDYzXSwgWzgsIDBdLCBbOCwgMF0sIFs4LCAzMjBdLCBbOCwgMzIwXSwgWzgsIDM4NF0sIFs4LCAzODRdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNywgMjddLCBbNywgMjddLCBbNywgMjddLCBbNywgMjddLCBbOCwgNTldLCBbOCwgNTldLCBbOCwgNjBdLCBbOCwgNjBdLCBbOSwgMTQ3Ml0sIFs5LCAxNTM2XSwgWzksIDE2MDBdLCBbOSwgMTcyOF0sIFs3LCAxOF0sIFs3LCAxOF0sIFs3LCAxOF0sIFs3LCAxOF0sIFs3LCAyNF0sIFs3LCAyNF0sIFs3LCAyNF0sIFs3LCAyNF0sIFs4LCA0OV0sIFs4LCA0OV0sIFs4LCA1MF0sIFs4LCA1MF0sIFs4LCA1MV0sIFs4LCA1MV0sIFs4LCA1Ml0sIFs4LCA1Ml0sIFs3LCAyNV0sIFs3LCAyNV0sIFs3LCAyNV0sIFs3LCAyNV0sIFs4LCA1NV0sIFs4LCA1NV0sIFs4LCA1Nl0sIFs4LCA1Nl0sIFs4LCA1N10sIFs4LCA1N10sIFs4LCA1OF0sIFs4LCA1OF0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs4LCA0NDhdLCBbOCwgNDQ4XSwgWzgsIDUxMl0sIFs4LCA1MTJdLCBbOSwgNzA0XSwgWzksIDc2OF0sIFs4LCA2NDBdLCBbOCwgNjQwXSwgWzgsIDU3Nl0sIFs4LCA1NzZdLCBbOSwgODMyXSwgWzksIDg5Nl0sIFs5LCA5NjBdLCBbOSwgMTAyNF0sIFs5LCAxMDg4XSwgWzksIDExNTJdLCBbOSwgMTIxNl0sIFs5LCAxMjgwXSwgWzksIDEzNDRdLCBbOSwgMTQwOF0sIFs3LCAyNTZdLCBbNywgMjU2XSwgWzcsIDI1Nl0sIFs3LCAyNTZdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN11dO1xuICBjb25zdCBibGFja1RhYmxlMSA9IFtbLTEsIC0xXSwgWy0xLCAtMV0sIFsxMiwgY2NpdHRFT0xdLCBbMTIsIGNjaXR0RU9MXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMiwgMTk4NF0sIFsxMiwgMTk4NF0sIFsxMiwgMjA0OF0sIFsxMiwgMjA0OF0sIFsxMiwgMjExMl0sIFsxMiwgMjExMl0sIFsxMiwgMjE3Nl0sIFsxMiwgMjE3Nl0sIFsxMiwgMjI0MF0sIFsxMiwgMjI0MF0sIFsxMiwgMjMwNF0sIFsxMiwgMjMwNF0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMiwgMjM2OF0sIFsxMiwgMjM2OF0sIFsxMiwgMjQzMl0sIFsxMiwgMjQzMl0sIFsxMiwgMjQ5Nl0sIFsxMiwgMjQ5Nl0sIFsxMiwgMjU2MF0sIFsxMiwgMjU2MF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEyLCA1Ml0sIFsxMiwgNTJdLCBbMTMsIDY0MF0sIFsxMywgNzA0XSwgWzEzLCA3NjhdLCBbMTMsIDgzMl0sIFsxMiwgNTVdLCBbMTIsIDU1XSwgWzEyLCA1Nl0sIFsxMiwgNTZdLCBbMTMsIDEyODBdLCBbMTMsIDEzNDRdLCBbMTMsIDE0MDhdLCBbMTMsIDE0NzJdLCBbMTIsIDU5XSwgWzEyLCA1OV0sIFsxMiwgNjBdLCBbMTIsIDYwXSwgWzEzLCAxNTM2XSwgWzEzLCAxNjAwXSwgWzExLCAyNF0sIFsxMSwgMjRdLCBbMTEsIDI0XSwgWzExLCAyNF0sIFsxMSwgMjVdLCBbMTEsIDI1XSwgWzExLCAyNV0sIFsxMSwgMjVdLCBbMTMsIDE2NjRdLCBbMTMsIDE3MjhdLCBbMTIsIDMyMF0sIFsxMiwgMzIwXSwgWzEyLCAzODRdLCBbMTIsIDM4NF0sIFsxMiwgNDQ4XSwgWzEyLCA0NDhdLCBbMTMsIDUxMl0sIFsxMywgNTc2XSwgWzEyLCA1M10sIFsxMiwgNTNdLCBbMTIsIDU0XSwgWzEyLCA1NF0sIFsxMywgODk2XSwgWzEzLCA5NjBdLCBbMTMsIDEwMjRdLCBbMTMsIDEwODhdLCBbMTMsIDExNTJdLCBbMTMsIDEyMTZdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF1dO1xuICBjb25zdCBibGFja1RhYmxlMiA9IFtbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbOCwgMTNdLCBbMTEsIDIzXSwgWzExLCAyM10sIFsxMiwgNTBdLCBbMTIsIDUxXSwgWzEyLCA0NF0sIFsxMiwgNDVdLCBbMTIsIDQ2XSwgWzEyLCA0N10sIFsxMiwgNTddLCBbMTIsIDU4XSwgWzEyLCA2MV0sIFsxMiwgMjU2XSwgWzEwLCAxNl0sIFsxMCwgMTZdLCBbMTAsIDE2XSwgWzEwLCAxNl0sIFsxMCwgMTddLCBbMTAsIDE3XSwgWzEwLCAxN10sIFsxMCwgMTddLCBbMTIsIDQ4XSwgWzEyLCA0OV0sIFsxMiwgNjJdLCBbMTIsIDYzXSwgWzEyLCAzMF0sIFsxMiwgMzFdLCBbMTIsIDMyXSwgWzEyLCAzM10sIFsxMiwgNDBdLCBbMTIsIDQxXSwgWzExLCAyMl0sIFsxMSwgMjJdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbOCwgMTRdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTBdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbNywgMTFdLCBbOSwgMTVdLCBbOSwgMTVdLCBbOSwgMTVdLCBbOSwgMTVdLCBbOSwgMTVdLCBbOSwgMTVdLCBbOSwgMTVdLCBbOSwgMTVdLCBbMTIsIDEyOF0sIFsxMiwgMTkyXSwgWzEyLCAyNl0sIFsxMiwgMjddLCBbMTIsIDI4XSwgWzEyLCAyOV0sIFsxMSwgMTldLCBbMTEsIDE5XSwgWzExLCAyMF0sIFsxMSwgMjBdLCBbMTIsIDM0XSwgWzEyLCAzNV0sIFsxMiwgMzZdLCBbMTIsIDM3XSwgWzEyLCAzOF0sIFsxMiwgMzldLCBbMTEsIDIxXSwgWzExLCAyMV0sIFsxMiwgNDJdLCBbMTIsIDQzXSwgWzEwLCAwXSwgWzEwLCAwXSwgWzEwLCAwXSwgWzEwLCAwXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXSwgWzcsIDEyXV07XG4gIGNvbnN0IGJsYWNrVGFibGUzID0gW1stMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbNiwgOV0sIFs2LCA4XSwgWzUsIDddLCBbNSwgN10sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdXTtcblxuICBmdW5jdGlvbiBDQ0lUVEZheERlY29kZXIoc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXNvdXJjZSB8fCB0eXBlb2Ygc291cmNlLm5leHQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDQ0lUVEZheERlY29kZXIgLSBpbnZhbGlkIFwic291cmNlXCIgcGFyYW1ldGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMuZW9mID0gZmFsc2U7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuSyB8fCAwO1xuICAgIHRoaXMuZW9saW5lID0gb3B0aW9ucy5FbmRPZkxpbmUgfHwgZmFsc2U7XG4gICAgdGhpcy5ieXRlQWxpZ24gPSBvcHRpb25zLkVuY29kZWRCeXRlQWxpZ24gfHwgZmFsc2U7XG4gICAgdGhpcy5jb2x1bW5zID0gb3B0aW9ucy5Db2x1bW5zIHx8IDE3Mjg7XG4gICAgdGhpcy5yb3dzID0gb3B0aW9ucy5Sb3dzIHx8IDA7XG4gICAgbGV0IGVvYmxvY2sgPSBvcHRpb25zLkVuZE9mQmxvY2s7XG5cbiAgICBpZiAoZW9ibG9jayA9PT0gbnVsbCB8fCBlb2Jsb2NrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVvYmxvY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuZW9ibG9jayA9IGVvYmxvY2s7XG4gICAgdGhpcy5ibGFjayA9IG9wdGlvbnMuQmxhY2tJczEgfHwgZmFsc2U7XG4gICAgdGhpcy5jb2RpbmdMaW5lID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucyArIDEpO1xuICAgIHRoaXMucmVmTGluZSA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmNvbHVtbnMgKyAyKTtcbiAgICB0aGlzLmNvZGluZ0xpbmVbMF0gPSB0aGlzLmNvbHVtbnM7XG4gICAgdGhpcy5jb2RpbmdQb3MgPSAwO1xuICAgIHRoaXMucm93ID0gMDtcbiAgICB0aGlzLm5leHRMaW5lMkQgPSB0aGlzLmVuY29kaW5nIDwgMDtcbiAgICB0aGlzLmlucHV0Qml0cyA9IDA7XG4gICAgdGhpcy5pbnB1dEJ1ZiA9IDA7XG4gICAgdGhpcy5vdXRwdXRCaXRzID0gMDtcbiAgICB0aGlzLnJvd3NEb25lID0gZmFsc2U7XG4gICAgbGV0IGNvZGUxO1xuXG4gICAgd2hpbGUgKChjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEyKSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUxID09PSAxKSB7XG4gICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmNvZGluZyA+IDApIHtcbiAgICAgIHRoaXMubmV4dExpbmUyRCA9ICF0aGlzLl9sb29rQml0cygxKTtcblxuICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICB9XG4gIH1cblxuICBDQ0lUVEZheERlY29kZXIucHJvdG90eXBlID0ge1xuICAgIHJlYWROZXh0Q2hhcigpIHtcbiAgICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZkxpbmUgPSB0aGlzLnJlZkxpbmU7XG4gICAgICBjb25zdCBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICAgIGxldCByZWZQb3MsIGJsYWNrUGl4ZWxzLCBiaXRzLCBpO1xuXG4gICAgICBpZiAodGhpcy5vdXRwdXRCaXRzID09PSAwKSB7XG4gICAgICAgIGlmICh0aGlzLnJvd3NEb25lKSB7XG4gICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lcnIgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNvZGUxLCBjb2RlMiwgY29kZTM7XG5cbiAgICAgICAgaWYgKHRoaXMubmV4dExpbmUyRCkge1xuICAgICAgICAgIGZvciAoaSA9IDA7IGNvZGluZ0xpbmVbaV0gPCBjb2x1bW5zOyArK2kpIHtcbiAgICAgICAgICAgIHJlZkxpbmVbaV0gPSBjb2RpbmdMaW5lW2ldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlZkxpbmVbaSsrXSA9IGNvbHVtbnM7XG4gICAgICAgICAgcmVmTGluZVtpXSA9IGNvbHVtbnM7XG4gICAgICAgICAgY29kaW5nTGluZVswXSA9IDA7XG4gICAgICAgICAgdGhpcy5jb2RpbmdQb3MgPSAwO1xuICAgICAgICAgIHJlZlBvcyA9IDA7XG4gICAgICAgICAgYmxhY2tQaXhlbHMgPSAwO1xuXG4gICAgICAgICAgd2hpbGUgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgY29kZTEgPSB0aGlzLl9nZXRUd29EaW1Db2RlKCk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoY29kZTEpIHtcbiAgICAgICAgICAgICAgY2FzZSB0d29EaW1QYXNzOlxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvcyArIDFdLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVmTGluZVtyZWZQb3MgKyAxXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgdHdvRGltSG9yaXo6XG4gICAgICAgICAgICAgICAgY29kZTEgPSBjb2RlMiA9IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAoYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTEgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTtcbiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcblxuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlMiArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0V2hpdGVDb2RlKCk7XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7XG5cbiAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTIgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTtcbiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gKyBjb2RlMSwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICsgY29kZTIsIGJsYWNrUGl4ZWxzIF4gMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRSMzpcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3NdICsgMywgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuXG4gICAgICAgICAgICAgICAgICB3aGlsZSAocmVmTGluZVtyZWZQb3NdIDw9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICYmIHJlZkxpbmVbcmVmUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSB0d29EaW1WZXJ0UjI6XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKHJlZkxpbmVbcmVmUG9zXSArIDIsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydFIxOlxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10gKyAxLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgKytyZWZQb3M7XG5cbiAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnQwOlxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10sIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwzOlxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVsc05lZyhyZWZMaW5lW3JlZlBvc10gLSAzLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgaWYgKHJlZlBvcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLS1yZWZQb3M7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICArK3JlZlBvcztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwyOlxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVsc05lZyhyZWZMaW5lW3JlZlBvc10gLSAyLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgaWYgKHJlZlBvcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLS1yZWZQb3M7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICArK3JlZlBvcztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwxOlxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVsc05lZyhyZWZMaW5lW3JlZlBvc10gLSAxLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgaWYgKHJlZlBvcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLS1yZWZQb3M7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICArK3JlZlBvcztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgY2NpdHRFT0Y6XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKGNvbHVtbnMsIDApO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiYmFkIDJkIGNvZGVcIik7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29sdW1ucywgMCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmVyciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvZGluZ0xpbmVbMF0gPSAwO1xuICAgICAgICAgIHRoaXMuY29kaW5nUG9zID0gMDtcbiAgICAgICAgICBibGFja1BpeGVscyA9IDA7XG5cbiAgICAgICAgICB3aGlsZSAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICBjb2RlMSA9IDA7XG5cbiAgICAgICAgICAgIGlmIChibGFja1BpeGVscykge1xuICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgY29kZTEgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTtcbiAgICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0V2hpdGVDb2RlKCk7XG4gICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICsgY29kZTEsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZ290RU9MID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuYnl0ZUFsaWduKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dEJpdHMgJj0gfjc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZW9ibG9jayAmJiB0aGlzLnJvdyA9PT0gdGhpcy5yb3dzIC0gMSkge1xuICAgICAgICAgIHRoaXMucm93c0RvbmUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuZW9saW5lKSB7XG4gICAgICAgICAgICB3aGlsZSAoY29kZTEgIT09IGNjaXR0RU9GICYmIGNvZGUxICE9PSAxKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICAgICAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoaWxlIChjb2RlMSA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuXG4gICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlMSA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7XG5cbiAgICAgICAgICAgIGdvdEVPTCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2RlMSA9PT0gY2NpdHRFT0YpIHtcbiAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZW9mICYmIHRoaXMuZW5jb2RpbmcgPiAwICYmICF0aGlzLnJvd3NEb25lKSB7XG4gICAgICAgICAgdGhpcy5uZXh0TGluZTJEID0gIXRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmVvYmxvY2sgJiYgZ290RU9MICYmIHRoaXMuYnl0ZUFsaWduKSB7XG4gICAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgICBpZiAoY29kZTEgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMTIpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5lbmNvZGluZyA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9va0JpdHMoMSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPj0gMCkge1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgICAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29kZTEgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcImJhZCBydGMgY29kZTogXCIgKyBjb2RlMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbmNvZGluZyA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXJyICYmIHRoaXMuZW9saW5lKSB7XG4gICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTMpO1xuXG4gICAgICAgICAgICBpZiAoY29kZTEgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29kZTEgPj4gMSA9PT0gMSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcblxuICAgICAgICAgIGlmICh0aGlzLmVuY29kaW5nID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgICAgICAgdGhpcy5uZXh0TGluZTJEID0gIShjb2RlMSAmIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RpbmdMaW5lWzBdID4gMCkge1xuICAgICAgICAgIHRoaXMub3V0cHV0Qml0cyA9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3MgPSAwXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm91dHB1dEJpdHMgPSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zID0gMV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvdysrO1xuICAgICAgfVxuXG4gICAgICBsZXQgYztcblxuICAgICAgaWYgKHRoaXMub3V0cHV0Qml0cyA+PSA4KSB7XG4gICAgICAgIGMgPSB0aGlzLmNvZGluZ1BvcyAmIDEgPyAwIDogMHhmZjtcbiAgICAgICAgdGhpcy5vdXRwdXRCaXRzIC09IDg7XG5cbiAgICAgICAgaWYgKHRoaXMub3V0cHV0Qml0cyA9PT0gMCAmJiBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICB0aGlzLmNvZGluZ1BvcysrO1xuICAgICAgICAgIHRoaXMub3V0cHV0Qml0cyA9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIC0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyAtIDFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaXRzID0gODtcbiAgICAgICAgYyA9IDA7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIGlmICh0aGlzLm91dHB1dEJpdHMgPiBiaXRzKSB7XG4gICAgICAgICAgICBjIDw8PSBiaXRzO1xuXG4gICAgICAgICAgICBpZiAoISh0aGlzLmNvZGluZ1BvcyAmIDEpKSB7XG4gICAgICAgICAgICAgIGMgfD0gMHhmZiA+PiA4IC0gYml0cztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzIC09IGJpdHM7XG4gICAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYyA8PD0gdGhpcy5vdXRwdXRCaXRzO1xuXG4gICAgICAgICAgICBpZiAoISh0aGlzLmNvZGluZ1BvcyAmIDEpKSB7XG4gICAgICAgICAgICAgIGMgfD0gMHhmZiA+PiA4IC0gdGhpcy5vdXRwdXRCaXRzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBiaXRzIC09IHRoaXMub3V0cHV0Qml0cztcbiAgICAgICAgICAgIHRoaXMub3V0cHV0Qml0cyA9IDA7XG5cbiAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb2RpbmdQb3MrKztcbiAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gLSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zIC0gMV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJpdHMgPiAwKSB7XG4gICAgICAgICAgICAgIGMgPDw9IGJpdHM7XG4gICAgICAgICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoYml0cyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmJsYWNrKSB7XG4gICAgICAgIGMgXj0gMHhmZjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGM7XG4gICAgfSxcblxuICAgIF9hZGRQaXhlbHMoYTEsIGJsYWNrUGl4ZWxzKSB7XG4gICAgICBjb25zdCBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgICAgbGV0IGNvZGluZ1BvcyA9IHRoaXMuY29kaW5nUG9zO1xuXG4gICAgICBpZiAoYTEgPiBjb2RpbmdMaW5lW2NvZGluZ1Bvc10pIHtcbiAgICAgICAgaWYgKGExID4gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwicm93IGlzIHdyb25nIGxlbmd0aFwiKTtcbiAgICAgICAgICB0aGlzLmVyciA9IHRydWU7XG4gICAgICAgICAgYTEgPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kaW5nUG9zICYgMSBeIGJsYWNrUGl4ZWxzKSB7XG4gICAgICAgICAgKytjb2RpbmdQb3M7XG4gICAgICAgIH1cblxuICAgICAgICBjb2RpbmdMaW5lW2NvZGluZ1Bvc10gPSBhMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb2RpbmdQb3MgPSBjb2RpbmdQb3M7XG4gICAgfSxcblxuICAgIF9hZGRQaXhlbHNOZWcoYTEsIGJsYWNrUGl4ZWxzKSB7XG4gICAgICBjb25zdCBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgICAgbGV0IGNvZGluZ1BvcyA9IHRoaXMuY29kaW5nUG9zO1xuXG4gICAgICBpZiAoYTEgPiBjb2RpbmdMaW5lW2NvZGluZ1Bvc10pIHtcbiAgICAgICAgaWYgKGExID4gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwicm93IGlzIHdyb25nIGxlbmd0aFwiKTtcbiAgICAgICAgICB0aGlzLmVyciA9IHRydWU7XG4gICAgICAgICAgYTEgPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kaW5nUG9zICYgMSBeIGJsYWNrUGl4ZWxzKSB7XG4gICAgICAgICAgKytjb2RpbmdQb3M7XG4gICAgICAgIH1cblxuICAgICAgICBjb2RpbmdMaW5lW2NvZGluZ1Bvc10gPSBhMTtcbiAgICAgIH0gZWxzZSBpZiAoYTEgPCBjb2RpbmdMaW5lW2NvZGluZ1Bvc10pIHtcbiAgICAgICAgaWYgKGExIDwgMCkge1xuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcImludmFsaWQgY29kZVwiKTtcbiAgICAgICAgICB0aGlzLmVyciA9IHRydWU7XG4gICAgICAgICAgYTEgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGNvZGluZ1BvcyA+IDAgJiYgYTEgPCBjb2RpbmdMaW5lW2NvZGluZ1BvcyAtIDFdKSB7XG4gICAgICAgICAgLS1jb2RpbmdQb3M7XG4gICAgICAgIH1cblxuICAgICAgICBjb2RpbmdMaW5lW2NvZGluZ1Bvc10gPSBhMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb2RpbmdQb3MgPSBjb2RpbmdQb3M7XG4gICAgfSxcblxuICAgIF9maW5kVGFibGVDb2RlKHN0YXJ0LCBlbmQsIHRhYmxlLCBsaW1pdCkge1xuICAgICAgY29uc3QgbGltaXRWYWx1ZSA9IGxpbWl0IHx8IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7ICsraSkge1xuICAgICAgICBsZXQgY29kZSA9IHRoaXMuX2xvb2tCaXRzKGkpO1xuXG4gICAgICAgIGlmIChjb2RlID09PSBjY2l0dEVPRikge1xuICAgICAgICAgIHJldHVybiBbdHJ1ZSwgMSwgZmFsc2VdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBlbmQpIHtcbiAgICAgICAgICBjb2RlIDw8PSBlbmQgLSBpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFsaW1pdFZhbHVlIHx8IGNvZGUgPj0gbGltaXRWYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IHAgPSB0YWJsZVtjb2RlIC0gbGltaXRWYWx1ZV07XG5cbiAgICAgICAgICBpZiAocFswXSA9PT0gaSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0Qml0cyhpKTtcblxuICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBwWzFdLCB0cnVlXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtmYWxzZSwgMCwgZmFsc2VdO1xuICAgIH0sXG5cbiAgICBfZ2V0VHdvRGltQ29kZSgpIHtcbiAgICAgIGxldCBjb2RlID0gMDtcbiAgICAgIGxldCBwO1xuXG4gICAgICBpZiAodGhpcy5lb2Jsb2NrKSB7XG4gICAgICAgIGNvZGUgPSB0aGlzLl9sb29rQml0cyg3KTtcbiAgICAgICAgcCA9IHR3b0RpbVRhYmxlW2NvZGVdO1xuXG4gICAgICAgIGlmIChwICYmIHBbMF0gPiAwKSB7XG4gICAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICAgIHJldHVybiBwWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDEsIDcsIHR3b0RpbVRhYmxlKTtcblxuICAgICAgICBpZiAocmVzdWx0WzBdICYmIHJlc3VsdFsyXSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRbMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmluZm8pKFwiQmFkIHR3byBkaW0gY29kZVwiKTtcbiAgICAgIHJldHVybiBjY2l0dEVPRjtcbiAgICB9LFxuXG4gICAgX2dldFdoaXRlQ29kZSgpIHtcbiAgICAgIGxldCBjb2RlID0gMDtcbiAgICAgIGxldCBwO1xuXG4gICAgICBpZiAodGhpcy5lb2Jsb2NrKSB7XG4gICAgICAgIGNvZGUgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZSA+PiA1ID09PSAwKSB7XG4gICAgICAgICAgcCA9IHdoaXRlVGFibGUxW2NvZGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHAgPSB3aGl0ZVRhYmxlMltjb2RlID4+IDNdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBbMF0gPiAwKSB7XG4gICAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICAgIHJldHVybiBwWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxLCA5LCB3aGl0ZVRhYmxlMik7XG5cbiAgICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRbMV07XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDExLCAxMiwgd2hpdGVUYWJsZTEpO1xuXG4gICAgICAgIGlmIChyZXN1bHRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShcImJhZCB3aGl0ZSBjb2RlXCIpO1xuXG4gICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuXG4gICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgX2dldEJsYWNrQ29kZSgpIHtcbiAgICAgIGxldCBjb2RlLCBwO1xuXG4gICAgICBpZiAodGhpcy5lb2Jsb2NrKSB7XG4gICAgICAgIGNvZGUgPSB0aGlzLl9sb29rQml0cygxMyk7XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZSA+PiA3ID09PSAwKSB7XG4gICAgICAgICAgcCA9IGJsYWNrVGFibGUxW2NvZGVdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPj4gOSA9PT0gMCAmJiBjb2RlID4+IDcgIT09IDApIHtcbiAgICAgICAgICBwID0gYmxhY2tUYWJsZTJbKGNvZGUgPj4gMSkgLSA2NF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcCA9IGJsYWNrVGFibGUzW2NvZGUgPj4gN107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocFswXSA+IDApIHtcbiAgICAgICAgICB0aGlzLl9lYXRCaXRzKHBbMF0pO1xuXG4gICAgICAgICAgcmV0dXJuIHBbMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDIsIDYsIGJsYWNrVGFibGUzKTtcblxuICAgICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoNywgMTIsIGJsYWNrVGFibGUyLCA2NCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRbMV07XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDEwLCAxMywgYmxhY2tUYWJsZTEpO1xuXG4gICAgICAgIGlmIChyZXN1bHRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShcImJhZCBibGFjayBjb2RlXCIpO1xuXG4gICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuXG4gICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgX2xvb2tCaXRzKG4pIHtcbiAgICAgIGxldCBjO1xuXG4gICAgICB3aGlsZSAodGhpcy5pbnB1dEJpdHMgPCBuKSB7XG4gICAgICAgIGlmICgoYyA9IHRoaXMuc291cmNlLm5leHQoKSkgPT09IC0xKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaW5wdXRCaXRzID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY2NpdHRFT0Y7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRCdWYgPDwgbiAtIHRoaXMuaW5wdXRCaXRzICYgMHhmZmZmID4+IDE2IC0gbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXRCdWYgPSB0aGlzLmlucHV0QnVmIDw8IDggfCBjO1xuICAgICAgICB0aGlzLmlucHV0Qml0cyArPSA4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEJ1ZiA+PiB0aGlzLmlucHV0Qml0cyAtIG4gJiAweGZmZmYgPj4gMTYgLSBuO1xuICAgIH0sXG5cbiAgICBfZWF0Qml0cyhuKSB7XG4gICAgICBpZiAoKHRoaXMuaW5wdXRCaXRzIC09IG4pIDwgMCkge1xuICAgICAgICB0aGlzLmlucHV0Qml0cyA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBDQ0lUVEZheERlY29kZXI7XG59KCk7XG5cbmV4cG9ydHMuQ0NJVFRGYXhEZWNvZGVyID0gQ0NJVFRGYXhEZWNvZGVyO1xuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkpiaWcyU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTIpO1xuXG52YXIgX2piaWcgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE2KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgSmJpZzJTdHJlYW0gPSBmdW5jdGlvbiBKYmlnMlN0cmVhbUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIEpiaWcyU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIGRpY3QsIHBhcmFtcykge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMubWF5YmVMZW5ndGggPSBtYXliZUxlbmd0aDtcbiAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuXG4gICAgX3N0cmVhbS5EZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gIH1cblxuICBKYmlnMlN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKF9zdHJlYW0uRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKYmlnMlN0cmVhbS5wcm90b3R5cGUsIFwiYnl0ZXNcIiwge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImJ5dGVzXCIsIHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKTtcbiAgICB9LFxuXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIEpiaWcyU3RyZWFtLnByb3RvdHlwZS5lbnN1cmVCdWZmZXIgPSBmdW5jdGlvbiAocmVxdWVzdGVkKSB7fTtcblxuICBKYmlnMlN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGpiaWcySW1hZ2UgPSBuZXcgX2piaWcuSmJpZzJJbWFnZSgpO1xuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHRoaXMucGFyYW1zKSkge1xuICAgICAgY29uc3QgZ2xvYmFsc1N0cmVhbSA9IHRoaXMucGFyYW1zLmdldChcIkpCSUcyR2xvYmFsc1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoZ2xvYmFsc1N0cmVhbSkpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFscyA9IGdsb2JhbHNTdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgY2h1bmtzLnB1c2goe1xuICAgICAgICAgIGRhdGE6IGdsb2JhbHMsXG4gICAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgICAgZW5kOiBnbG9iYWxzLmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaHVua3MucHVzaCh7XG4gICAgICBkYXRhOiB0aGlzLmJ5dGVzLFxuICAgICAgc3RhcnQ6IDAsXG4gICAgICBlbmQ6IHRoaXMuYnl0ZXMubGVuZ3RoXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGpiaWcySW1hZ2UucGFyc2VDaHVua3MoY2h1bmtzKTtcbiAgICBjb25zdCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7IGkrKykge1xuICAgICAgZGF0YVtpXSBePSAweGZmO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGRhdGFMZW5ndGg7XG4gICAgdGhpcy5lb2YgPSB0cnVlO1xuICB9O1xuXG4gIHJldHVybiBKYmlnMlN0cmVhbTtcbn0oKTtcblxuZXhwb3J0cy5KYmlnMlN0cmVhbSA9IEpiaWcyU3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkpiaWcySW1hZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfYXJpdGhtZXRpY19kZWNvZGVyID0gX193X3BkZmpzX3JlcXVpcmVfXygxNyk7XG5cbnZhciBfY2NpdHQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE0KTtcblxuY2xhc3MgSmJpZzJFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihgSkJJRzIgZXJyb3I6ICR7bXNnfWApO1xuICB9XG5cbn1cblxudmFyIEpiaWcySW1hZ2UgPSBmdW5jdGlvbiBKYmlnMkltYWdlQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQ29udGV4dENhY2hlKCkge31cblxuICBDb250ZXh0Q2FjaGUucHJvdG90eXBlID0ge1xuICAgIGdldENvbnRleHRzKGlkKSB7XG4gICAgICBpZiAoaWQgaW4gdGhpcykge1xuICAgICAgICByZXR1cm4gdGhpc1tpZF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzW2lkXSA9IG5ldyBJbnQ4QXJyYXkoMSA8PCAxNik7XG4gICAgfVxuXG4gIH07XG5cbiAgZnVuY3Rpb24gRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIERlY29kaW5nQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgZ2V0IGRlY29kZXIoKSB7XG4gICAgICB2YXIgZGVjb2RlciA9IG5ldyBfYXJpdGhtZXRpY19kZWNvZGVyLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSwgdGhpcy5zdGFydCwgdGhpcy5lbmQpO1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZGVjb2RlclwiLCBkZWNvZGVyKTtcbiAgICB9LFxuXG4gICAgZ2V0IGNvbnRleHRDYWNoZSgpIHtcbiAgICAgIHZhciBjYWNoZSA9IG5ldyBDb250ZXh0Q2FjaGUoKTtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImNvbnRleHRDYWNoZVwiLCBjYWNoZSk7XG4gICAgfVxuXG4gIH07XG5cbiAgZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIHByb2NlZHVyZSwgZGVjb2Rlcikge1xuICAgIHZhciBjb250ZXh0cyA9IGNvbnRleHRDYWNoZS5nZXRDb250ZXh0cyhwcm9jZWR1cmUpO1xuICAgIHZhciBwcmV2ID0gMTtcblxuICAgIGZ1bmN0aW9uIHJlYWRCaXRzKGxlbmd0aCkge1xuICAgICAgdmFyIHYgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBiaXQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIHByZXYpO1xuICAgICAgICBwcmV2ID0gcHJldiA8IDI1NiA/IHByZXYgPDwgMSB8IGJpdCA6IChwcmV2IDw8IDEgfCBiaXQpICYgNTExIHwgMjU2O1xuICAgICAgICB2ID0gdiA8PCAxIHwgYml0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdiA+Pj4gMDtcbiAgICB9XG5cbiAgICB2YXIgc2lnbiA9IHJlYWRCaXRzKDEpO1xuICAgIHZhciB2YWx1ZSA9IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMSkgPyByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMSkgPyByZWFkQml0cygzMikgKyA0NDM2IDogcmVhZEJpdHMoMTIpICsgMzQwIDogcmVhZEJpdHMoOCkgKyA4NCA6IHJlYWRCaXRzKDYpICsgMjAgOiByZWFkQml0cyg0KSArIDQgOiByZWFkQml0cygyKTtcblxuICAgIGlmIChzaWduID09PSAwKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgIHJldHVybiAtdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVJQUlEKGNvbnRleHRDYWNoZSwgZGVjb2RlciwgY29kZUxlbmd0aCkge1xuICAgIHZhciBjb250ZXh0cyA9IGNvbnRleHRDYWNoZS5nZXRDb250ZXh0cyhcIklBSURcIik7XG4gICAgdmFyIHByZXYgPSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlTGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBiaXQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIHByZXYpO1xuICAgICAgcHJldiA9IHByZXYgPDwgMSB8IGJpdDtcbiAgICB9XG5cbiAgICBpZiAoY29kZUxlbmd0aCA8IDMxKSB7XG4gICAgICByZXR1cm4gcHJldiAmICgxIDw8IGNvZGVMZW5ndGgpIC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJldiAmIDB4N2ZmZmZmZmY7XG4gIH1cblxuICB2YXIgU2VnbWVudFR5cGVzID0gW1wiU3ltYm9sRGljdGlvbmFyeVwiLCBudWxsLCBudWxsLCBudWxsLCBcIkludGVybWVkaWF0ZVRleHRSZWdpb25cIiwgbnVsbCwgXCJJbW1lZGlhdGVUZXh0UmVnaW9uXCIsIFwiSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uXCIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFwiUGF0dGVybkRpY3Rpb25hcnlcIiwgbnVsbCwgbnVsbCwgbnVsbCwgXCJJbnRlcm1lZGlhdGVIYWxmdG9uZVJlZ2lvblwiLCBudWxsLCBcIkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uXCIsIFwiSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvblwiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIkludGVybWVkaWF0ZUdlbmVyaWNSZWdpb25cIiwgbnVsbCwgXCJJbW1lZGlhdGVHZW5lcmljUmVnaW9uXCIsIFwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uXCIsIFwiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb25cIiwgbnVsbCwgXCJJbW1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvblwiLCBcIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZmluZW1lbnRSZWdpb25cIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXCJQYWdlSW5mb3JtYXRpb25cIiwgXCJFbmRPZlBhZ2VcIiwgXCJFbmRPZlN0cmlwZVwiLCBcIkVuZE9mRmlsZVwiLCBcIlByb2ZpbGVzXCIsIFwiVGFibGVzXCIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFwiRXh0ZW5zaW9uXCJdO1xuICB2YXIgQ29kaW5nVGVtcGxhdGVzID0gW1t7XG4gICAgeDogLTEsXG4gICAgeTogLTJcbiAgfSwge1xuICAgIHg6IDAsXG4gICAgeTogLTJcbiAgfSwge1xuICAgIHg6IDEsXG4gICAgeTogLTJcbiAgfSwge1xuICAgIHg6IC0yLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAtMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMCxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMixcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogLTQsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogLTMsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogLTIsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogLTEsXG4gICAgeTogMFxuICB9XSwgW3tcbiAgICB4OiAtMSxcbiAgICB5OiAtMlxuICB9LCB7XG4gICAgeDogMCxcbiAgICB5OiAtMlxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAtMlxuICB9LCB7XG4gICAgeDogMixcbiAgICB5OiAtMlxuICB9LCB7XG4gICAgeDogLTIsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IC0xLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAwLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAxLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAyLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAtMyxcbiAgICB5OiAwXG4gIH0sIHtcbiAgICB4OiAtMixcbiAgICB5OiAwXG4gIH0sIHtcbiAgICB4OiAtMSxcbiAgICB5OiAwXG4gIH1dLCBbe1xuICAgIHg6IC0xLFxuICAgIHk6IC0yXG4gIH0sIHtcbiAgICB4OiAwLFxuICAgIHk6IC0yXG4gIH0sIHtcbiAgICB4OiAxLFxuICAgIHk6IC0yXG4gIH0sIHtcbiAgICB4OiAtMixcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogLTEsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IDAsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IDEsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IC0yLFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IC0xLFxuICAgIHk6IDBcbiAgfV0sIFt7XG4gICAgeDogLTMsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IC0yLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAtMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMCxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogLTQsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogLTMsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogLTIsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogLTEsXG4gICAgeTogMFxuICB9XV07XG4gIHZhciBSZWZpbmVtZW50VGVtcGxhdGVzID0gW3tcbiAgICBjb2Rpbmc6IFt7XG4gICAgICB4OiAwLFxuICAgICAgeTogLTFcbiAgICB9LCB7XG4gICAgICB4OiAxLFxuICAgICAgeTogLTFcbiAgICB9LCB7XG4gICAgICB4OiAtMSxcbiAgICAgIHk6IDBcbiAgICB9XSxcbiAgICByZWZlcmVuY2U6IFt7XG4gICAgICB4OiAwLFxuICAgICAgeTogLTFcbiAgICB9LCB7XG4gICAgICB4OiAxLFxuICAgICAgeTogLTFcbiAgICB9LCB7XG4gICAgICB4OiAtMSxcbiAgICAgIHk6IDBcbiAgICB9LCB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sIHtcbiAgICAgIHg6IDEsXG4gICAgICB5OiAwXG4gICAgfSwge1xuICAgICAgeDogLTEsXG4gICAgICB5OiAxXG4gICAgfSwge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDFcbiAgICB9LCB7XG4gICAgICB4OiAxLFxuICAgICAgeTogMVxuICAgIH1dXG4gIH0sIHtcbiAgICBjb2Rpbmc6IFt7XG4gICAgICB4OiAtMSxcbiAgICAgIHk6IC0xXG4gICAgfSwge1xuICAgICAgeDogMCxcbiAgICAgIHk6IC0xXG4gICAgfSwge1xuICAgICAgeDogMSxcbiAgICAgIHk6IC0xXG4gICAgfSwge1xuICAgICAgeDogLTEsXG4gICAgICB5OiAwXG4gICAgfV0sXG4gICAgcmVmZXJlbmNlOiBbe1xuICAgICAgeDogMCxcbiAgICAgIHk6IC0xXG4gICAgfSwge1xuICAgICAgeDogLTEsXG4gICAgICB5OiAwXG4gICAgfSwge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9LCB7XG4gICAgICB4OiAxLFxuICAgICAgeTogMFxuICAgIH0sIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAxXG4gICAgfSwge1xuICAgICAgeDogMSxcbiAgICAgIHk6IDFcbiAgICB9XVxuICB9XTtcbiAgdmFyIFJldXNlZENvbnRleHRzID0gWzB4OWIyNSwgMHgwNzk1LCAweDAwZTUsIDB4MDE5NV07XG4gIHZhciBSZWZpbmVtZW50UmV1c2VkQ29udGV4dHMgPSBbMHgwMDIwLCAweDAwMDhdO1xuXG4gIGZ1bmN0aW9uIGRlY29kZUJpdG1hcFRlbXBsYXRlMCh3aWR0aCwgaGVpZ2h0LCBkZWNvZGluZ0NvbnRleHQpIHtcbiAgICB2YXIgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICAgIHZhciBjb250ZXh0cyA9IGRlY29kaW5nQ29udGV4dC5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoXCJHQlwiKTtcbiAgICB2YXIgY29udGV4dExhYmVsLFxuICAgICAgICBpLFxuICAgICAgICBqLFxuICAgICAgICBwaXhlbCxcbiAgICAgICAgcm93LFxuICAgICAgICByb3cxLFxuICAgICAgICByb3cyLFxuICAgICAgICBiaXRtYXAgPSBbXTtcbiAgICB2YXIgT0xEX1BJWEVMX01BU0sgPSAweDdiZjc7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICAgIHJvdyA9IGJpdG1hcFtpXSA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgIHJvdzEgPSBpIDwgMSA/IHJvdyA6IGJpdG1hcFtpIC0gMV07XG4gICAgICByb3cyID0gaSA8IDIgPyByb3cgOiBiaXRtYXBbaSAtIDJdO1xuICAgICAgY29udGV4dExhYmVsID0gcm93MlswXSA8PCAxMyB8IHJvdzJbMV0gPDwgMTIgfCByb3cyWzJdIDw8IDExIHwgcm93MVswXSA8PCA3IHwgcm93MVsxXSA8PCA2IHwgcm93MVsyXSA8PCA1IHwgcm93MVszXSA8PCA0O1xuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICByb3dbal0gPSBwaXhlbCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcbiAgICAgICAgY29udGV4dExhYmVsID0gKGNvbnRleHRMYWJlbCAmIE9MRF9QSVhFTF9NQVNLKSA8PCAxIHwgKGogKyAzIDwgd2lkdGggPyByb3cyW2ogKyAzXSA8PCAxMSA6IDApIHwgKGogKyA0IDwgd2lkdGggPyByb3cxW2ogKyA0XSA8PCA0IDogMCkgfCBwaXhlbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYml0bWFwO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlQml0bWFwKG1tciwgd2lkdGgsIGhlaWdodCwgdGVtcGxhdGVJbmRleCwgcHJlZGljdGlvbiwgc2tpcCwgYXQsIGRlY29kaW5nQ29udGV4dCkge1xuICAgIGlmIChtbXIpIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbmV3IFJlYWRlcihkZWNvZGluZ0NvbnRleHQuZGF0YSwgZGVjb2RpbmdDb250ZXh0LnN0YXJ0LCBkZWNvZGluZ0NvbnRleHQuZW5kKTtcbiAgICAgIHJldHVybiBkZWNvZGVNTVJCaXRtYXAoaW5wdXQsIHdpZHRoLCBoZWlnaHQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAodGVtcGxhdGVJbmRleCA9PT0gMCAmJiAhc2tpcCAmJiAhcHJlZGljdGlvbiAmJiBhdC5sZW5ndGggPT09IDQgJiYgYXRbMF0ueCA9PT0gMyAmJiBhdFswXS55ID09PSAtMSAmJiBhdFsxXS54ID09PSAtMyAmJiBhdFsxXS55ID09PSAtMSAmJiBhdFsyXS54ID09PSAyICYmIGF0WzJdLnkgPT09IC0yICYmIGF0WzNdLnggPT09IC0yICYmIGF0WzNdLnkgPT09IC0yKSB7XG4gICAgICByZXR1cm4gZGVjb2RlQml0bWFwVGVtcGxhdGUwKHdpZHRoLCBoZWlnaHQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgfVxuXG4gICAgdmFyIHVzZXNraXAgPSAhIXNraXA7XG4gICAgdmFyIHRlbXBsYXRlID0gQ29kaW5nVGVtcGxhdGVzW3RlbXBsYXRlSW5kZXhdLmNvbmNhdChhdCk7XG4gICAgdGVtcGxhdGUuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEueSAtIGIueSB8fCBhLnggLSBiLng7XG4gICAgfSk7XG4gICAgdmFyIHRlbXBsYXRlTGVuZ3RoID0gdGVtcGxhdGUubGVuZ3RoO1xuICAgIHZhciB0ZW1wbGF0ZVggPSBuZXcgSW50OEFycmF5KHRlbXBsYXRlTGVuZ3RoKTtcbiAgICB2YXIgdGVtcGxhdGVZID0gbmV3IEludDhBcnJheSh0ZW1wbGF0ZUxlbmd0aCk7XG4gICAgdmFyIGNoYW5naW5nVGVtcGxhdGVFbnRyaWVzID0gW107XG4gICAgdmFyIHJldXNlTWFzayA9IDAsXG4gICAgICAgIG1pblggPSAwLFxuICAgICAgICBtYXhYID0gMCxcbiAgICAgICAgbWluWSA9IDA7XG4gICAgdmFyIGMsIGs7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgdGVtcGxhdGVMZW5ndGg7IGsrKykge1xuICAgICAgdGVtcGxhdGVYW2tdID0gdGVtcGxhdGVba10ueDtcbiAgICAgIHRlbXBsYXRlWVtrXSA9IHRlbXBsYXRlW2tdLnk7XG4gICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgdGVtcGxhdGVba10ueCk7XG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgdGVtcGxhdGVba10ueCk7XG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgdGVtcGxhdGVba10ueSk7XG5cbiAgICAgIGlmIChrIDwgdGVtcGxhdGVMZW5ndGggLSAxICYmIHRlbXBsYXRlW2tdLnkgPT09IHRlbXBsYXRlW2sgKyAxXS55ICYmIHRlbXBsYXRlW2tdLnggPT09IHRlbXBsYXRlW2sgKyAxXS54IC0gMSkge1xuICAgICAgICByZXVzZU1hc2sgfD0gMSA8PCB0ZW1wbGF0ZUxlbmd0aCAtIDEgLSBrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXMucHVzaChrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhbmdpbmdFbnRyaWVzTGVuZ3RoID0gY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXMubGVuZ3RoO1xuICAgIHZhciBjaGFuZ2luZ1RlbXBsYXRlWCA9IG5ldyBJbnQ4QXJyYXkoY2hhbmdpbmdFbnRyaWVzTGVuZ3RoKTtcbiAgICB2YXIgY2hhbmdpbmdUZW1wbGF0ZVkgPSBuZXcgSW50OEFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG4gICAgdmFyIGNoYW5naW5nVGVtcGxhdGVCaXQgPSBuZXcgVWludDE2QXJyYXkoY2hhbmdpbmdFbnRyaWVzTGVuZ3RoKTtcblxuICAgIGZvciAoYyA9IDA7IGMgPCBjaGFuZ2luZ0VudHJpZXNMZW5ndGg7IGMrKykge1xuICAgICAgayA9IGNoYW5naW5nVGVtcGxhdGVFbnRyaWVzW2NdO1xuICAgICAgY2hhbmdpbmdUZW1wbGF0ZVhbY10gPSB0ZW1wbGF0ZVtrXS54O1xuICAgICAgY2hhbmdpbmdUZW1wbGF0ZVlbY10gPSB0ZW1wbGF0ZVtrXS55O1xuICAgICAgY2hhbmdpbmdUZW1wbGF0ZUJpdFtjXSA9IDEgPDwgdGVtcGxhdGVMZW5ndGggLSAxIC0gaztcbiAgICB9XG5cbiAgICB2YXIgc2JiX2xlZnQgPSAtbWluWDtcbiAgICB2YXIgc2JiX3RvcCA9IC1taW5ZO1xuICAgIHZhciBzYmJfcmlnaHQgPSB3aWR0aCAtIG1heFg7XG4gICAgdmFyIHBzZXVkb1BpeGVsQ29udGV4dCA9IFJldXNlZENvbnRleHRzW3RlbXBsYXRlSW5kZXhdO1xuICAgIHZhciByb3cgPSBuZXcgVWludDhBcnJheSh3aWR0aCk7XG4gICAgdmFyIGJpdG1hcCA9IFtdO1xuICAgIHZhciBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7XG4gICAgdmFyIGNvbnRleHRzID0gZGVjb2RpbmdDb250ZXh0LmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cyhcIkdCXCIpO1xuICAgIHZhciBsdHAgPSAwLFxuICAgICAgICBqLFxuICAgICAgICBpMCxcbiAgICAgICAgajAsXG4gICAgICAgIGNvbnRleHRMYWJlbCA9IDAsXG4gICAgICAgIGJpdCxcbiAgICAgICAgc2hpZnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICBpZiAocHJlZGljdGlvbikge1xuICAgICAgICB2YXIgc2x0cCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgcHNldWRvUGl4ZWxDb250ZXh0KTtcbiAgICAgICAgbHRwIF49IHNsdHA7XG5cbiAgICAgICAgaWYgKGx0cCkge1xuICAgICAgICAgIGJpdG1hcC5wdXNoKHJvdyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcm93ID0gbmV3IFVpbnQ4QXJyYXkocm93KTtcbiAgICAgIGJpdG1hcC5wdXNoKHJvdyk7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgIGlmICh1c2Vza2lwICYmIHNraXBbaV1bal0pIHtcbiAgICAgICAgICByb3dbal0gPSAwO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGogPj0gc2JiX2xlZnQgJiYgaiA8IHNiYl9yaWdodCAmJiBpID49IHNiYl90b3ApIHtcbiAgICAgICAgICBjb250ZXh0TGFiZWwgPSBjb250ZXh0TGFiZWwgPDwgMSAmIHJldXNlTWFzaztcblxuICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjaGFuZ2luZ0VudHJpZXNMZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgaTAgPSBpICsgY2hhbmdpbmdUZW1wbGF0ZVlba107XG4gICAgICAgICAgICBqMCA9IGogKyBjaGFuZ2luZ1RlbXBsYXRlWFtrXTtcbiAgICAgICAgICAgIGJpdCA9IGJpdG1hcFtpMF1bajBdO1xuXG4gICAgICAgICAgICBpZiAoYml0KSB7XG4gICAgICAgICAgICAgIGJpdCA9IGNoYW5naW5nVGVtcGxhdGVCaXRba107XG4gICAgICAgICAgICAgIGNvbnRleHRMYWJlbCB8PSBiaXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHRMYWJlbCA9IDA7XG4gICAgICAgICAgc2hpZnQgPSB0ZW1wbGF0ZUxlbmd0aCAtIDE7XG5cbiAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgdGVtcGxhdGVMZW5ndGg7IGsrKywgc2hpZnQtLSkge1xuICAgICAgICAgICAgajAgPSBqICsgdGVtcGxhdGVYW2tdO1xuXG4gICAgICAgICAgICBpZiAoajAgPj0gMCAmJiBqMCA8IHdpZHRoKSB7XG4gICAgICAgICAgICAgIGkwID0gaSArIHRlbXBsYXRlWVtrXTtcblxuICAgICAgICAgICAgICBpZiAoaTAgPj0gMCkge1xuICAgICAgICAgICAgICAgIGJpdCA9IGJpdG1hcFtpMF1bajBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICAgICAgY29udGV4dExhYmVsIHw9IGJpdCA8PCBzaGlmdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGl4ZWwgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICAgIHJvd1tqXSA9IHBpeGVsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiaXRtYXA7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVSZWZpbmVtZW50KHdpZHRoLCBoZWlnaHQsIHRlbXBsYXRlSW5kZXgsIHJlZmVyZW5jZUJpdG1hcCwgb2Zmc2V0WCwgb2Zmc2V0WSwgcHJlZGljdGlvbiwgYXQsIGRlY29kaW5nQ29udGV4dCkge1xuICAgIHZhciBjb2RpbmdUZW1wbGF0ZSA9IFJlZmluZW1lbnRUZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF0uY29kaW5nO1xuXG4gICAgaWYgKHRlbXBsYXRlSW5kZXggPT09IDApIHtcbiAgICAgIGNvZGluZ1RlbXBsYXRlID0gY29kaW5nVGVtcGxhdGUuY29uY2F0KFthdFswXV0pO1xuICAgIH1cblxuICAgIHZhciBjb2RpbmdUZW1wbGF0ZUxlbmd0aCA9IGNvZGluZ1RlbXBsYXRlLmxlbmd0aDtcbiAgICB2YXIgY29kaW5nVGVtcGxhdGVYID0gbmV3IEludDMyQXJyYXkoY29kaW5nVGVtcGxhdGVMZW5ndGgpO1xuICAgIHZhciBjb2RpbmdUZW1wbGF0ZVkgPSBuZXcgSW50MzJBcnJheShjb2RpbmdUZW1wbGF0ZUxlbmd0aCk7XG4gICAgdmFyIGs7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgY29kaW5nVGVtcGxhdGVMZW5ndGg7IGsrKykge1xuICAgICAgY29kaW5nVGVtcGxhdGVYW2tdID0gY29kaW5nVGVtcGxhdGVba10ueDtcbiAgICAgIGNvZGluZ1RlbXBsYXRlWVtrXSA9IGNvZGluZ1RlbXBsYXRlW2tdLnk7XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVRlbXBsYXRlID0gUmVmaW5lbWVudFRlbXBsYXRlc1t0ZW1wbGF0ZUluZGV4XS5yZWZlcmVuY2U7XG5cbiAgICBpZiAodGVtcGxhdGVJbmRleCA9PT0gMCkge1xuICAgICAgcmVmZXJlbmNlVGVtcGxhdGUgPSByZWZlcmVuY2VUZW1wbGF0ZS5jb25jYXQoW2F0WzFdXSk7XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoID0gcmVmZXJlbmNlVGVtcGxhdGUubGVuZ3RoO1xuICAgIHZhciByZWZlcmVuY2VUZW1wbGF0ZVggPSBuZXcgSW50MzJBcnJheShyZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aCk7XG4gICAgdmFyIHJlZmVyZW5jZVRlbXBsYXRlWSA9IG5ldyBJbnQzMkFycmF5KHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoKTtcblxuICAgIGZvciAoayA9IDA7IGsgPCByZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICByZWZlcmVuY2VUZW1wbGF0ZVhba10gPSByZWZlcmVuY2VUZW1wbGF0ZVtrXS54O1xuICAgICAgcmVmZXJlbmNlVGVtcGxhdGVZW2tdID0gcmVmZXJlbmNlVGVtcGxhdGVba10ueTtcbiAgICB9XG5cbiAgICB2YXIgcmVmZXJlbmNlV2lkdGggPSByZWZlcmVuY2VCaXRtYXBbMF0ubGVuZ3RoO1xuICAgIHZhciByZWZlcmVuY2VIZWlnaHQgPSByZWZlcmVuY2VCaXRtYXAubGVuZ3RoO1xuICAgIHZhciBwc2V1ZG9QaXhlbENvbnRleHQgPSBSZWZpbmVtZW50UmV1c2VkQ29udGV4dHNbdGVtcGxhdGVJbmRleF07XG4gICAgdmFyIGJpdG1hcCA9IFtdO1xuICAgIHZhciBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7XG4gICAgdmFyIGNvbnRleHRzID0gZGVjb2RpbmdDb250ZXh0LmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cyhcIkdSXCIpO1xuICAgIHZhciBsdHAgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgaWYgKHByZWRpY3Rpb24pIHtcbiAgICAgICAgdmFyIHNsdHAgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIHBzZXVkb1BpeGVsQ29udGV4dCk7XG4gICAgICAgIGx0cCBePSBzbHRwO1xuXG4gICAgICAgIGlmIChsdHApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInByZWRpY3Rpb24gaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgICAgYml0bWFwLnB1c2gocm93KTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgIHZhciBpMCwgajA7XG4gICAgICAgIHZhciBjb250ZXh0TGFiZWwgPSAwO1xuXG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBjb2RpbmdUZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgaTAgPSBpICsgY29kaW5nVGVtcGxhdGVZW2tdO1xuICAgICAgICAgIGowID0gaiArIGNvZGluZ1RlbXBsYXRlWFtrXTtcblxuICAgICAgICAgIGlmIChpMCA8IDAgfHwgajAgPCAwIHx8IGowID49IHdpZHRoKSB7XG4gICAgICAgICAgICBjb250ZXh0TGFiZWwgPDw9IDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IGNvbnRleHRMYWJlbCA8PCAxIHwgYml0bWFwW2kwXVtqMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChrID0gMDsgayA8IHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICBpMCA9IGkgKyByZWZlcmVuY2VUZW1wbGF0ZVlba10gLSBvZmZzZXRZO1xuICAgICAgICAgIGowID0gaiArIHJlZmVyZW5jZVRlbXBsYXRlWFtrXSAtIG9mZnNldFg7XG5cbiAgICAgICAgICBpZiAoaTAgPCAwIHx8IGkwID49IHJlZmVyZW5jZUhlaWdodCB8fCBqMCA8IDAgfHwgajAgPj0gcmVmZXJlbmNlV2lkdGgpIHtcbiAgICAgICAgICAgIGNvbnRleHRMYWJlbCA8PD0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dExhYmVsID0gY29udGV4dExhYmVsIDw8IDEgfCByZWZlcmVuY2VCaXRtYXBbaTBdW2owXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGl4ZWwgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICAgIHJvd1tqXSA9IHBpeGVsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiaXRtYXA7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVTeW1ib2xEaWN0aW9uYXJ5KGh1ZmZtYW4sIHJlZmluZW1lbnQsIHN5bWJvbHMsIG51bWJlck9mTmV3U3ltYm9scywgbnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMsIGh1ZmZtYW5UYWJsZXMsIHRlbXBsYXRlSW5kZXgsIGF0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgcmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQsIGh1ZmZtYW5JbnB1dCkge1xuICAgIGlmIChodWZmbWFuICYmIHJlZmluZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwic3ltYm9sIHJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuXG4gICAgdmFyIG5ld1N5bWJvbHMgPSBbXTtcbiAgICB2YXIgY3VycmVudEhlaWdodCA9IDA7XG4gICAgdmFyIHN5bWJvbENvZGVMZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMubG9nMikoc3ltYm9scy5sZW5ndGggKyBudW1iZXJPZk5ld1N5bWJvbHMpO1xuICAgIHZhciBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7XG4gICAgdmFyIGNvbnRleHRDYWNoZSA9IGRlY29kaW5nQ29udGV4dC5jb250ZXh0Q2FjaGU7XG4gICAgbGV0IHRhYmxlQjEsIHN5bWJvbFdpZHRocztcblxuICAgIGlmIChodWZmbWFuKSB7XG4gICAgICB0YWJsZUIxID0gZ2V0U3RhbmRhcmRUYWJsZSgxKTtcbiAgICAgIHN5bWJvbFdpZHRocyA9IFtdO1xuICAgICAgc3ltYm9sQ29kZUxlbmd0aCA9IE1hdGgubWF4KHN5bWJvbENvZGVMZW5ndGgsIDEpO1xuICAgIH1cblxuICAgIHdoaWxlIChuZXdTeW1ib2xzLmxlbmd0aCA8IG51bWJlck9mTmV3U3ltYm9scykge1xuICAgICAgdmFyIGRlbHRhSGVpZ2h0ID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YUhlaWdodC5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBREhcIiwgZGVjb2Rlcik7XG4gICAgICBjdXJyZW50SGVpZ2h0ICs9IGRlbHRhSGVpZ2h0O1xuICAgICAgbGV0IGN1cnJlbnRXaWR0aCA9IDAsXG4gICAgICAgICAgdG90YWxXaWR0aCA9IDA7XG4gICAgICBjb25zdCBmaXJzdFN5bWJvbCA9IGh1ZmZtYW4gPyBzeW1ib2xXaWR0aHMubGVuZ3RoIDogMDtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbHRhV2lkdGggPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhV2lkdGguZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQURXXCIsIGRlY29kZXIpO1xuXG4gICAgICAgIGlmIChkZWx0YVdpZHRoID09PSBudWxsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50V2lkdGggKz0gZGVsdGFXaWR0aDtcbiAgICAgICAgdG90YWxXaWR0aCArPSBjdXJyZW50V2lkdGg7XG4gICAgICAgIHZhciBiaXRtYXA7XG5cbiAgICAgICAgaWYgKHJlZmluZW1lbnQpIHtcbiAgICAgICAgICB2YXIgbnVtYmVyT2ZJbnN0YW5jZXMgPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQUFJXCIsIGRlY29kZXIpO1xuXG4gICAgICAgICAgaWYgKG51bWJlck9mSW5zdGFuY2VzID4gMSkge1xuICAgICAgICAgICAgYml0bWFwID0gZGVjb2RlVGV4dFJlZ2lvbihodWZmbWFuLCByZWZpbmVtZW50LCBjdXJyZW50V2lkdGgsIGN1cnJlbnRIZWlnaHQsIDAsIG51bWJlck9mSW5zdGFuY2VzLCAxLCBzeW1ib2xzLmNvbmNhdChuZXdTeW1ib2xzKSwgc3ltYm9sQ29kZUxlbmd0aCwgMCwgMCwgMSwgMCwgaHVmZm1hblRhYmxlcywgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCAwLCBodWZmbWFuSW5wdXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc3ltYm9sSWQgPSBkZWNvZGVJQUlEKGNvbnRleHRDYWNoZSwgZGVjb2Rlciwgc3ltYm9sQ29kZUxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgcmR4ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFSRFhcIiwgZGVjb2Rlcik7XG4gICAgICAgICAgICB2YXIgcmR5ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFSRFlcIiwgZGVjb2Rlcik7XG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gc3ltYm9sSWQgPCBzeW1ib2xzLmxlbmd0aCA/IHN5bWJvbHNbc3ltYm9sSWRdIDogbmV3U3ltYm9sc1tzeW1ib2xJZCAtIHN5bWJvbHMubGVuZ3RoXTtcbiAgICAgICAgICAgIGJpdG1hcCA9IGRlY29kZVJlZmluZW1lbnQoY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgc3ltYm9sLCByZHgsIHJkeSwgZmFsc2UsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdTeW1ib2xzLnB1c2goYml0bWFwKTtcbiAgICAgICAgfSBlbHNlIGlmIChodWZmbWFuKSB7XG4gICAgICAgICAgc3ltYm9sV2lkdGhzLnB1c2goY3VycmVudFdpZHRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiaXRtYXAgPSBkZWNvZGVCaXRtYXAoZmFsc2UsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCwgdGVtcGxhdGVJbmRleCwgZmFsc2UsIG51bGwsIGF0LCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgICAgIG5ld1N5bWJvbHMucHVzaChiaXRtYXApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChodWZmbWFuICYmICFyZWZpbmVtZW50KSB7XG4gICAgICAgIGNvbnN0IGJpdG1hcFNpemUgPSBodWZmbWFuVGFibGVzLnRhYmxlQml0bWFwU2l6ZS5kZWNvZGUoaHVmZm1hbklucHV0KTtcbiAgICAgICAgaHVmZm1hbklucHV0LmJ5dGVBbGlnbigpO1xuICAgICAgICBsZXQgY29sbGVjdGl2ZUJpdG1hcDtcblxuICAgICAgICBpZiAoYml0bWFwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgIGNvbGxlY3RpdmVCaXRtYXAgPSByZWFkVW5jb21wcmVzc2VkQml0bWFwKGh1ZmZtYW5JbnB1dCwgdG90YWxXaWR0aCwgY3VycmVudEhlaWdodCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxFbmQgPSBodWZmbWFuSW5wdXQuZW5kO1xuICAgICAgICAgIGNvbnN0IGJpdG1hcEVuZCA9IGh1ZmZtYW5JbnB1dC5wb3NpdGlvbiArIGJpdG1hcFNpemU7XG4gICAgICAgICAgaHVmZm1hbklucHV0LmVuZCA9IGJpdG1hcEVuZDtcbiAgICAgICAgICBjb2xsZWN0aXZlQml0bWFwID0gZGVjb2RlTU1SQml0bWFwKGh1ZmZtYW5JbnB1dCwgdG90YWxXaWR0aCwgY3VycmVudEhlaWdodCwgZmFsc2UpO1xuICAgICAgICAgIGh1ZmZtYW5JbnB1dC5lbmQgPSBvcmlnaW5hbEVuZDtcbiAgICAgICAgICBodWZmbWFuSW5wdXQucG9zaXRpb24gPSBiaXRtYXBFbmQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1iZXJPZlN5bWJvbHNEZWNvZGVkID0gc3ltYm9sV2lkdGhzLmxlbmd0aDtcblxuICAgICAgICBpZiAoZmlyc3RTeW1ib2wgPT09IG51bWJlck9mU3ltYm9sc0RlY29kZWQgLSAxKSB7XG4gICAgICAgICAgbmV3U3ltYm9scy5wdXNoKGNvbGxlY3RpdmVCaXRtYXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBpLFxuICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICB4TWluID0gMCxcbiAgICAgICAgICAgICAgeE1heCxcbiAgICAgICAgICAgICAgYml0bWFwV2lkdGgsXG4gICAgICAgICAgICAgIHN5bWJvbEJpdG1hcDtcblxuICAgICAgICAgIGZvciAoaSA9IGZpcnN0U3ltYm9sOyBpIDwgbnVtYmVyT2ZTeW1ib2xzRGVjb2RlZDsgaSsrKSB7XG4gICAgICAgICAgICBiaXRtYXBXaWR0aCA9IHN5bWJvbFdpZHRoc1tpXTtcbiAgICAgICAgICAgIHhNYXggPSB4TWluICsgYml0bWFwV2lkdGg7XG4gICAgICAgICAgICBzeW1ib2xCaXRtYXAgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IGN1cnJlbnRIZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgICBzeW1ib2xCaXRtYXAucHVzaChjb2xsZWN0aXZlQml0bWFwW3ldLnN1YmFycmF5KHhNaW4sIHhNYXgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV3U3ltYm9scy5wdXNoKHN5bWJvbEJpdG1hcCk7XG4gICAgICAgICAgICB4TWluID0geE1heDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXhwb3J0ZWRTeW1ib2xzID0gW107XG4gICAgdmFyIGZsYWdzID0gW10sXG4gICAgICAgIGN1cnJlbnRGbGFnID0gZmFsc2U7XG4gICAgdmFyIHRvdGFsU3ltYm9sc0xlbmd0aCA9IHN5bWJvbHMubGVuZ3RoICsgbnVtYmVyT2ZOZXdTeW1ib2xzO1xuXG4gICAgd2hpbGUgKGZsYWdzLmxlbmd0aCA8IHRvdGFsU3ltYm9sc0xlbmd0aCkge1xuICAgICAgdmFyIHJ1bkxlbmd0aCA9IGh1ZmZtYW4gPyB0YWJsZUIxLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFFWFwiLCBkZWNvZGVyKTtcblxuICAgICAgd2hpbGUgKHJ1bkxlbmd0aC0tKSB7XG4gICAgICAgIGZsYWdzLnB1c2goY3VycmVudEZsYWcpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50RmxhZyA9ICFjdXJyZW50RmxhZztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzeW1ib2xzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGlmIChmbGFnc1tpXSkge1xuICAgICAgICBleHBvcnRlZFN5bWJvbHMucHVzaChzeW1ib2xzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWJlck9mTmV3U3ltYm9sczsgaSsrLCBqKyspIHtcbiAgICAgIGlmIChmbGFnc1tpXSkge1xuICAgICAgICBleHBvcnRlZFN5bWJvbHMucHVzaChuZXdTeW1ib2xzW2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwb3J0ZWRTeW1ib2xzO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlVGV4dFJlZ2lvbihodWZmbWFuLCByZWZpbmVtZW50LCB3aWR0aCwgaGVpZ2h0LCBkZWZhdWx0UGl4ZWxWYWx1ZSwgbnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsIHN0cmlwU2l6ZSwgaW5wdXRTeW1ib2xzLCBzeW1ib2xDb2RlTGVuZ3RoLCB0cmFuc3Bvc2VkLCBkc09mZnNldCwgcmVmZXJlbmNlQ29ybmVyLCBjb21iaW5hdGlvbk9wZXJhdG9yLCBodWZmbWFuVGFibGVzLCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgcmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQsIGxvZ1N0cmlwU2l6ZSwgaHVmZm1hbklucHV0KSB7XG4gICAgaWYgKGh1ZmZtYW4gJiYgcmVmaW5lbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cblxuICAgIHZhciBiaXRtYXAgPSBbXTtcbiAgICB2YXIgaSwgcm93O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICByb3cgPSBuZXcgVWludDhBcnJheSh3aWR0aCk7XG5cbiAgICAgIGlmIChkZWZhdWx0UGl4ZWxWYWx1ZSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICByb3dbal0gPSBkZWZhdWx0UGl4ZWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBiaXRtYXAucHVzaChyb3cpO1xuICAgIH1cblxuICAgIHZhciBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7XG4gICAgdmFyIGNvbnRleHRDYWNoZSA9IGRlY29kaW5nQ29udGV4dC5jb250ZXh0Q2FjaGU7XG4gICAgdmFyIHN0cmlwVCA9IGh1ZmZtYW4gPyAtaHVmZm1hblRhYmxlcy50YWJsZURlbHRhVC5kZWNvZGUoaHVmZm1hbklucHV0KSA6IC1kZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQURUXCIsIGRlY29kZXIpO1xuICAgIHZhciBmaXJzdFMgPSAwO1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBudW1iZXJPZlN5bWJvbEluc3RhbmNlcykge1xuICAgICAgdmFyIGRlbHRhVCA9IGh1ZmZtYW4gPyBodWZmbWFuVGFibGVzLnRhYmxlRGVsdGFULmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFEVFwiLCBkZWNvZGVyKTtcbiAgICAgIHN0cmlwVCArPSBkZWx0YVQ7XG4gICAgICB2YXIgZGVsdGFGaXJzdFMgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZUZpcnN0Uy5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRlNcIiwgZGVjb2Rlcik7XG4gICAgICBmaXJzdFMgKz0gZGVsdGFGaXJzdFM7XG4gICAgICB2YXIgY3VycmVudFMgPSBmaXJzdFM7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgbGV0IGN1cnJlbnRUID0gMDtcblxuICAgICAgICBpZiAoc3RyaXBTaXplID4gMSkge1xuICAgICAgICAgIGN1cnJlbnRUID0gaHVmZm1hbiA/IGh1ZmZtYW5JbnB1dC5yZWFkQml0cyhsb2dTdHJpcFNpemUpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFJVFwiLCBkZWNvZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gc3RyaXBTaXplICogc3RyaXBUICsgY3VycmVudFQ7XG4gICAgICAgIHZhciBzeW1ib2xJZCA9IGh1ZmZtYW4gPyBodWZmbWFuVGFibGVzLnN5bWJvbElEVGFibGUuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJQUlEKGNvbnRleHRDYWNoZSwgZGVjb2Rlciwgc3ltYm9sQ29kZUxlbmd0aCk7XG4gICAgICAgIHZhciBhcHBseVJlZmluZW1lbnQgPSByZWZpbmVtZW50ICYmIChodWZmbWFuID8gaHVmZm1hbklucHV0LnJlYWRCaXQoKSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBUklcIiwgZGVjb2RlcikpO1xuICAgICAgICB2YXIgc3ltYm9sQml0bWFwID0gaW5wdXRTeW1ib2xzW3N5bWJvbElkXTtcbiAgICAgICAgdmFyIHN5bWJvbFdpZHRoID0gc3ltYm9sQml0bWFwWzBdLmxlbmd0aDtcbiAgICAgICAgdmFyIHN5bWJvbEhlaWdodCA9IHN5bWJvbEJpdG1hcC5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGFwcGx5UmVmaW5lbWVudCkge1xuICAgICAgICAgIHZhciByZHcgPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJEV1wiLCBkZWNvZGVyKTtcbiAgICAgICAgICB2YXIgcmRoID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFSREhcIiwgZGVjb2Rlcik7XG4gICAgICAgICAgdmFyIHJkeCA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBUkRYXCIsIGRlY29kZXIpO1xuICAgICAgICAgIHZhciByZHkgPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJEWVwiLCBkZWNvZGVyKTtcbiAgICAgICAgICBzeW1ib2xXaWR0aCArPSByZHc7XG4gICAgICAgICAgc3ltYm9sSGVpZ2h0ICs9IHJkaDtcbiAgICAgICAgICBzeW1ib2xCaXRtYXAgPSBkZWNvZGVSZWZpbmVtZW50KHN5bWJvbFdpZHRoLCBzeW1ib2xIZWlnaHQsIHJlZmluZW1lbnRUZW1wbGF0ZUluZGV4LCBzeW1ib2xCaXRtYXAsIChyZHcgPj4gMSkgKyByZHgsIChyZGggPj4gMSkgKyByZHksIGZhbHNlLCByZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2Zmc2V0VCA9IHQgLSAocmVmZXJlbmNlQ29ybmVyICYgMSA/IDAgOiBzeW1ib2xIZWlnaHQgLSAxKTtcbiAgICAgICAgdmFyIG9mZnNldFMgPSBjdXJyZW50UyAtIChyZWZlcmVuY2VDb3JuZXIgJiAyID8gc3ltYm9sV2lkdGggLSAxIDogMCk7XG4gICAgICAgIHZhciBzMiwgdDIsIHN5bWJvbFJvdztcblxuICAgICAgICBpZiAodHJhbnNwb3NlZCkge1xuICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbEhlaWdodDsgczIrKykge1xuICAgICAgICAgICAgcm93ID0gYml0bWFwW29mZnNldFMgKyBzMl07XG5cbiAgICAgICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzeW1ib2xSb3cgPSBzeW1ib2xCaXRtYXBbczJdO1xuICAgICAgICAgICAgdmFyIG1heFdpZHRoID0gTWF0aC5taW4od2lkdGggLSBvZmZzZXRULCBzeW1ib2xXaWR0aCk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoY29tYmluYXRpb25PcGVyYXRvcikge1xuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgZm9yICh0MiA9IDA7IHQyIDwgbWF4V2lkdGg7IHQyKyspIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tvZmZzZXRUICsgdDJdIHw9IHN5bWJvbFJvd1t0Ml07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGZvciAodDIgPSAwOyB0MiA8IG1heFdpZHRoOyB0MisrKSB7XG4gICAgICAgICAgICAgICAgICByb3dbb2Zmc2V0VCArIHQyXSBePSBzeW1ib2xSb3dbdDJdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7Y29tYmluYXRpb25PcGVyYXRvcn0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRTICs9IHN5bWJvbEhlaWdodCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh0MiA9IDA7IHQyIDwgc3ltYm9sSGVpZ2h0OyB0MisrKSB7XG4gICAgICAgICAgICByb3cgPSBiaXRtYXBbb2Zmc2V0VCArIHQyXTtcblxuICAgICAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN5bWJvbFJvdyA9IHN5bWJvbEJpdG1hcFt0Ml07XG5cbiAgICAgICAgICAgIHN3aXRjaCAoY29tYmluYXRpb25PcGVyYXRvcikge1xuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgZm9yIChzMiA9IDA7IHMyIDwgc3ltYm9sV2lkdGg7IHMyKyspIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tvZmZzZXRTICsgczJdIHw9IHN5bWJvbFJvd1tzMl07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbFdpZHRoOyBzMisrKSB7XG4gICAgICAgICAgICAgICAgICByb3dbb2Zmc2V0UyArIHMyXSBePSBzeW1ib2xSb3dbczJdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7Y29tYmluYXRpb25PcGVyYXRvcn0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRTICs9IHN5bWJvbFdpZHRoIC0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkrKztcbiAgICAgICAgdmFyIGRlbHRhUyA9IGh1ZmZtYW4gPyBodWZmbWFuVGFibGVzLnRhYmxlRGVsdGFTLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFEU1wiLCBkZWNvZGVyKTtcblxuICAgICAgICBpZiAoZGVsdGFTID09PSBudWxsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UyArPSBkZWx0YVMgKyBkc09mZnNldDtcbiAgICAgIH0gd2hpbGUgKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiBiaXRtYXA7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVQYXR0ZXJuRGljdGlvbmFyeShtbXIsIHBhdHRlcm5XaWR0aCwgcGF0dGVybkhlaWdodCwgbWF4UGF0dGVybkluZGV4LCB0ZW1wbGF0ZSwgZGVjb2RpbmdDb250ZXh0KSB7XG4gICAgY29uc3QgYXQgPSBbXTtcblxuICAgIGlmICghbW1yKSB7XG4gICAgICBhdC5wdXNoKHtcbiAgICAgICAgeDogLXBhdHRlcm5XaWR0aCxcbiAgICAgICAgeTogMFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0ZW1wbGF0ZSA9PT0gMCkge1xuICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICB4OiAtMyxcbiAgICAgICAgICB5OiAtMVxuICAgICAgICB9KTtcbiAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgeDogMixcbiAgICAgICAgICB5OiAtMlxuICAgICAgICB9KTtcbiAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgeDogLTIsXG4gICAgICAgICAgeTogLTJcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29sbGVjdGl2ZVdpZHRoID0gKG1heFBhdHRlcm5JbmRleCArIDEpICogcGF0dGVybldpZHRoO1xuICAgIGNvbnN0IGNvbGxlY3RpdmVCaXRtYXAgPSBkZWNvZGVCaXRtYXAobW1yLCBjb2xsZWN0aXZlV2lkdGgsIHBhdHRlcm5IZWlnaHQsIHRlbXBsYXRlLCBmYWxzZSwgbnVsbCwgYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgY29uc3QgcGF0dGVybnMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IG1heFBhdHRlcm5JbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBwYXR0ZXJuQml0bWFwID0gW107XG4gICAgICBjb25zdCB4TWluID0gcGF0dGVybldpZHRoICogaTtcbiAgICAgIGNvbnN0IHhNYXggPSB4TWluICsgcGF0dGVybldpZHRoO1xuXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHBhdHRlcm5IZWlnaHQ7IHkrKykge1xuICAgICAgICBwYXR0ZXJuQml0bWFwLnB1c2goY29sbGVjdGl2ZUJpdG1hcFt5XS5zdWJhcnJheSh4TWluLCB4TWF4KSk7XG4gICAgICB9XG5cbiAgICAgIHBhdHRlcm5zLnB1c2gocGF0dGVybkJpdG1hcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdHRlcm5zO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlSGFsZnRvbmVSZWdpb24obW1yLCBwYXR0ZXJucywgdGVtcGxhdGUsIHJlZ2lvbldpZHRoLCByZWdpb25IZWlnaHQsIGRlZmF1bHRQaXhlbFZhbHVlLCBlbmFibGVTa2lwLCBjb21iaW5hdGlvbk9wZXJhdG9yLCBncmlkV2lkdGgsIGdyaWRIZWlnaHQsIGdyaWRPZmZzZXRYLCBncmlkT2Zmc2V0WSwgZ3JpZFZlY3RvclgsIGdyaWRWZWN0b3JZLCBkZWNvZGluZ0NvbnRleHQpIHtcbiAgICBjb25zdCBza2lwID0gbnVsbDtcblxuICAgIGlmIChlbmFibGVTa2lwKSB7XG4gICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInNraXAgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoY29tYmluYXRpb25PcGVyYXRvciAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJvcGVyYXRvciBcIiArIGNvbWJpbmF0aW9uT3BlcmF0b3IgKyBcIiBpcyBub3Qgc3VwcG9ydGVkIGluIGhhbGZ0b25lIHJlZ2lvblwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdpb25CaXRtYXAgPSBbXTtcbiAgICBsZXQgaSwgaiwgcm93O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJlZ2lvbkhlaWdodDsgaSsrKSB7XG4gICAgICByb3cgPSBuZXcgVWludDhBcnJheShyZWdpb25XaWR0aCk7XG5cbiAgICAgIGlmIChkZWZhdWx0UGl4ZWxWYWx1ZSkge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVnaW9uV2lkdGg7IGorKykge1xuICAgICAgICAgIHJvd1tqXSA9IGRlZmF1bHRQaXhlbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlZ2lvbkJpdG1hcC5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgY29uc3QgbnVtYmVyT2ZQYXR0ZXJucyA9IHBhdHRlcm5zLmxlbmd0aDtcbiAgICBjb25zdCBwYXR0ZXJuMCA9IHBhdHRlcm5zWzBdO1xuICAgIGNvbnN0IHBhdHRlcm5XaWR0aCA9IHBhdHRlcm4wWzBdLmxlbmd0aCxcbiAgICAgICAgICBwYXR0ZXJuSGVpZ2h0ID0gcGF0dGVybjAubGVuZ3RoO1xuICAgIGNvbnN0IGJpdHNQZXJWYWx1ZSA9ICgwLCBfY29yZV91dGlscy5sb2cyKShudW1iZXJPZlBhdHRlcm5zKTtcbiAgICBjb25zdCBhdCA9IFtdO1xuXG4gICAgaWYgKCFtbXIpIHtcbiAgICAgIGF0LnB1c2goe1xuICAgICAgICB4OiB0ZW1wbGF0ZSA8PSAxID8gMyA6IDIsXG4gICAgICAgIHk6IC0xXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRlbXBsYXRlID09PSAwKSB7XG4gICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgIHg6IC0zLFxuICAgICAgICAgIHk6IC0xXG4gICAgICAgIH0pO1xuICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICB4OiAyLFxuICAgICAgICAgIHk6IC0yXG4gICAgICAgIH0pO1xuICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICB4OiAtMixcbiAgICAgICAgICB5OiAtMlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBncmF5U2NhbGVCaXRQbGFuZXMgPSBbXTtcbiAgICBsZXQgbW1ySW5wdXQsIGJpdG1hcDtcblxuICAgIGlmIChtbXIpIHtcbiAgICAgIG1tcklucHV0ID0gbmV3IFJlYWRlcihkZWNvZGluZ0NvbnRleHQuZGF0YSwgZGVjb2RpbmdDb250ZXh0LnN0YXJ0LCBkZWNvZGluZ0NvbnRleHQuZW5kKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBiaXRzUGVyVmFsdWUgLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKG1tcikge1xuICAgICAgICBiaXRtYXAgPSBkZWNvZGVNTVJCaXRtYXAobW1ySW5wdXQsIGdyaWRXaWR0aCwgZ3JpZEhlaWdodCwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaXRtYXAgPSBkZWNvZGVCaXRtYXAoZmFsc2UsIGdyaWRXaWR0aCwgZ3JpZEhlaWdodCwgdGVtcGxhdGUsIGZhbHNlLCBza2lwLCBhdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgZ3JheVNjYWxlQml0UGxhbmVzW2ldID0gYml0bWFwO1xuICAgIH1cblxuICAgIGxldCBtZywgbmcsIGJpdCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuQml0bWFwLCB4LCB5LCBwYXR0ZXJuUm93LCByZWdpb25Sb3c7XG5cbiAgICBmb3IgKG1nID0gMDsgbWcgPCBncmlkSGVpZ2h0OyBtZysrKSB7XG4gICAgICBmb3IgKG5nID0gMDsgbmcgPCBncmlkV2lkdGg7IG5nKyspIHtcbiAgICAgICAgYml0ID0gMDtcbiAgICAgICAgcGF0dGVybkluZGV4ID0gMDtcblxuICAgICAgICBmb3IgKGogPSBiaXRzUGVyVmFsdWUgLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICAgIGJpdCA9IGdyYXlTY2FsZUJpdFBsYW5lc1tqXVttZ11bbmddIF4gYml0O1xuICAgICAgICAgIHBhdHRlcm5JbmRleCB8PSBiaXQgPDwgajtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhdHRlcm5CaXRtYXAgPSBwYXR0ZXJuc1twYXR0ZXJuSW5kZXhdO1xuICAgICAgICB4ID0gZ3JpZE9mZnNldFggKyBtZyAqIGdyaWRWZWN0b3JZICsgbmcgKiBncmlkVmVjdG9yWCA+PiA4O1xuICAgICAgICB5ID0gZ3JpZE9mZnNldFkgKyBtZyAqIGdyaWRWZWN0b3JYIC0gbmcgKiBncmlkVmVjdG9yWSA+PiA4O1xuXG4gICAgICAgIGlmICh4ID49IDAgJiYgeCArIHBhdHRlcm5XaWR0aCA8PSByZWdpb25XaWR0aCAmJiB5ID49IDAgJiYgeSArIHBhdHRlcm5IZWlnaHQgPD0gcmVnaW9uSGVpZ2h0KSB7XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhdHRlcm5IZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgcmVnaW9uUm93ID0gcmVnaW9uQml0bWFwW3kgKyBpXTtcbiAgICAgICAgICAgIHBhdHRlcm5Sb3cgPSBwYXR0ZXJuQml0bWFwW2ldO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcGF0dGVybldpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgcmVnaW9uUm93W3ggKyBqXSB8PSBwYXR0ZXJuUm93W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgcmVnaW9uWCwgcmVnaW9uWTtcblxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuSGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgIHJlZ2lvblkgPSB5ICsgaTtcblxuICAgICAgICAgICAgaWYgKHJlZ2lvblkgPCAwIHx8IHJlZ2lvblkgPj0gcmVnaW9uSGVpZ2h0KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZWdpb25Sb3cgPSByZWdpb25CaXRtYXBbcmVnaW9uWV07XG4gICAgICAgICAgICBwYXR0ZXJuUm93ID0gcGF0dGVybkJpdG1hcFtpXTtcblxuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBhdHRlcm5XaWR0aDsgaisrKSB7XG4gICAgICAgICAgICAgIHJlZ2lvblggPSB4ICsgajtcblxuICAgICAgICAgICAgICBpZiAocmVnaW9uWCA+PSAwICYmIHJlZ2lvblggPCByZWdpb25XaWR0aCkge1xuICAgICAgICAgICAgICAgIHJlZ2lvblJvd1tyZWdpb25YXSB8PSBwYXR0ZXJuUm93W2pdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2lvbkJpdG1hcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRTZWdtZW50SGVhZGVyKGRhdGEsIHN0YXJ0KSB7XG4gICAgdmFyIHNlZ21lbnRIZWFkZXIgPSB7fTtcbiAgICBzZWdtZW50SGVhZGVyLm51bWJlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBzdGFydCk7XG4gICAgdmFyIGZsYWdzID0gZGF0YVtzdGFydCArIDRdO1xuICAgIHZhciBzZWdtZW50VHlwZSA9IGZsYWdzICYgMHgzZjtcblxuICAgIGlmICghU2VnbWVudFR5cGVzW3NlZ21lbnRUeXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIHNlZ21lbnQgdHlwZTogXCIgKyBzZWdtZW50VHlwZSk7XG4gICAgfVxuXG4gICAgc2VnbWVudEhlYWRlci50eXBlID0gc2VnbWVudFR5cGU7XG4gICAgc2VnbWVudEhlYWRlci50eXBlTmFtZSA9IFNlZ21lbnRUeXBlc1tzZWdtZW50VHlwZV07XG4gICAgc2VnbWVudEhlYWRlci5kZWZlcnJlZE5vblJldGFpbiA9ICEhKGZsYWdzICYgMHg4MCk7XG4gICAgdmFyIHBhZ2VBc3NvY2lhdGlvbkZpZWxkU2l6ZSA9ICEhKGZsYWdzICYgMHg0MCk7XG4gICAgdmFyIHJlZmVycmVkRmxhZ3MgPSBkYXRhW3N0YXJ0ICsgNV07XG4gICAgdmFyIHJlZmVycmVkVG9Db3VudCA9IHJlZmVycmVkRmxhZ3MgPj4gNSAmIDc7XG4gICAgdmFyIHJldGFpbkJpdHMgPSBbcmVmZXJyZWRGbGFncyAmIDMxXTtcbiAgICB2YXIgcG9zaXRpb24gPSBzdGFydCArIDY7XG5cbiAgICBpZiAocmVmZXJyZWRGbGFncyA9PT0gNykge1xuICAgICAgcmVmZXJyZWRUb0NvdW50ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uIC0gMSkgJiAweDFmZmZmZmZmO1xuICAgICAgcG9zaXRpb24gKz0gMztcbiAgICAgIHZhciBieXRlcyA9IHJlZmVycmVkVG9Db3VudCArIDcgPj4gMztcbiAgICAgIHJldGFpbkJpdHNbMF0gPSBkYXRhW3Bvc2l0aW9uKytdO1xuXG4gICAgICB3aGlsZSAoLS1ieXRlcyA+IDApIHtcbiAgICAgICAgcmV0YWluQml0cy5wdXNoKGRhdGFbcG9zaXRpb24rK10pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVmZXJyZWRGbGFncyA9PT0gNSB8fCByZWZlcnJlZEZsYWdzID09PSA2KSB7XG4gICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgcmVmZXJyZWQtdG8gZmxhZ3NcIik7XG4gICAgfVxuXG4gICAgc2VnbWVudEhlYWRlci5yZXRhaW5CaXRzID0gcmV0YWluQml0cztcbiAgICBsZXQgcmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplID0gNDtcblxuICAgIGlmIChzZWdtZW50SGVhZGVyLm51bWJlciA8PSAyNTYpIHtcbiAgICAgIHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChzZWdtZW50SGVhZGVyLm51bWJlciA8PSA2NTUzNikge1xuICAgICAgcmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplID0gMjtcbiAgICB9XG5cbiAgICB2YXIgcmVmZXJyZWRUbyA9IFtdO1xuICAgIHZhciBpLCBpaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCByZWZlcnJlZFRvQ291bnQ7IGkrKykge1xuICAgICAgbGV0IG51bWJlcjtcblxuICAgICAgaWYgKHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9PT0gMSkge1xuICAgICAgICBudW1iZXIgPSBkYXRhW3Bvc2l0aW9uXTtcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplID09PSAyKSB7XG4gICAgICAgIG51bWJlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBudW1iZXIgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICByZWZlcnJlZFRvLnB1c2gobnVtYmVyKTtcbiAgICAgIHBvc2l0aW9uICs9IHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZTtcbiAgICB9XG5cbiAgICBzZWdtZW50SGVhZGVyLnJlZmVycmVkVG8gPSByZWZlcnJlZFRvO1xuXG4gICAgaWYgKCFwYWdlQXNzb2NpYXRpb25GaWVsZFNpemUpIHtcbiAgICAgIHNlZ21lbnRIZWFkZXIucGFnZUFzc29jaWF0aW9uID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VnbWVudEhlYWRlci5wYWdlQXNzb2NpYXRpb24gPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICB9XG5cbiAgICBzZWdtZW50SGVhZGVyLmxlbmd0aCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgcG9zaXRpb24gKz0gNDtcblxuICAgIGlmIChzZWdtZW50SGVhZGVyLmxlbmd0aCA9PT0gMHhmZmZmZmZmZikge1xuICAgICAgaWYgKHNlZ21lbnRUeXBlID09PSAzOCkge1xuICAgICAgICB2YXIgZ2VuZXJpY1JlZ2lvbkluZm8gPSByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgdmFyIGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgPSBkYXRhW3Bvc2l0aW9uICsgUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGhdO1xuICAgICAgICB2YXIgZ2VuZXJpY1JlZ2lvbk1tciA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiAxKTtcbiAgICAgICAgdmFyIHNlYXJjaFBhdHRlcm5MZW5ndGggPSA2O1xuICAgICAgICB2YXIgc2VhcmNoUGF0dGVybiA9IG5ldyBVaW50OEFycmF5KHNlYXJjaFBhdHRlcm5MZW5ndGgpO1xuXG4gICAgICAgIGlmICghZ2VuZXJpY1JlZ2lvbk1tcikge1xuICAgICAgICAgIHNlYXJjaFBhdHRlcm5bMF0gPSAweGZmO1xuICAgICAgICAgIHNlYXJjaFBhdHRlcm5bMV0gPSAweGFjO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VhcmNoUGF0dGVyblsyXSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+Pj4gMjQgJiAweGZmO1xuICAgICAgICBzZWFyY2hQYXR0ZXJuWzNdID0gZ2VuZXJpY1JlZ2lvbkluZm8uaGVpZ2h0ID4+IDE2ICYgMHhmZjtcbiAgICAgICAgc2VhcmNoUGF0dGVybls0XSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+PiA4ICYgMHhmZjtcbiAgICAgICAgc2VhcmNoUGF0dGVybls1XSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCAmIDB4ZmY7XG5cbiAgICAgICAgZm9yIChpID0gcG9zaXRpb24sIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgdmFyIGogPSAwO1xuXG4gICAgICAgICAgd2hpbGUgKGogPCBzZWFyY2hQYXR0ZXJuTGVuZ3RoICYmIHNlYXJjaFBhdHRlcm5bal0gPT09IGRhdGFbaSArIGpdKSB7XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGogPT09IHNlYXJjaFBhdHRlcm5MZW5ndGgpIHtcbiAgICAgICAgICAgIHNlZ21lbnRIZWFkZXIubGVuZ3RoID0gaSArIHNlYXJjaFBhdHRlcm5MZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VnbWVudEhlYWRlci5sZW5ndGggPT09IDB4ZmZmZmZmZmYpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInNlZ21lbnQgZW5kIHdhcyBub3QgZm91bmRcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCB1bmtub3duIHNlZ21lbnQgbGVuZ3RoXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNlZ21lbnRIZWFkZXIuaGVhZGVyRW5kID0gcG9zaXRpb247XG4gICAgcmV0dXJuIHNlZ21lbnRIZWFkZXI7XG4gIH1cblxuICBmdW5jdGlvbiByZWFkU2VnbWVudHMoaGVhZGVyLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIHNlZ21lbnRzID0gW107XG4gICAgdmFyIHBvc2l0aW9uID0gc3RhcnQ7XG5cbiAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHtcbiAgICAgIHZhciBzZWdtZW50SGVhZGVyID0gcmVhZFNlZ21lbnRIZWFkZXIoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gPSBzZWdtZW50SGVhZGVyLmhlYWRlckVuZDtcbiAgICAgIHZhciBzZWdtZW50ID0ge1xuICAgICAgICBoZWFkZXI6IHNlZ21lbnRIZWFkZXIsXG4gICAgICAgIGRhdGFcbiAgICAgIH07XG5cbiAgICAgIGlmICghaGVhZGVyLnJhbmRvbUFjY2Vzcykge1xuICAgICAgICBzZWdtZW50LnN0YXJ0ID0gcG9zaXRpb247XG4gICAgICAgIHBvc2l0aW9uICs9IHNlZ21lbnRIZWFkZXIubGVuZ3RoO1xuICAgICAgICBzZWdtZW50LmVuZCA9IHBvc2l0aW9uO1xuICAgICAgfVxuXG4gICAgICBzZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuXG4gICAgICBpZiAoc2VnbWVudEhlYWRlci50eXBlID09PSA1MSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyLnJhbmRvbUFjY2Vzcykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc2VnbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBzZWdtZW50c1tpXS5zdGFydCA9IHBvc2l0aW9uO1xuICAgICAgICBwb3NpdGlvbiArPSBzZWdtZW50c1tpXS5oZWFkZXIubGVuZ3RoO1xuICAgICAgICBzZWdtZW50c1tpXS5lbmQgPSBwb3NpdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH1cblxuICBmdW5jdGlvbiByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGRhdGEsIHN0YXJ0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQpLFxuICAgICAgaGVpZ2h0OiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA0KSxcbiAgICAgIHg6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBzdGFydCArIDgpLFxuICAgICAgeTogKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHN0YXJ0ICsgMTIpLFxuICAgICAgY29tYmluYXRpb25PcGVyYXRvcjogZGF0YVtzdGFydCArIDE2XSAmIDdcbiAgICB9O1xuICB9XG5cbiAgdmFyIFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbkZpZWxkTGVuZ3RoID0gMTc7XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnQoc2VnbWVudCwgdmlzaXRvcikge1xuICAgIHZhciBoZWFkZXIgPSBzZWdtZW50LmhlYWRlcjtcbiAgICB2YXIgZGF0YSA9IHNlZ21lbnQuZGF0YSxcbiAgICAgICAgcG9zaXRpb24gPSBzZWdtZW50LnN0YXJ0LFxuICAgICAgICBlbmQgPSBzZWdtZW50LmVuZDtcbiAgICB2YXIgYXJncywgYXQsIGksIGF0TGVuZ3RoO1xuXG4gICAgc3dpdGNoIChoZWFkZXIudHlwZSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICB2YXIgZGljdGlvbmFyeSA9IHt9O1xuICAgICAgICB2YXIgZGljdGlvbmFyeUZsYWdzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgZGljdGlvbmFyeS5odWZmbWFuID0gISEoZGljdGlvbmFyeUZsYWdzICYgMSk7XG4gICAgICAgIGRpY3Rpb25hcnkucmVmaW5lbWVudCA9ICEhKGRpY3Rpb25hcnlGbGFncyAmIDIpO1xuICAgICAgICBkaWN0aW9uYXJ5Lmh1ZmZtYW5ESFNlbGVjdG9yID0gZGljdGlvbmFyeUZsYWdzID4+IDIgJiAzO1xuICAgICAgICBkaWN0aW9uYXJ5Lmh1ZmZtYW5EV1NlbGVjdG9yID0gZGljdGlvbmFyeUZsYWdzID4+IDQgJiAzO1xuICAgICAgICBkaWN0aW9uYXJ5LmJpdG1hcFNpemVTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA2ICYgMTtcbiAgICAgICAgZGljdGlvbmFyeS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yID0gZGljdGlvbmFyeUZsYWdzID4+IDcgJiAxO1xuICAgICAgICBkaWN0aW9uYXJ5LmJpdG1hcENvZGluZ0NvbnRleHRVc2VkID0gISEoZGljdGlvbmFyeUZsYWdzICYgMjU2KTtcbiAgICAgICAgZGljdGlvbmFyeS5iaXRtYXBDb2RpbmdDb250ZXh0UmV0YWluZWQgPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiA1MTIpO1xuICAgICAgICBkaWN0aW9uYXJ5LnRlbXBsYXRlID0gZGljdGlvbmFyeUZsYWdzID4+IDEwICYgMztcbiAgICAgICAgZGljdGlvbmFyeS5yZWZpbmVtZW50VGVtcGxhdGUgPSBkaWN0aW9uYXJ5RmxhZ3MgPj4gMTIgJiAxO1xuICAgICAgICBwb3NpdGlvbiArPSAyO1xuXG4gICAgICAgIGlmICghZGljdGlvbmFyeS5odWZmbWFuKSB7XG4gICAgICAgICAgYXRMZW5ndGggPSBkaWN0aW9uYXJ5LnRlbXBsYXRlID09PSAwID8gNCA6IDE7XG4gICAgICAgICAgYXQgPSBbXTtcblxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgeDogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgICAgIHk6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24gKyAxKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpY3Rpb25hcnkuYXQgPSBhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaWN0aW9uYXJ5LnJlZmluZW1lbnQgJiYgIWRpY3Rpb25hcnkucmVmaW5lbWVudFRlbXBsYXRlKSB7XG4gICAgICAgICAgYXQgPSBbXTtcblxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgICB4OiAoMCwgX2NvcmVfdXRpbHMucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uKSxcbiAgICAgICAgICAgICAgeTogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiArIDEpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGljdGlvbmFyeS5yZWZpbmVtZW50QXQgPSBhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rpb25hcnkubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICBkaWN0aW9uYXJ5Lm51bWJlck9mTmV3U3ltYm9scyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgICAgIGFyZ3MgPSBbZGljdGlvbmFyeSwgaGVhZGVyLm51bWJlciwgaGVhZGVyLnJlZmVycmVkVG8sIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA2OlxuICAgICAgY2FzZSA3OlxuICAgICAgICB2YXIgdGV4dFJlZ2lvbiA9IHt9O1xuICAgICAgICB0ZXh0UmVnaW9uLmluZm8gPSByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGg7XG4gICAgICAgIHZhciB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuID0gISEodGV4dFJlZ2lvblNlZ21lbnRGbGFncyAmIDEpO1xuICAgICAgICB0ZXh0UmVnaW9uLnJlZmluZW1lbnQgPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgMik7XG4gICAgICAgIHRleHRSZWdpb24ubG9nU3RyaXBTaXplID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiAyICYgMztcbiAgICAgICAgdGV4dFJlZ2lvbi5zdHJpcFNpemUgPSAxIDw8IHRleHRSZWdpb24ubG9nU3RyaXBTaXplO1xuICAgICAgICB0ZXh0UmVnaW9uLnJlZmVyZW5jZUNvcm5lciA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gNCAmIDM7XG4gICAgICAgIHRleHRSZWdpb24udHJhbnNwb3NlZCA9ICEhKHRleHRSZWdpb25TZWdtZW50RmxhZ3MgJiA2NCk7XG4gICAgICAgIHRleHRSZWdpb24uY29tYmluYXRpb25PcGVyYXRvciA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gNyAmIDM7XG4gICAgICAgIHRleHRSZWdpb24uZGVmYXVsdFBpeGVsVmFsdWUgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID4+IDkgJiAxO1xuICAgICAgICB0ZXh0UmVnaW9uLmRzT2Zmc2V0ID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA8PCAxNyA+PiAyNztcbiAgICAgICAgdGV4dFJlZ2lvbi5yZWZpbmVtZW50VGVtcGxhdGUgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID4+IDE1ICYgMTtcblxuICAgICAgICBpZiAodGV4dFJlZ2lvbi5odWZmbWFuKSB7XG4gICAgICAgICAgdmFyIHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuRlMgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzICYgMztcbiAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5EUyA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gMiAmIDM7XG4gICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuRFQgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDQgJiAzO1xuICAgICAgICAgIHRleHRSZWdpb24uaHVmZm1hblJlZmluZW1lbnREVyA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gNiAmIDM7XG4gICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERIID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA4ICYgMztcbiAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50RFggPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDEwICYgMztcbiAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50RFkgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDEyICYgMztcbiAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yID0gISEodGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyAmIDB4NDAwMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dFJlZ2lvbi5yZWZpbmVtZW50ICYmICF0ZXh0UmVnaW9uLnJlZmluZW1lbnRUZW1wbGF0ZSkge1xuICAgICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7XG4gICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgeDogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgICAgIHk6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24gKyAxKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRleHRSZWdpb24ucmVmaW5lbWVudEF0ID0gYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0ZXh0UmVnaW9uLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgYXJncyA9IFt0ZXh0UmVnaW9uLCBoZWFkZXIucmVmZXJyZWRUbywgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDE2OlxuICAgICAgICBjb25zdCBwYXR0ZXJuRGljdGlvbmFyeSA9IHt9O1xuICAgICAgICBjb25zdCBwYXR0ZXJuRGljdGlvbmFyeUZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICAgICAgcGF0dGVybkRpY3Rpb25hcnkubW1yID0gISEocGF0dGVybkRpY3Rpb25hcnlGbGFncyAmIDEpO1xuICAgICAgICBwYXR0ZXJuRGljdGlvbmFyeS50ZW1wbGF0ZSA9IHBhdHRlcm5EaWN0aW9uYXJ5RmxhZ3MgPj4gMSAmIDM7XG4gICAgICAgIHBhdHRlcm5EaWN0aW9uYXJ5LnBhdHRlcm5XaWR0aCA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgIHBhdHRlcm5EaWN0aW9uYXJ5LnBhdHRlcm5IZWlnaHQgPSBkYXRhW3Bvc2l0aW9uKytdO1xuICAgICAgICBwYXR0ZXJuRGljdGlvbmFyeS5tYXhQYXR0ZXJuSW5kZXggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICBhcmdzID0gW3BhdHRlcm5EaWN0aW9uYXJ5LCBoZWFkZXIubnVtYmVyLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjI6XG4gICAgICBjYXNlIDIzOlxuICAgICAgICBjb25zdCBoYWxmdG9uZVJlZ2lvbiA9IHt9O1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi5pbmZvID0gcmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbkZpZWxkTGVuZ3RoO1xuICAgICAgICBjb25zdCBoYWxmdG9uZVJlZ2lvbkZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICAgICAgaGFsZnRvbmVSZWdpb24ubW1yID0gISEoaGFsZnRvbmVSZWdpb25GbGFncyAmIDEpO1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi50ZW1wbGF0ZSA9IGhhbGZ0b25lUmVnaW9uRmxhZ3MgPj4gMSAmIDM7XG4gICAgICAgIGhhbGZ0b25lUmVnaW9uLmVuYWJsZVNraXAgPSAhIShoYWxmdG9uZVJlZ2lvbkZsYWdzICYgOCk7XG4gICAgICAgIGhhbGZ0b25lUmVnaW9uLmNvbWJpbmF0aW9uT3BlcmF0b3IgPSBoYWxmdG9uZVJlZ2lvbkZsYWdzID4+IDQgJiA3O1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi5kZWZhdWx0UGl4ZWxWYWx1ZSA9IGhhbGZ0b25lUmVnaW9uRmxhZ3MgPj4gNyAmIDE7XG4gICAgICAgIGhhbGZ0b25lUmVnaW9uLmdyaWRXaWR0aCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgICAgIGhhbGZ0b25lUmVnaW9uLmdyaWRIZWlnaHQgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkT2Zmc2V0WCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbikgJiAweGZmZmZmZmZmO1xuICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkT2Zmc2V0WSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbikgJiAweGZmZmZmZmZmO1xuICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkVmVjdG9yWCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgIGhhbGZ0b25lUmVnaW9uLmdyaWRWZWN0b3JZID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgYXJncyA9IFtoYWxmdG9uZVJlZ2lvbiwgaGVhZGVyLnJlZmVycmVkVG8sIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzODpcbiAgICAgIGNhc2UgMzk6XG4gICAgICAgIHZhciBnZW5lcmljUmVnaW9uID0ge307XG4gICAgICAgIGdlbmVyaWNSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aDtcbiAgICAgICAgdmFyIGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgPSBkYXRhW3Bvc2l0aW9uKytdO1xuICAgICAgICBnZW5lcmljUmVnaW9uLm1tciA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiAxKTtcbiAgICAgICAgZ2VuZXJpY1JlZ2lvbi50ZW1wbGF0ZSA9IGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgPj4gMSAmIDM7XG4gICAgICAgIGdlbmVyaWNSZWdpb24ucHJlZGljdGlvbiA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiA4KTtcblxuICAgICAgICBpZiAoIWdlbmVyaWNSZWdpb24ubW1yKSB7XG4gICAgICAgICAgYXRMZW5ndGggPSBnZW5lcmljUmVnaW9uLnRlbXBsYXRlID09PSAwID8gNCA6IDE7XG4gICAgICAgICAgYXQgPSBbXTtcblxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgeDogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgICAgIHk6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24gKyAxKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdlbmVyaWNSZWdpb24uYXQgPSBhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MgPSBbZ2VuZXJpY1JlZ2lvbiwgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ4OlxuICAgICAgICB2YXIgcGFnZUluZm8gPSB7XG4gICAgICAgICAgd2lkdGg6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgaGVpZ2h0OiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KSxcbiAgICAgICAgICByZXNvbHV0aW9uWDogKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgOCksXG4gICAgICAgICAgcmVzb2x1dGlvblk6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDEyKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChwYWdlSW5mby5oZWlnaHQgPT09IDB4ZmZmZmZmZmYpIHtcbiAgICAgICAgICBkZWxldGUgcGFnZUluZm8uaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhZ2VTZWdtZW50RmxhZ3MgPSBkYXRhW3Bvc2l0aW9uICsgMTZdO1xuICAgICAgICAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24gKyAxNyk7XG4gICAgICAgIHBhZ2VJbmZvLmxvc3NsZXNzID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDEpO1xuICAgICAgICBwYWdlSW5mby5yZWZpbmVtZW50ID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDIpO1xuICAgICAgICBwYWdlSW5mby5kZWZhdWx0UGl4ZWxWYWx1ZSA9IHBhZ2VTZWdtZW50RmxhZ3MgPj4gMiAmIDE7XG4gICAgICAgIHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3IgPSBwYWdlU2VnbWVudEZsYWdzID4+IDMgJiAzO1xuICAgICAgICBwYWdlSW5mby5yZXF1aXJlc0J1ZmZlciA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiAzMik7XG4gICAgICAgIHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZSA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiA2NCk7XG4gICAgICAgIGFyZ3MgPSBbcGFnZUluZm9dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OTpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNTA6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDUxOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA1MzpcbiAgICAgICAgYXJncyA9IFtoZWFkZXIubnVtYmVyLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNjI6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgc2VnbWVudCB0eXBlICR7aGVhZGVyLnR5cGVOYW1lfSgke2hlYWRlci50eXBlfSlgICsgXCIgaXMgbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHZhciBjYWxsYmFja05hbWUgPSBcIm9uXCIgKyBoZWFkZXIudHlwZU5hbWU7XG5cbiAgICBpZiAoY2FsbGJhY2tOYW1lIGluIHZpc2l0b3IpIHtcbiAgICAgIHZpc2l0b3JbY2FsbGJhY2tOYW1lXS5hcHBseSh2aXNpdG9yLCBhcmdzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzU2VnbWVudHMoc2VnbWVudHMsIHZpc2l0b3IpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBwcm9jZXNzU2VnbWVudChzZWdtZW50c1tpXSwgdmlzaXRvcik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VKYmlnMkNodW5rcyhjaHVua3MpIHtcbiAgICB2YXIgdmlzaXRvciA9IG5ldyBTaW1wbGVTZWdtZW50VmlzaXRvcigpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2h1bmtzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBjaHVuayA9IGNodW5rc1tpXTtcbiAgICAgIHZhciBzZWdtZW50cyA9IHJlYWRTZWdtZW50cyh7fSwgY2h1bmsuZGF0YSwgY2h1bmsuc3RhcnQsIGNodW5rLmVuZCk7XG4gICAgICBwcm9jZXNzU2VnbWVudHMoc2VnbWVudHMsIHZpc2l0b3IpO1xuICAgIH1cblxuICAgIHJldHVybiB2aXNpdG9yLmJ1ZmZlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSmJpZzIoZGF0YSkge1xuICAgIGNvbnN0IGVuZCA9IGRhdGEubGVuZ3RoO1xuICAgIGxldCBwb3NpdGlvbiA9IDA7XG5cbiAgICBpZiAoZGF0YVtwb3NpdGlvbl0gIT09IDB4OTcgfHwgZGF0YVtwb3NpdGlvbiArIDFdICE9PSAweDRhIHx8IGRhdGFbcG9zaXRpb24gKyAyXSAhPT0gMHg0MiB8fCBkYXRhW3Bvc2l0aW9uICsgM10gIT09IDB4MzIgfHwgZGF0YVtwb3NpdGlvbiArIDRdICE9PSAweDBkIHx8IGRhdGFbcG9zaXRpb24gKyA1XSAhPT0gMHgwYSB8fCBkYXRhW3Bvc2l0aW9uICsgNl0gIT09IDB4MWEgfHwgZGF0YVtwb3NpdGlvbiArIDddICE9PSAweDBhKSB7XG4gICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInBhcnNlSmJpZzIgLSBpbnZhbGlkIGhlYWRlci5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBwb3NpdGlvbiArPSA4O1xuICAgIGNvbnN0IGZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICBoZWFkZXIucmFuZG9tQWNjZXNzID0gIShmbGFncyAmIDEpO1xuXG4gICAgaWYgKCEoZmxhZ3MgJiAyKSkge1xuICAgICAgaGVhZGVyLm51bWJlck9mUGFnZXMgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICB9XG5cbiAgICBjb25zdCBzZWdtZW50cyA9IHJlYWRTZWdtZW50cyhoZWFkZXIsIGRhdGEsIHBvc2l0aW9uLCBlbmQpO1xuICAgIGNvbnN0IHZpc2l0b3IgPSBuZXcgU2ltcGxlU2VnbWVudFZpc2l0b3IoKTtcbiAgICBwcm9jZXNzU2VnbWVudHMoc2VnbWVudHMsIHZpc2l0b3IpO1xuICAgIGNvbnN0IHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IHZpc2l0b3IuY3VycmVudFBhZ2VJbmZvO1xuICAgIGNvbnN0IGJpdFBhY2tlZCA9IHZpc2l0b3IuYnVmZmVyO1xuICAgIGNvbnN0IGltZ0RhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQpO1xuICAgIGxldCBxID0gMCxcbiAgICAgICAgayA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICBsZXQgbWFzayA9IDAsXG4gICAgICAgICAgYnVmZmVyO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgaWYgKCFtYXNrKSB7XG4gICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICBidWZmZXIgPSBiaXRQYWNrZWRbaysrXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGltZ0RhdGFbcSsrXSA9IGJ1ZmZlciAmIG1hc2sgPyAwIDogMjU1O1xuICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbWdEYXRhLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3IoKSB7fVxuXG4gIFNpbXBsZVNlZ21lbnRWaXNpdG9yLnByb3RvdHlwZSA9IHtcbiAgICBvblBhZ2VJbmZvcm1hdGlvbjogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3Jfb25QYWdlSW5mb3JtYXRpb24oaW5mbykge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUluZm8gPSBpbmZvO1xuICAgICAgdmFyIHJvd1NpemUgPSBpbmZvLndpZHRoICsgNyA+PiAzO1xuICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OENsYW1wZWRBcnJheShyb3dTaXplICogaW5mby5oZWlnaHQpO1xuXG4gICAgICBpZiAoaW5mby5kZWZhdWx0UGl4ZWxWYWx1ZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGJ1ZmZlcltpXSA9IDB4ZmY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgfSxcbiAgICBkcmF3Qml0bWFwOiBmdW5jdGlvbiBTaW1wbGVTZWdtZW50VmlzaXRvcl9kcmF3Qml0bWFwKHJlZ2lvbkluZm8sIGJpdG1hcCkge1xuICAgICAgdmFyIHBhZ2VJbmZvID0gdGhpcy5jdXJyZW50UGFnZUluZm87XG4gICAgICB2YXIgd2lkdGggPSByZWdpb25JbmZvLndpZHRoLFxuICAgICAgICAgIGhlaWdodCA9IHJlZ2lvbkluZm8uaGVpZ2h0O1xuICAgICAgdmFyIHJvd1NpemUgPSBwYWdlSW5mby53aWR0aCArIDcgPj4gMztcbiAgICAgIHZhciBjb21iaW5hdGlvbk9wZXJhdG9yID0gcGFnZUluZm8uY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlID8gcmVnaW9uSW5mby5jb21iaW5hdGlvbk9wZXJhdG9yIDogcGFnZUluZm8uY29tYmluYXRpb25PcGVyYXRvcjtcbiAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgIHZhciBtYXNrMCA9IDEyOCA+PiAocmVnaW9uSW5mby54ICYgNyk7XG4gICAgICB2YXIgb2Zmc2V0MCA9IHJlZ2lvbkluZm8ueSAqIHJvd1NpemUgKyAocmVnaW9uSW5mby54ID4+IDMpO1xuICAgICAgdmFyIGksIGosIG1hc2ssIG9mZnNldDtcblxuICAgICAgc3dpdGNoIChjb21iaW5hdGlvbk9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgIG1hc2sgPSBtYXNrMDtcbiAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldDA7XG5cbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgICAgICAgIGlmIChiaXRtYXBbaV1bal0pIHtcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSB8PSBtYXNrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcblxuICAgICAgICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgICAgICBtYXNrID0gMTI4O1xuICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9mZnNldDAgKz0gcm93U2l6ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICBtYXNrID0gbWFzazA7XG4gICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQwO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICBpZiAoYml0bWFwW2ldW2pdKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldF0gXj0gbWFzaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG1hc2sgPj49IDE7XG5cbiAgICAgICAgICAgICAgaWYgKCFtYXNrKSB7XG4gICAgICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvZmZzZXQwICs9IHJvd1NpemU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtjb21iaW5hdGlvbk9wZXJhdG9yfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkltbWVkaWF0ZUdlbmVyaWNSZWdpb246IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbihyZWdpb24sIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciByZWdpb25JbmZvID0gcmVnaW9uLmluZm87XG4gICAgICB2YXIgZGVjb2RpbmdDb250ZXh0ID0gbmV3IERlY29kaW5nQ29udGV4dChkYXRhLCBzdGFydCwgZW5kKTtcbiAgICAgIHZhciBiaXRtYXAgPSBkZWNvZGVCaXRtYXAocmVnaW9uLm1tciwgcmVnaW9uSW5mby53aWR0aCwgcmVnaW9uSW5mby5oZWlnaHQsIHJlZ2lvbi50ZW1wbGF0ZSwgcmVnaW9uLnByZWRpY3Rpb24sIG51bGwsIHJlZ2lvbi5hdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgIHRoaXMuZHJhd0JpdG1hcChyZWdpb25JbmZvLCBiaXRtYXApO1xuICAgIH0sXG4gICAgb25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb246IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uKCkge1xuICAgICAgdGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG9uU3ltYm9sRGljdGlvbmFyeTogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3Jfb25TeW1ib2xEaWN0aW9uYXJ5KGRpY3Rpb25hcnksIGN1cnJlbnRTZWdtZW50LCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICBsZXQgaHVmZm1hblRhYmxlcywgaHVmZm1hbklucHV0O1xuXG4gICAgICBpZiAoZGljdGlvbmFyeS5odWZmbWFuKSB7XG4gICAgICAgIGh1ZmZtYW5UYWJsZXMgPSBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhkaWN0aW9uYXJ5LCByZWZlcnJlZFNlZ21lbnRzLCB0aGlzLmN1c3RvbVRhYmxlcyk7XG4gICAgICAgIGh1ZmZtYW5JbnB1dCA9IG5ldyBSZWFkZXIoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzeW1ib2xzID0gdGhpcy5zeW1ib2xzO1xuXG4gICAgICBpZiAoIXN5bWJvbHMpIHtcbiAgICAgICAgdGhpcy5zeW1ib2xzID0gc3ltYm9scyA9IHt9O1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5wdXRTeW1ib2xzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHJlZmVycmVkU2VnbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb25zdCByZWZlcnJlZFN5bWJvbHMgPSBzeW1ib2xzW3JlZmVycmVkU2VnbWVudHNbaV1dO1xuXG4gICAgICAgIGlmIChyZWZlcnJlZFN5bWJvbHMpIHtcbiAgICAgICAgICBpbnB1dFN5bWJvbHMgPSBpbnB1dFN5bWJvbHMuY29uY2F0KHJlZmVycmVkU3ltYm9scyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICBzeW1ib2xzW2N1cnJlbnRTZWdtZW50XSA9IGRlY29kZVN5bWJvbERpY3Rpb25hcnkoZGljdGlvbmFyeS5odWZmbWFuLCBkaWN0aW9uYXJ5LnJlZmluZW1lbnQsIGlucHV0U3ltYm9scywgZGljdGlvbmFyeS5udW1iZXJPZk5ld1N5bWJvbHMsIGRpY3Rpb25hcnkubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMsIGh1ZmZtYW5UYWJsZXMsIGRpY3Rpb25hcnkudGVtcGxhdGUsIGRpY3Rpb25hcnkuYXQsIGRpY3Rpb25hcnkucmVmaW5lbWVudFRlbXBsYXRlLCBkaWN0aW9uYXJ5LnJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCBodWZmbWFuSW5wdXQpO1xuICAgIH0sXG4gICAgb25JbW1lZGlhdGVUZXh0UmVnaW9uOiBmdW5jdGlvbiBTaW1wbGVTZWdtZW50VmlzaXRvcl9vbkltbWVkaWF0ZVRleHRSZWdpb24ocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgICAgbGV0IGh1ZmZtYW5UYWJsZXMsIGh1ZmZtYW5JbnB1dDtcbiAgICAgIHZhciBzeW1ib2xzID0gdGhpcy5zeW1ib2xzO1xuICAgICAgdmFyIGlucHV0U3ltYm9scyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByZWZlcnJlZFNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVmZXJyZWRTeW1ib2xzID0gc3ltYm9sc1tyZWZlcnJlZFNlZ21lbnRzW2ldXTtcblxuICAgICAgICBpZiAocmVmZXJyZWRTeW1ib2xzKSB7XG4gICAgICAgICAgaW5wdXRTeW1ib2xzID0gaW5wdXRTeW1ib2xzLmNvbmNhdChyZWZlcnJlZFN5bWJvbHMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzeW1ib2xDb2RlTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKGlucHV0U3ltYm9scy5sZW5ndGgpO1xuXG4gICAgICBpZiAocmVnaW9uLmh1ZmZtYW4pIHtcbiAgICAgICAgaHVmZm1hbklucHV0ID0gbmV3IFJlYWRlcihkYXRhLCBzdGFydCwgZW5kKTtcbiAgICAgICAgaHVmZm1hblRhYmxlcyA9IGdldFRleHRSZWdpb25IdWZmbWFuVGFibGVzKHJlZ2lvbiwgcmVmZXJyZWRTZWdtZW50cywgdGhpcy5jdXN0b21UYWJsZXMsIGlucHV0U3ltYm9scy5sZW5ndGgsIGh1ZmZtYW5JbnB1dCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgICAgdmFyIGJpdG1hcCA9IGRlY29kZVRleHRSZWdpb24ocmVnaW9uLmh1ZmZtYW4sIHJlZ2lvbi5yZWZpbmVtZW50LCByZWdpb25JbmZvLndpZHRoLCByZWdpb25JbmZvLmhlaWdodCwgcmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlLCByZWdpb24ubnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsIHJlZ2lvbi5zdHJpcFNpemUsIGlucHV0U3ltYm9scywgc3ltYm9sQ29kZUxlbmd0aCwgcmVnaW9uLnRyYW5zcG9zZWQsIHJlZ2lvbi5kc09mZnNldCwgcmVnaW9uLnJlZmVyZW5jZUNvcm5lciwgcmVnaW9uLmNvbWJpbmF0aW9uT3BlcmF0b3IsIGh1ZmZtYW5UYWJsZXMsIHJlZ2lvbi5yZWZpbmVtZW50VGVtcGxhdGUsIHJlZ2lvbi5yZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgcmVnaW9uLmxvZ1N0cmlwU2l6ZSwgaHVmZm1hbklucHV0KTtcbiAgICAgIHRoaXMuZHJhd0JpdG1hcChyZWdpb25JbmZvLCBiaXRtYXApO1xuICAgIH0sXG4gICAgb25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb246IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uKCkge1xuICAgICAgdGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgb25QYXR0ZXJuRGljdGlvbmFyeShkaWN0aW9uYXJ5LCBjdXJyZW50U2VnbWVudCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgbGV0IHBhdHRlcm5zID0gdGhpcy5wYXR0ZXJucztcblxuICAgICAgaWYgKCFwYXR0ZXJucykge1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVjb2RpbmdDb250ZXh0ID0gbmV3IERlY29kaW5nQ29udGV4dChkYXRhLCBzdGFydCwgZW5kKTtcbiAgICAgIHBhdHRlcm5zW2N1cnJlbnRTZWdtZW50XSA9IGRlY29kZVBhdHRlcm5EaWN0aW9uYXJ5KGRpY3Rpb25hcnkubW1yLCBkaWN0aW9uYXJ5LnBhdHRlcm5XaWR0aCwgZGljdGlvbmFyeS5wYXR0ZXJuSGVpZ2h0LCBkaWN0aW9uYXJ5Lm1heFBhdHRlcm5JbmRleCwgZGljdGlvbmFyeS50ZW1wbGF0ZSwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICB9LFxuXG4gICAgb25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbihyZWdpb24sIHJlZmVycmVkU2VnbWVudHMsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIGNvbnN0IHBhdHRlcm5zID0gdGhpcy5wYXR0ZXJuc1tyZWZlcnJlZFNlZ21lbnRzWzBdXTtcbiAgICAgIGNvbnN0IHJlZ2lvbkluZm8gPSByZWdpb24uaW5mbztcbiAgICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICBjb25zdCBiaXRtYXAgPSBkZWNvZGVIYWxmdG9uZVJlZ2lvbihyZWdpb24ubW1yLCBwYXR0ZXJucywgcmVnaW9uLnRlbXBsYXRlLCByZWdpb25JbmZvLndpZHRoLCByZWdpb25JbmZvLmhlaWdodCwgcmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlLCByZWdpb24uZW5hYmxlU2tpcCwgcmVnaW9uLmNvbWJpbmF0aW9uT3BlcmF0b3IsIHJlZ2lvbi5ncmlkV2lkdGgsIHJlZ2lvbi5ncmlkSGVpZ2h0LCByZWdpb24uZ3JpZE9mZnNldFgsIHJlZ2lvbi5ncmlkT2Zmc2V0WSwgcmVnaW9uLmdyaWRWZWN0b3JYLCByZWdpb24uZ3JpZFZlY3RvclksIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICB0aGlzLmRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKTtcbiAgICB9LFxuXG4gICAgb25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uKCkge1xuICAgICAgdGhpcy5vbkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSxcblxuICAgIG9uVGFibGVzKGN1cnJlbnRTZWdtZW50LCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICBsZXQgY3VzdG9tVGFibGVzID0gdGhpcy5jdXN0b21UYWJsZXM7XG5cbiAgICAgIGlmICghY3VzdG9tVGFibGVzKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tVGFibGVzID0gY3VzdG9tVGFibGVzID0ge307XG4gICAgICB9XG5cbiAgICAgIGN1c3RvbVRhYmxlc1tjdXJyZW50U2VnbWVudF0gPSBkZWNvZGVUYWJsZXNTZWdtZW50KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICB9O1xuXG4gIGZ1bmN0aW9uIEh1ZmZtYW5MaW5lKGxpbmVEYXRhKSB7XG4gICAgaWYgKGxpbmVEYXRhLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5pc09PQiA9IHRydWU7XG4gICAgICB0aGlzLnJhbmdlTG93ID0gMDtcbiAgICAgIHRoaXMucHJlZml4TGVuZ3RoID0gbGluZURhdGFbMF07XG4gICAgICB0aGlzLnJhbmdlTGVuZ3RoID0gMDtcbiAgICAgIHRoaXMucHJlZml4Q29kZSA9IGxpbmVEYXRhWzFdO1xuICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc09PQiA9IGZhbHNlO1xuICAgICAgdGhpcy5yYW5nZUxvdyA9IGxpbmVEYXRhWzBdO1xuICAgICAgdGhpcy5wcmVmaXhMZW5ndGggPSBsaW5lRGF0YVsxXTtcbiAgICAgIHRoaXMucmFuZ2VMZW5ndGggPSBsaW5lRGF0YVsyXTtcbiAgICAgIHRoaXMucHJlZml4Q29kZSA9IGxpbmVEYXRhWzNdO1xuICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBsaW5lRGF0YVs0XSA9PT0gXCJsb3dlclwiO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEh1ZmZtYW5UcmVlTm9kZShsaW5lKSB7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuXG4gICAgaWYgKGxpbmUpIHtcbiAgICAgIHRoaXMuaXNMZWFmID0gdHJ1ZTtcbiAgICAgIHRoaXMucmFuZ2VMZW5ndGggPSBsaW5lLnJhbmdlTGVuZ3RoO1xuICAgICAgdGhpcy5yYW5nZUxvdyA9IGxpbmUucmFuZ2VMb3c7XG4gICAgICB0aGlzLmlzTG93ZXJSYW5nZSA9IGxpbmUuaXNMb3dlclJhbmdlO1xuICAgICAgdGhpcy5pc09PQiA9IGxpbmUuaXNPT0I7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMZWFmID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgSHVmZm1hblRyZWVOb2RlLnByb3RvdHlwZSA9IHtcbiAgICBidWlsZFRyZWUobGluZSwgc2hpZnQpIHtcbiAgICAgIGNvbnN0IGJpdCA9IGxpbmUucHJlZml4Q29kZSA+PiBzaGlmdCAmIDE7XG5cbiAgICAgIGlmIChzaGlmdCA8PSAwKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5bYml0XSA9IG5ldyBIdWZmbWFuVHJlZU5vZGUobGluZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuY2hpbGRyZW5bYml0XTtcblxuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICB0aGlzLmNoaWxkcmVuW2JpdF0gPSBub2RlID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUuYnVpbGRUcmVlKGxpbmUsIHNoaWZ0IC0gMSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlY29kZU5vZGUocmVhZGVyKSB7XG4gICAgICBpZiAodGhpcy5pc0xlYWYpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPT0IpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGh0T2Zmc2V0ID0gcmVhZGVyLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZUxvdyArICh0aGlzLmlzTG93ZXJSYW5nZSA/IC1odE9mZnNldCA6IGh0T2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY2hpbGRyZW5bcmVhZGVyLnJlYWRCaXQoKV07XG5cbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgSHVmZm1hbiBkYXRhXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZS5kZWNvZGVOb2RlKHJlYWRlcik7XG4gICAgfVxuXG4gIH07XG5cbiAgZnVuY3Rpb24gSHVmZm1hblRhYmxlKGxpbmVzLCBwcmVmaXhDb2Rlc0RvbmUpIHtcbiAgICBpZiAoIXByZWZpeENvZGVzRG9uZSkge1xuICAgICAgdGhpcy5hc3NpZ25QcmVmaXhDb2RlcyhsaW5lcyk7XG4gICAgfVxuXG4gICAgdGhpcy5yb290Tm9kZSA9IG5ldyBIdWZmbWFuVHJlZU5vZGUobnVsbCk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBsaW5lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5lID0gbGluZXNbaV07XG5cbiAgICAgIGlmIChsaW5lLnByZWZpeExlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZS5idWlsZFRyZWUobGluZSwgbGluZS5wcmVmaXhMZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBIdWZmbWFuVGFibGUucHJvdG90eXBlID0ge1xuICAgIGRlY29kZShyZWFkZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3ROb2RlLmRlY29kZU5vZGUocmVhZGVyKTtcbiAgICB9LFxuXG4gICAgYXNzaWduUHJlZml4Q29kZXMobGluZXMpIHtcbiAgICAgIGNvbnN0IGxpbmVzTGVuZ3RoID0gbGluZXMubGVuZ3RoO1xuICAgICAgbGV0IHByZWZpeExlbmd0aE1heCA9IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNMZW5ndGg7IGkrKykge1xuICAgICAgICBwcmVmaXhMZW5ndGhNYXggPSBNYXRoLm1heChwcmVmaXhMZW5ndGhNYXgsIGxpbmVzW2ldLnByZWZpeExlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvZ3JhbSA9IG5ldyBVaW50MzJBcnJheShwcmVmaXhMZW5ndGhNYXggKyAxKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgIGhpc3RvZ3JhbVtsaW5lc1tpXS5wcmVmaXhMZW5ndGhdKys7XG4gICAgICB9XG5cbiAgICAgIGxldCBjdXJyZW50TGVuZ3RoID0gMSxcbiAgICAgICAgICBmaXJzdENvZGUgPSAwLFxuICAgICAgICAgIGN1cnJlbnRDb2RlLFxuICAgICAgICAgIGN1cnJlbnRUZW1wLFxuICAgICAgICAgIGxpbmU7XG4gICAgICBoaXN0b2dyYW1bMF0gPSAwO1xuXG4gICAgICB3aGlsZSAoY3VycmVudExlbmd0aCA8PSBwcmVmaXhMZW5ndGhNYXgpIHtcbiAgICAgICAgZmlyc3RDb2RlID0gZmlyc3RDb2RlICsgaGlzdG9ncmFtW2N1cnJlbnRMZW5ndGggLSAxXSA8PCAxO1xuICAgICAgICBjdXJyZW50Q29kZSA9IGZpcnN0Q29kZTtcbiAgICAgICAgY3VycmVudFRlbXAgPSAwO1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50VGVtcCA8IGxpbmVzTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZSA9IGxpbmVzW2N1cnJlbnRUZW1wXTtcblxuICAgICAgICAgIGlmIChsaW5lLnByZWZpeExlbmd0aCA9PT0gY3VycmVudExlbmd0aCkge1xuICAgICAgICAgICAgbGluZS5wcmVmaXhDb2RlID0gY3VycmVudENvZGU7XG4gICAgICAgICAgICBjdXJyZW50Q29kZSsrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRUZW1wKys7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50TGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuXG4gIH07XG5cbiAgZnVuY3Rpb24gZGVjb2RlVGFibGVzU2VnbWVudChkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgZmxhZ3MgPSBkYXRhW3N0YXJ0XTtcbiAgICBjb25zdCBsb3dlc3RWYWx1ZSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBzdGFydCArIDEpICYgMHhmZmZmZmZmZjtcbiAgICBjb25zdCBoaWdoZXN0VmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA1KSAmIDB4ZmZmZmZmZmY7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IFJlYWRlcihkYXRhLCBzdGFydCArIDksIGVuZCk7XG4gICAgY29uc3QgcHJlZml4U2l6ZUJpdHMgPSAoZmxhZ3MgPj4gMSAmIDcpICsgMTtcbiAgICBjb25zdCByYW5nZVNpemVCaXRzID0gKGZsYWdzID4+IDQgJiA3KSArIDE7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICBsZXQgcHJlZml4TGVuZ3RoLFxuICAgICAgICByYW5nZUxlbmd0aCxcbiAgICAgICAgY3VycmVudFJhbmdlTG93ID0gbG93ZXN0VmFsdWU7XG5cbiAgICBkbyB7XG4gICAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICAgICAgcmFuZ2VMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocmFuZ2VTaXplQml0cyk7XG4gICAgICBsaW5lcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbY3VycmVudFJhbmdlTG93LCBwcmVmaXhMZW5ndGgsIHJhbmdlTGVuZ3RoLCAwXSkpO1xuICAgICAgY3VycmVudFJhbmdlTG93ICs9IDEgPDwgcmFuZ2VMZW5ndGg7XG4gICAgfSB3aGlsZSAoY3VycmVudFJhbmdlTG93IDwgaGlnaGVzdFZhbHVlKTtcblxuICAgIHByZWZpeExlbmd0aCA9IHJlYWRlci5yZWFkQml0cyhwcmVmaXhTaXplQml0cyk7XG4gICAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2xvd2VzdFZhbHVlIC0gMSwgcHJlZml4TGVuZ3RoLCAzMiwgMCwgXCJsb3dlclwiXSkpO1xuICAgIHByZWZpeExlbmd0aCA9IHJlYWRlci5yZWFkQml0cyhwcmVmaXhTaXplQml0cyk7XG4gICAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2hpZ2hlc3RWYWx1ZSwgcHJlZml4TGVuZ3RoLCAzMiwgMF0pKTtcblxuICAgIGlmIChmbGFncyAmIDEpIHtcbiAgICAgIHByZWZpeExlbmd0aCA9IHJlYWRlci5yZWFkQml0cyhwcmVmaXhTaXplQml0cyk7XG4gICAgICBsaW5lcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbcHJlZml4TGVuZ3RoLCAwXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSHVmZm1hblRhYmxlKGxpbmVzLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBzdGFuZGFyZFRhYmxlc0NhY2hlID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0U3RhbmRhcmRUYWJsZShudW1iZXIpIHtcbiAgICBsZXQgdGFibGUgPSBzdGFuZGFyZFRhYmxlc0NhY2hlW251bWJlcl07XG5cbiAgICBpZiAodGFibGUpIHtcbiAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9XG5cbiAgICBsZXQgbGluZXM7XG5cbiAgICBzd2l0Y2ggKG51bWJlcikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICBsaW5lcyA9IFtbMCwgMSwgNCwgMHgwXSwgWzE2LCAyLCA4LCAweDJdLCBbMjcyLCAzLCAxNiwgMHg2XSwgWzY1ODA4LCAzLCAzMiwgMHg3XV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIGxpbmVzID0gW1swLCAxLCAwLCAweDBdLCBbMSwgMiwgMCwgMHgyXSwgWzIsIDMsIDAsIDB4Nl0sIFszLCA0LCAzLCAweGVdLCBbMTEsIDUsIDYsIDB4MWVdLCBbNzUsIDYsIDMyLCAweDNlXSwgWzYsIDB4M2ZdXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgbGluZXMgPSBbWy0yNTYsIDgsIDgsIDB4ZmVdLCBbMCwgMSwgMCwgMHgwXSwgWzEsIDIsIDAsIDB4Ml0sIFsyLCAzLCAwLCAweDZdLCBbMywgNCwgMywgMHhlXSwgWzExLCA1LCA2LCAweDFlXSwgWy0yNTcsIDgsIDMyLCAweGZmLCBcImxvd2VyXCJdLCBbNzUsIDcsIDMyLCAweDdlXSwgWzYsIDB4M2VdXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAwLCAweDJdLCBbMywgMywgMCwgMHg2XSwgWzQsIDQsIDMsIDB4ZV0sIFsxMiwgNSwgNiwgMHgxZV0sIFs3NiwgNSwgMzIsIDB4MWZdXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNTpcbiAgICAgICAgbGluZXMgPSBbWy0yNTUsIDcsIDgsIDB4N2VdLCBbMSwgMSwgMCwgMHgwXSwgWzIsIDIsIDAsIDB4Ml0sIFszLCAzLCAwLCAweDZdLCBbNCwgNCwgMywgMHhlXSwgWzEyLCA1LCA2LCAweDFlXSwgWy0yNTYsIDcsIDMyLCAweDdmLCBcImxvd2VyXCJdLCBbNzYsIDYsIDMyLCAweDNlXV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDY6XG4gICAgICAgIGxpbmVzID0gW1stMjA0OCwgNSwgMTAsIDB4MWNdLCBbLTEwMjQsIDQsIDksIDB4OF0sIFstNTEyLCA0LCA4LCAweDldLCBbLTI1NiwgNCwgNywgMHhhXSwgWy0xMjgsIDUsIDYsIDB4MWRdLCBbLTY0LCA1LCA1LCAweDFlXSwgWy0zMiwgNCwgNSwgMHhiXSwgWzAsIDIsIDcsIDB4MF0sIFsxMjgsIDMsIDcsIDB4Ml0sIFsyNTYsIDMsIDgsIDB4M10sIFs1MTIsIDQsIDksIDB4Y10sIFsxMDI0LCA0LCAxMCwgMHhkXSwgWy0yMDQ5LCA2LCAzMiwgMHgzZSwgXCJsb3dlclwiXSwgWzIwNDgsIDYsIDMyLCAweDNmXV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDc6XG4gICAgICAgIGxpbmVzID0gW1stMTAyNCwgNCwgOSwgMHg4XSwgWy01MTIsIDMsIDgsIDB4MF0sIFstMjU2LCA0LCA3LCAweDldLCBbLTEyOCwgNSwgNiwgMHgxYV0sIFstNjQsIDUsIDUsIDB4MWJdLCBbLTMyLCA0LCA1LCAweGFdLCBbMCwgNCwgNSwgMHhiXSwgWzMyLCA1LCA1LCAweDFjXSwgWzY0LCA1LCA2LCAweDFkXSwgWzEyOCwgNCwgNywgMHhjXSwgWzI1NiwgMywgOCwgMHgxXSwgWzUxMiwgMywgOSwgMHgyXSwgWzEwMjQsIDMsIDEwLCAweDNdLCBbLTEwMjUsIDUsIDMyLCAweDFlLCBcImxvd2VyXCJdLCBbMjA0OCwgNSwgMzIsIDB4MWZdXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgODpcbiAgICAgICAgbGluZXMgPSBbWy0xNSwgOCwgMywgMHhmY10sIFstNywgOSwgMSwgMHgxZmNdLCBbLTUsIDgsIDEsIDB4ZmRdLCBbLTMsIDksIDAsIDB4MWZkXSwgWy0yLCA3LCAwLCAweDdjXSwgWy0xLCA0LCAwLCAweGFdLCBbMCwgMiwgMSwgMHgwXSwgWzIsIDUsIDAsIDB4MWFdLCBbMywgNiwgMCwgMHgzYV0sIFs0LCAzLCA0LCAweDRdLCBbMjAsIDYsIDEsIDB4M2JdLCBbMjIsIDQsIDQsIDB4Yl0sIFszOCwgNCwgNSwgMHhjXSwgWzcwLCA1LCA2LCAweDFiXSwgWzEzNCwgNSwgNywgMHgxY10sIFsyNjIsIDYsIDcsIDB4M2NdLCBbMzkwLCA3LCA4LCAweDdkXSwgWzY0NiwgNiwgMTAsIDB4M2RdLCBbLTE2LCA5LCAzMiwgMHgxZmUsIFwibG93ZXJcIl0sIFsxNjcwLCA5LCAzMiwgMHgxZmZdLCBbMiwgMHgxXV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDk6XG4gICAgICAgIGxpbmVzID0gW1stMzEsIDgsIDQsIDB4ZmNdLCBbLTE1LCA5LCAyLCAweDFmY10sIFstMTEsIDgsIDIsIDB4ZmRdLCBbLTcsIDksIDEsIDB4MWZkXSwgWy01LCA3LCAxLCAweDdjXSwgWy0zLCA0LCAxLCAweGFdLCBbLTEsIDMsIDEsIDB4Ml0sIFsxLCAzLCAxLCAweDNdLCBbMywgNSwgMSwgMHgxYV0sIFs1LCA2LCAxLCAweDNhXSwgWzcsIDMsIDUsIDB4NF0sIFszOSwgNiwgMiwgMHgzYl0sIFs0MywgNCwgNSwgMHhiXSwgWzc1LCA0LCA2LCAweGNdLCBbMTM5LCA1LCA3LCAweDFiXSwgWzI2NywgNSwgOCwgMHgxY10sIFs1MjMsIDYsIDgsIDB4M2NdLCBbNzc5LCA3LCA5LCAweDdkXSwgWzEyOTEsIDYsIDExLCAweDNkXSwgWy0zMiwgOSwgMzIsIDB4MWZlLCBcImxvd2VyXCJdLCBbMzMzOSwgOSwgMzIsIDB4MWZmXSwgWzIsIDB4MF1dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxMDpcbiAgICAgICAgbGluZXMgPSBbWy0yMSwgNywgNCwgMHg3YV0sIFstNSwgOCwgMCwgMHhmY10sIFstNCwgNywgMCwgMHg3Yl0sIFstMywgNSwgMCwgMHgxOF0sIFstMiwgMiwgMiwgMHgwXSwgWzIsIDUsIDAsIDB4MTldLCBbMywgNiwgMCwgMHgzNl0sIFs0LCA3LCAwLCAweDdjXSwgWzUsIDgsIDAsIDB4ZmRdLCBbNiwgMiwgNiwgMHgxXSwgWzcwLCA1LCA1LCAweDFhXSwgWzEwMiwgNiwgNSwgMHgzN10sIFsxMzQsIDYsIDYsIDB4MzhdLCBbMTk4LCA2LCA3LCAweDM5XSwgWzMyNiwgNiwgOCwgMHgzYV0sIFs1ODIsIDYsIDksIDB4M2JdLCBbMTA5NCwgNiwgMTAsIDB4M2NdLCBbMjExOCwgNywgMTEsIDB4N2RdLCBbLTIyLCA4LCAzMiwgMHhmZSwgXCJsb3dlclwiXSwgWzQxNjYsIDgsIDMyLCAweGZmXSwgWzIsIDB4Ml1dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxMTpcbiAgICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAxLCAweDJdLCBbNCwgNCwgMCwgMHhjXSwgWzUsIDQsIDEsIDB4ZF0sIFs3LCA1LCAxLCAweDFjXSwgWzksIDUsIDIsIDB4MWRdLCBbMTMsIDYsIDIsIDB4M2NdLCBbMTcsIDcsIDIsIDB4N2FdLCBbMjEsIDcsIDMsIDB4N2JdLCBbMjksIDcsIDQsIDB4N2NdLCBbNDUsIDcsIDUsIDB4N2RdLCBbNzcsIDcsIDYsIDB4N2VdLCBbMTQxLCA3LCAzMiwgMHg3Zl1dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxMjpcbiAgICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAwLCAweDJdLCBbMywgMywgMSwgMHg2XSwgWzUsIDUsIDAsIDB4MWNdLCBbNiwgNSwgMSwgMHgxZF0sIFs4LCA2LCAxLCAweDNjXSwgWzEwLCA3LCAwLCAweDdhXSwgWzExLCA3LCAxLCAweDdiXSwgWzEzLCA3LCAyLCAweDdjXSwgWzE3LCA3LCAzLCAweDdkXSwgWzI1LCA3LCA0LCAweDdlXSwgWzQxLCA4LCA1LCAweGZlXSwgWzczLCA4LCAzMiwgMHhmZl1dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxMzpcbiAgICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAzLCAwLCAweDRdLCBbMywgNCwgMCwgMHhjXSwgWzQsIDUsIDAsIDB4MWNdLCBbNSwgNCwgMSwgMHhkXSwgWzcsIDMsIDMsIDB4NV0sIFsxNSwgNiwgMSwgMHgzYV0sIFsxNywgNiwgMiwgMHgzYl0sIFsyMSwgNiwgMywgMHgzY10sIFsyOSwgNiwgNCwgMHgzZF0sIFs0NSwgNiwgNSwgMHgzZV0sIFs3NywgNywgNiwgMHg3ZV0sIFsxNDEsIDcsIDMyLCAweDdmXV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDE0OlxuICAgICAgICBsaW5lcyA9IFtbLTIsIDMsIDAsIDB4NF0sIFstMSwgMywgMCwgMHg1XSwgWzAsIDEsIDAsIDB4MF0sIFsxLCAzLCAwLCAweDZdLCBbMiwgMywgMCwgMHg3XV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDE1OlxuICAgICAgICBsaW5lcyA9IFtbLTI0LCA3LCA0LCAweDdjXSwgWy04LCA2LCAyLCAweDNjXSwgWy00LCA1LCAxLCAweDFjXSwgWy0yLCA0LCAwLCAweGNdLCBbLTEsIDMsIDAsIDB4NF0sIFswLCAxLCAwLCAweDBdLCBbMSwgMywgMCwgMHg1XSwgWzIsIDQsIDAsIDB4ZF0sIFszLCA1LCAxLCAweDFkXSwgWzUsIDYsIDIsIDB4M2RdLCBbOSwgNywgNCwgMHg3ZF0sIFstMjUsIDcsIDMyLCAweDdlLCBcImxvd2VyXCJdLCBbMjUsIDcsIDMyLCAweDdmXV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgc3RhbmRhcmQgdGFibGUgQi4ke251bWJlcn0gZG9lcyBub3QgZXhpc3RgKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBsaW5lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBsaW5lc1tpXSA9IG5ldyBIdWZmbWFuTGluZShsaW5lc1tpXSk7XG4gICAgfVxuXG4gICAgdGFibGUgPSBuZXcgSHVmZm1hblRhYmxlKGxpbmVzLCB0cnVlKTtcbiAgICBzdGFuZGFyZFRhYmxlc0NhY2hlW251bWJlcl0gPSB0YWJsZTtcbiAgICByZXR1cm4gdGFibGU7XG4gIH1cblxuICBmdW5jdGlvbiBSZWFkZXIoZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIHRoaXMucG9zaXRpb24gPSBzdGFydDtcbiAgICB0aGlzLnNoaWZ0ID0gLTE7XG4gICAgdGhpcy5jdXJyZW50Qnl0ZSA9IDA7XG4gIH1cblxuICBSZWFkZXIucHJvdG90eXBlID0ge1xuICAgIHJlYWRCaXQoKSB7XG4gICAgICBpZiAodGhpcy5zaGlmdCA8IDApIHtcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPj0gdGhpcy5lbmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImVuZCBvZiBkYXRhIHdoaWxlIHJlYWRpbmcgYml0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyZW50Qnl0ZSA9IHRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdO1xuICAgICAgICB0aGlzLnNoaWZ0ID0gNztcbiAgICAgIH1cblxuICAgICAgY29uc3QgYml0ID0gdGhpcy5jdXJyZW50Qnl0ZSA+PiB0aGlzLnNoaWZ0ICYgMTtcbiAgICAgIHRoaXMuc2hpZnQtLTtcbiAgICAgIHJldHVybiBiaXQ7XG4gICAgfSxcblxuICAgIHJlYWRCaXRzKG51bUJpdHMpIHtcbiAgICAgIGxldCByZXN1bHQgPSAwLFxuICAgICAgICAgIGk7XG5cbiAgICAgIGZvciAoaSA9IG51bUJpdHMgLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICByZXN1bHQgfD0gdGhpcy5yZWFkQml0KCkgPDwgaTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYnl0ZUFsaWduKCkge1xuICAgICAgdGhpcy5zaGlmdCA9IC0xO1xuICAgIH0sXG5cbiAgICBuZXh0KCkge1xuICAgICAgaWYgKHRoaXMucG9zaXRpb24gPj0gdGhpcy5lbmQpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK107XG4gICAgfVxuXG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHJlZmVycmVkVG8ubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgdGFibGUgPSBjdXN0b21UYWJsZXNbcmVmZXJyZWRUb1tpXV07XG5cbiAgICAgIGlmICh0YWJsZSkge1xuICAgICAgICBpZiAoaW5kZXggPT09IGN1cnJlbnRJbmRleCkge1xuICAgICAgICAgIHJldHVybiB0YWJsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRJbmRleCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZVwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRleHRSZWdpb25IdWZmbWFuVGFibGVzKHRleHRSZWdpb24sIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcywgbnVtYmVyT2ZTeW1ib2xzLCByZWFkZXIpIHtcbiAgICBjb25zdCBjb2RlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzQ7IGkrKykge1xuICAgICAgY29uc3QgY29kZUxlbmd0aCA9IHJlYWRlci5yZWFkQml0cyg0KTtcbiAgICAgIGNvZGVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtpLCBjb2RlTGVuZ3RoLCAwLCAwXSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bkNvZGVzVGFibGUgPSBuZXcgSHVmZm1hblRhYmxlKGNvZGVzLCBmYWxzZSk7XG4gICAgY29kZXMubGVuZ3RoID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZTeW1ib2xzOykge1xuICAgICAgY29uc3QgY29kZUxlbmd0aCA9IHJ1bkNvZGVzVGFibGUuZGVjb2RlKHJlYWRlcik7XG5cbiAgICAgIGlmIChjb2RlTGVuZ3RoID49IDMyKSB7XG4gICAgICAgIGxldCByZXBlYXRlZExlbmd0aCwgbnVtYmVyT2ZSZXBlYXRzLCBqO1xuXG4gICAgICAgIHN3aXRjaCAoY29kZUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbnVtYmVyT2ZSZXBlYXRzID0gcmVhZGVyLnJlYWRCaXRzKDIpICsgMztcbiAgICAgICAgICAgIHJlcGVhdGVkTGVuZ3RoID0gY29kZXNbaSAtIDFdLnByZWZpeExlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgIG51bWJlck9mUmVwZWF0cyA9IHJlYWRlci5yZWFkQml0cygzKSArIDM7XG4gICAgICAgICAgICByZXBlYXRlZExlbmd0aCA9IDA7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoNykgKyAxMTtcbiAgICAgICAgICAgIHJlcGVhdGVkTGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyT2ZSZXBlYXRzOyBqKyspIHtcbiAgICAgICAgICBjb2Rlcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaSwgcmVwZWF0ZWRMZW5ndGgsIDAsIDBdKSk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2Rlcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaSwgY29kZUxlbmd0aCwgMCwgMF0pKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlYWRlci5ieXRlQWxpZ24oKTtcbiAgICBjb25zdCBzeW1ib2xJRFRhYmxlID0gbmV3IEh1ZmZtYW5UYWJsZShjb2RlcywgZmFsc2UpO1xuICAgIGxldCBjdXN0b21JbmRleCA9IDAsXG4gICAgICAgIHRhYmxlRmlyc3RTLFxuICAgICAgICB0YWJsZURlbHRhUyxcbiAgICAgICAgdGFibGVEZWx0YVQ7XG5cbiAgICBzd2l0Y2ggKHRleHRSZWdpb24uaHVmZm1hbkZTKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRhYmxlRmlyc3RTID0gZ2V0U3RhbmRhcmRUYWJsZSh0ZXh0UmVnaW9uLmh1ZmZtYW5GUyArIDYpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzOlxuICAgICAgICB0YWJsZUZpcnN0UyA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yXCIpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGV4dFJlZ2lvbi5odWZmbWFuRFMpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMTpcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdGFibGVEZWx0YVMgPSBnZXRTdGFuZGFyZFRhYmxlKHRleHRSZWdpb24uaHVmZm1hbkRTICsgOCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHRhYmxlRGVsdGFTID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIEh1ZmZtYW4gRFMgc2VsZWN0b3JcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0ZXh0UmVnaW9uLmh1ZmZtYW5EVCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgY2FzZSAyOlxuICAgICAgICB0YWJsZURlbHRhVCA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRFQgKyAxMSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHRhYmxlRGVsdGFUID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIEh1ZmZtYW4gRFQgc2VsZWN0b3JcIik7XG4gICAgfVxuXG4gICAgaWYgKHRleHRSZWdpb24ucmVmaW5lbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xJRFRhYmxlLFxuICAgICAgdGFibGVGaXJzdFMsXG4gICAgICB0YWJsZURlbHRhUyxcbiAgICAgIHRhYmxlRGVsdGFUXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN5bWJvbERpY3Rpb25hcnlIdWZmbWFuVGFibGVzKGRpY3Rpb25hcnksIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcykge1xuICAgIGxldCBjdXN0b21JbmRleCA9IDAsXG4gICAgICAgIHRhYmxlRGVsdGFIZWlnaHQsXG4gICAgICAgIHRhYmxlRGVsdGFXaWR0aDtcblxuICAgIHN3aXRjaCAoZGljdGlvbmFyeS5odWZmbWFuREhTZWxlY3Rvcikge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgICB0YWJsZURlbHRhSGVpZ2h0ID0gZ2V0U3RhbmRhcmRUYWJsZShkaWN0aW9uYXJ5Lmh1ZmZtYW5ESFNlbGVjdG9yICsgNCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHRhYmxlRGVsdGFIZWlnaHQgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICAgIGN1c3RvbUluZGV4Kys7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvclwiKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpY3Rpb25hcnkuaHVmZm1hbkRXU2VsZWN0b3IpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdGFibGVEZWx0YVdpZHRoID0gZ2V0U3RhbmRhcmRUYWJsZShkaWN0aW9uYXJ5Lmh1ZmZtYW5EV1NlbGVjdG9yICsgMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHRhYmxlRGVsdGFXaWR0aCA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yXCIpO1xuICAgIH1cblxuICAgIGxldCB0YWJsZUJpdG1hcFNpemUsIHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzO1xuXG4gICAgaWYgKGRpY3Rpb25hcnkuYml0bWFwU2l6ZVNlbGVjdG9yKSB7XG4gICAgICB0YWJsZUJpdG1hcFNpemUgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICBjdXN0b21JbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUJpdG1hcFNpemUgPSBnZXRTdGFuZGFyZFRhYmxlKDEpO1xuICAgIH1cblxuICAgIGlmIChkaWN0aW9uYXJ5LmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3IpIHtcbiAgICAgIHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlcyA9IGdldFN0YW5kYXJkVGFibGUoMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYmxlRGVsdGFIZWlnaHQsXG4gICAgICB0YWJsZURlbHRhV2lkdGgsXG4gICAgICB0YWJsZUJpdG1hcFNpemUsXG4gICAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlc1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiByZWFkVW5jb21wcmVzc2VkQml0bWFwKHJlYWRlciwgd2lkdGgsIGhlaWdodCkge1xuICAgIGNvbnN0IGJpdG1hcCA9IFtdO1xuXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgY29uc3Qgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgICAgYml0bWFwLnB1c2gocm93KTtcblxuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICAgIHJvd1t4XSA9IHJlYWRlci5yZWFkQml0KCk7XG4gICAgICB9XG5cbiAgICAgIHJlYWRlci5ieXRlQWxpZ24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYml0bWFwO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlTU1SQml0bWFwKGlucHV0LCB3aWR0aCwgaGVpZ2h0LCBlbmRPZkJsb2NrKSB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgSzogLTEsXG4gICAgICBDb2x1bW5zOiB3aWR0aCxcbiAgICAgIFJvd3M6IGhlaWdodCxcbiAgICAgIEJsYWNrSXMxOiB0cnVlLFxuICAgICAgRW5kT2ZCbG9jazogZW5kT2ZCbG9ja1xuICAgIH07XG4gICAgY29uc3QgZGVjb2RlciA9IG5ldyBfY2NpdHQuQ0NJVFRGYXhEZWNvZGVyKGlucHV0LCBwYXJhbXMpO1xuICAgIGNvbnN0IGJpdG1hcCA9IFtdO1xuICAgIGxldCBjdXJyZW50Qnl0ZSxcbiAgICAgICAgZW9mID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICBjb25zdCByb3cgPSBuZXcgVWludDhBcnJheSh3aWR0aCk7XG4gICAgICBiaXRtYXAucHVzaChyb3cpO1xuICAgICAgbGV0IHNoaWZ0ID0gLTE7XG5cbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICBpZiAoc2hpZnQgPCAwKSB7XG4gICAgICAgICAgY3VycmVudEJ5dGUgPSBkZWNvZGVyLnJlYWROZXh0Q2hhcigpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRCeXRlID09PSAtMSkge1xuICAgICAgICAgICAgY3VycmVudEJ5dGUgPSAwO1xuICAgICAgICAgICAgZW9mID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzaGlmdCA9IDc7XG4gICAgICAgIH1cblxuICAgICAgICByb3dbeF0gPSBjdXJyZW50Qnl0ZSA+PiBzaGlmdCAmIDE7XG4gICAgICAgIHNoaWZ0LS07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZE9mQmxvY2sgJiYgIWVvZikge1xuICAgICAgY29uc3QgbG9va0ZvckVPRkxpbWl0ID0gNTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb29rRm9yRU9GTGltaXQ7IGkrKykge1xuICAgICAgICBpZiAoZGVjb2Rlci5yZWFkTmV4dENoYXIoKSA9PT0gLTEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiaXRtYXA7XG4gIH1cblxuICBmdW5jdGlvbiBKYmlnMkltYWdlKCkge31cblxuICBKYmlnMkltYWdlLnByb3RvdHlwZSA9IHtcbiAgICBwYXJzZUNodW5rcyhjaHVua3MpIHtcbiAgICAgIHJldHVybiBwYXJzZUpiaWcyQ2h1bmtzKGNodW5rcyk7XG4gICAgfSxcblxuICAgIHBhcnNlKGRhdGEpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaW1nRGF0YSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHBhcnNlSmJpZzIoZGF0YSk7XG4gICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIHJldHVybiBpbWdEYXRhO1xuICAgIH1cblxuICB9O1xuICByZXR1cm4gSmJpZzJJbWFnZTtcbn0oKTtcblxuZXhwb3J0cy5KYmlnMkltYWdlID0gSmJpZzJJbWFnZTtcblxuLyoqKi8gfSksXG4vKiAxNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Bcml0aG1ldGljRGVjb2RlciA9IHZvaWQgMDtcbmNvbnN0IFFlVGFibGUgPSBbe1xuICBxZTogMHg1NjAxLFxuICBubXBzOiAxLFxuICBubHBzOiAxLFxuICBzd2l0Y2hGbGFnOiAxXG59LCB7XG4gIHFlOiAweDM0MDEsXG4gIG5tcHM6IDIsXG4gIG5scHM6IDYsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MTgwMSxcbiAgbm1wczogMyxcbiAgbmxwczogOSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwYWMxLFxuICBubXBzOiA0LFxuICBubHBzOiAxMixcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwNTIxLFxuICBubXBzOiA1LFxuICBubHBzOiAyOSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMjIxLFxuICBubXBzOiAzOCxcbiAgbmxwczogMzMsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4NTYwMSxcbiAgbm1wczogNyxcbiAgbmxwczogNixcbiAgc3dpdGNoRmxhZzogMVxufSwge1xuICBxZTogMHg1NDAxLFxuICBubXBzOiA4LFxuICBubHBzOiAxNCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHg0ODAxLFxuICBubXBzOiA5LFxuICBubHBzOiAxNCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgzODAxLFxuICBubXBzOiAxMCxcbiAgbmxwczogMTQsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MzAwMSxcbiAgbm1wczogMTEsXG4gIG5scHM6IDE3LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDI0MDEsXG4gIG5tcHM6IDEyLFxuICBubHBzOiAxOCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxYzAxLFxuICBubXBzOiAxMyxcbiAgbmxwczogMjAsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MTYwMSxcbiAgbm1wczogMjksXG4gIG5scHM6IDIxLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDU2MDEsXG4gIG5tcHM6IDE1LFxuICBubHBzOiAxNCxcbiAgc3dpdGNoRmxhZzogMVxufSwge1xuICBxZTogMHg1NDAxLFxuICBubXBzOiAxNixcbiAgbmxwczogMTQsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4NTEwMSxcbiAgbm1wczogMTcsXG4gIG5scHM6IDE1LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDQ4MDEsXG4gIG5tcHM6IDE4LFxuICBubHBzOiAxNixcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgzODAxLFxuICBubXBzOiAxOSxcbiAgbmxwczogMTcsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MzQwMSxcbiAgbm1wczogMjAsXG4gIG5scHM6IDE4LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDMwMDEsXG4gIG5tcHM6IDIxLFxuICBubHBzOiAxOSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgyODAxLFxuICBubXBzOiAyMixcbiAgbmxwczogMTksXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MjQwMSxcbiAgbm1wczogMjMsXG4gIG5scHM6IDIwLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDIyMDEsXG4gIG5tcHM6IDI0LFxuICBubHBzOiAyMSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxYzAxLFxuICBubXBzOiAyNSxcbiAgbmxwczogMjIsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MTgwMSxcbiAgbm1wczogMjYsXG4gIG5scHM6IDIzLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDE2MDEsXG4gIG5tcHM6IDI3LFxuICBubHBzOiAyNCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxNDAxLFxuICBubXBzOiAyOCxcbiAgbmxwczogMjUsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MTIwMSxcbiAgbm1wczogMjksXG4gIG5scHM6IDI2LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDExMDEsXG4gIG5tcHM6IDMwLFxuICBubHBzOiAyNyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwYWMxLFxuICBubXBzOiAzMSxcbiAgbmxwczogMjgsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDljMSxcbiAgbm1wczogMzIsXG4gIG5scHM6IDI5LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDA4YTEsXG4gIG5tcHM6IDMzLFxuICBubHBzOiAzMCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwNTIxLFxuICBubXBzOiAzNCxcbiAgbmxwczogMzEsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDQ0MSxcbiAgbm1wczogMzUsXG4gIG5scHM6IDMyLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAyYTEsXG4gIG5tcHM6IDM2LFxuICBubHBzOiAzMyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMjIxLFxuICBubXBzOiAzNyxcbiAgbmxwczogMzQsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDE0MSxcbiAgbm1wczogMzgsXG4gIG5scHM6IDM1LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAxMTEsXG4gIG5tcHM6IDM5LFxuICBubHBzOiAzNixcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMDg1LFxuICBubXBzOiA0MCxcbiAgbmxwczogMzcsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDA0OSxcbiAgbm1wczogNDEsXG4gIG5scHM6IDM4LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAwMjUsXG4gIG5tcHM6IDQyLFxuICBubHBzOiAzOSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMDE1LFxuICBubXBzOiA0MyxcbiAgbmxwczogNDAsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDAwOSxcbiAgbm1wczogNDQsXG4gIG5scHM6IDQxLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAwMDUsXG4gIG5tcHM6IDQ1LFxuICBubHBzOiA0MixcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMDAxLFxuICBubXBzOiA0NSxcbiAgbmxwczogNDMsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4NTYwMSxcbiAgbm1wczogNDYsXG4gIG5scHM6IDQ2LFxuICBzd2l0Y2hGbGFnOiAwXG59XTtcblxuY2xhc3MgQXJpdGhtZXRpY0RlY29kZXIge1xuICBjb25zdHJ1Y3RvcihkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmJwID0gc3RhcnQ7XG4gICAgdGhpcy5kYXRhRW5kID0gZW5kO1xuICAgIHRoaXMuY2hpZ2ggPSBkYXRhW3N0YXJ0XTtcbiAgICB0aGlzLmNsb3cgPSAwO1xuICAgIHRoaXMuYnl0ZUluKCk7XG4gICAgdGhpcy5jaGlnaCA9IHRoaXMuY2hpZ2ggPDwgNyAmIDB4ZmZmZiB8IHRoaXMuY2xvdyA+PiA5ICYgMHg3ZjtcbiAgICB0aGlzLmNsb3cgPSB0aGlzLmNsb3cgPDwgNyAmIDB4ZmZmZjtcbiAgICB0aGlzLmN0IC09IDc7XG4gICAgdGhpcy5hID0gMHg4MDAwO1xuICB9XG5cbiAgYnl0ZUluKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgbGV0IGJwID0gdGhpcy5icDtcblxuICAgIGlmIChkYXRhW2JwXSA9PT0gMHhmZikge1xuICAgICAgaWYgKGRhdGFbYnAgKyAxXSA+IDB4OGYpIHtcbiAgICAgICAgdGhpcy5jbG93ICs9IDB4ZmYwMDtcbiAgICAgICAgdGhpcy5jdCA9IDg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicCsrO1xuICAgICAgICB0aGlzLmNsb3cgKz0gZGF0YVticF0gPDwgOTtcbiAgICAgICAgdGhpcy5jdCA9IDc7XG4gICAgICAgIHRoaXMuYnAgPSBicDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnArKztcbiAgICAgIHRoaXMuY2xvdyArPSBicCA8IHRoaXMuZGF0YUVuZCA/IGRhdGFbYnBdIDw8IDggOiAweGZmMDA7XG4gICAgICB0aGlzLmN0ID0gODtcbiAgICAgIHRoaXMuYnAgPSBicDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbG93ID4gMHhmZmZmKSB7XG4gICAgICB0aGlzLmNoaWdoICs9IHRoaXMuY2xvdyA+PiAxNjtcbiAgICAgIHRoaXMuY2xvdyAmPSAweGZmZmY7XG4gICAgfVxuICB9XG5cbiAgcmVhZEJpdChjb250ZXh0cywgcG9zKSB7XG4gICAgbGV0IGN4X2luZGV4ID0gY29udGV4dHNbcG9zXSA+PiAxLFxuICAgICAgICBjeF9tcHMgPSBjb250ZXh0c1twb3NdICYgMTtcbiAgICBjb25zdCBxZVRhYmxlSWN4ID0gUWVUYWJsZVtjeF9pbmRleF07XG4gICAgY29uc3QgcWVJY3ggPSBxZVRhYmxlSWN4LnFlO1xuICAgIGxldCBkO1xuICAgIGxldCBhID0gdGhpcy5hIC0gcWVJY3g7XG5cbiAgICBpZiAodGhpcy5jaGlnaCA8IHFlSWN4KSB7XG4gICAgICBpZiAoYSA8IHFlSWN4KSB7XG4gICAgICAgIGEgPSBxZUljeDtcbiAgICAgICAgZCA9IGN4X21wcztcbiAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5tcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhID0gcWVJY3g7XG4gICAgICAgIGQgPSAxIF4gY3hfbXBzO1xuXG4gICAgICAgIGlmIChxZVRhYmxlSWN4LnN3aXRjaEZsYWcgPT09IDEpIHtcbiAgICAgICAgICBjeF9tcHMgPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5scHM7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hpZ2ggLT0gcWVJY3g7XG5cbiAgICAgIGlmICgoYSAmIDB4ODAwMCkgIT09IDApIHtcbiAgICAgICAgdGhpcy5hID0gYTtcbiAgICAgICAgcmV0dXJuIGN4X21wcztcbiAgICAgIH1cblxuICAgICAgaWYgKGEgPCBxZUljeCkge1xuICAgICAgICBkID0gMSBeIGN4X21wcztcblxuICAgICAgICBpZiAocWVUYWJsZUljeC5zd2l0Y2hGbGFnID09PSAxKSB7XG4gICAgICAgICAgY3hfbXBzID0gZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGN4X2luZGV4ID0gcWVUYWJsZUljeC5ubHBzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZCA9IGN4X21wcztcbiAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5tcHM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG8ge1xuICAgICAgaWYgKHRoaXMuY3QgPT09IDApIHtcbiAgICAgICAgdGhpcy5ieXRlSW4oKTtcbiAgICAgIH1cblxuICAgICAgYSA8PD0gMTtcbiAgICAgIHRoaXMuY2hpZ2ggPSB0aGlzLmNoaWdoIDw8IDEgJiAweGZmZmYgfCB0aGlzLmNsb3cgPj4gMTUgJiAxO1xuICAgICAgdGhpcy5jbG93ID0gdGhpcy5jbG93IDw8IDEgJiAweGZmZmY7XG4gICAgICB0aGlzLmN0LS07XG4gICAgfSB3aGlsZSAoKGEgJiAweDgwMDApID09PSAwKTtcblxuICAgIHRoaXMuYSA9IGE7XG4gICAgY29udGV4dHNbcG9zXSA9IGN4X2luZGV4IDw8IDEgfCBjeF9tcHM7XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxufVxuXG5leHBvcnRzLkFyaXRobWV0aWNEZWNvZGVyID0gQXJpdGhtZXRpY0RlY29kZXI7XG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSnBlZ1N0cmVhbSA9IHZvaWQgMDtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9qcGcgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgSnBlZ1N0cmVhbSA9IGZ1bmN0aW9uIEpwZWdTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBKcGVnU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIGRpY3QsIHBhcmFtcykge1xuICAgIGxldCBjaDtcblxuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgIGlmIChjaCA9PT0gMHhmZikge1xuICAgICAgICBzdHJlYW0uc2tpcCgtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMubWF5YmVMZW5ndGggPSBtYXliZUxlbmd0aDtcbiAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuXG4gICAgX3N0cmVhbS5EZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gIH1cblxuICBKcGVnU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoX3N0cmVhbS5EZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEpwZWdTdHJlYW0ucHJvdG90eXBlLCBcImJ5dGVzXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIEpwZWdTdHJlYW1fYnl0ZXMoKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJieXRlc1wiLCB0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSk7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG5cbiAgSnBlZ1N0cmVhbS5wcm90b3R5cGUuZW5zdXJlQnVmZmVyID0gZnVuY3Rpb24gKHJlcXVlc3RlZCkge307XG5cbiAgSnBlZ1N0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGpwZWdPcHRpb25zID0ge1xuICAgICAgZGVjb2RlVHJhbnNmb3JtOiB1bmRlZmluZWQsXG4gICAgICBjb2xvclRyYW5zZm9ybTogdW5kZWZpbmVkXG4gICAgfTtcbiAgICBjb25zdCBkZWNvZGVBcnIgPSB0aGlzLmRpY3QuZ2V0QXJyYXkoXCJEZWNvZGVcIiwgXCJEXCIpO1xuXG4gICAgaWYgKHRoaXMuZm9yY2VSR0IgJiYgQXJyYXkuaXNBcnJheShkZWNvZGVBcnIpKSB7XG4gICAgICBjb25zdCBiaXRzUGVyQ29tcG9uZW50ID0gdGhpcy5kaWN0LmdldChcIkJpdHNQZXJDb21wb25lbnRcIikgfHwgODtcbiAgICAgIGNvbnN0IGRlY29kZUFyckxlbmd0aCA9IGRlY29kZUFyci5sZW5ndGg7XG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgSW50MzJBcnJheShkZWNvZGVBcnJMZW5ndGgpO1xuICAgICAgbGV0IHRyYW5zZm9ybU5lZWRlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSAoMSA8PCBiaXRzUGVyQ29tcG9uZW50KSAtIDE7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlQXJyTGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdHJhbnNmb3JtW2ldID0gKGRlY29kZUFycltpICsgMV0gLSBkZWNvZGVBcnJbaV0pICogMjU2IHwgMDtcbiAgICAgICAgdHJhbnNmb3JtW2kgKyAxXSA9IGRlY29kZUFycltpXSAqIG1heFZhbHVlIHwgMDtcblxuICAgICAgICBpZiAodHJhbnNmb3JtW2ldICE9PSAyNTYgfHwgdHJhbnNmb3JtW2kgKyAxXSAhPT0gMCkge1xuICAgICAgICAgIHRyYW5zZm9ybU5lZWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRyYW5zZm9ybU5lZWRlZCkge1xuICAgICAgICBqcGVnT3B0aW9ucy5kZWNvZGVUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHRoaXMucGFyYW1zKSkge1xuICAgICAgY29uc3QgY29sb3JUcmFuc2Zvcm0gPSB0aGlzLnBhcmFtcy5nZXQoXCJDb2xvclRyYW5zZm9ybVwiKTtcblxuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoY29sb3JUcmFuc2Zvcm0pKSB7XG4gICAgICAgIGpwZWdPcHRpb25zLmNvbG9yVHJhbnNmb3JtID0gY29sb3JUcmFuc2Zvcm07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QganBlZ0ltYWdlID0gbmV3IF9qcGcuSnBlZ0ltYWdlKGpwZWdPcHRpb25zKTtcbiAgICBqcGVnSW1hZ2UucGFyc2UodGhpcy5ieXRlcyk7XG4gICAgY29uc3QgZGF0YSA9IGpwZWdJbWFnZS5nZXREYXRhKHtcbiAgICAgIHdpZHRoOiB0aGlzLmRyYXdXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5kcmF3SGVpZ2h0LFxuICAgICAgZm9yY2VSR0I6IHRoaXMuZm9yY2VSR0IsXG4gICAgICBpc1NvdXJjZVBERjogdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgfTtcblxuICByZXR1cm4gSnBlZ1N0cmVhbTtcbn0oKTtcblxuZXhwb3J0cy5KcGVnU3RyZWFtID0gSnBlZ1N0cmVhbTtcblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5KcGVnSW1hZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbmNsYXNzIEpwZWdFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihgSlBFRyBlcnJvcjogJHttc2d9YCk7XG4gIH1cblxufVxuXG5jbGFzcyBETkxNYXJrZXJFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzY2FuTGluZXMpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLnNjYW5MaW5lcyA9IHNjYW5MaW5lcztcbiAgfVxuXG59XG5cbmNsYXNzIEVPSU1hcmtlckVycm9yIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7fVxuXG52YXIgSnBlZ0ltYWdlID0gZnVuY3Rpb24gSnBlZ0ltYWdlQ2xvc3VyZSgpIHtcbiAgdmFyIGRjdFppZ1phZyA9IG5ldyBVaW50OEFycmF5KFswLCAxLCA4LCAxNiwgOSwgMiwgMywgMTAsIDE3LCAyNCwgMzIsIDI1LCAxOCwgMTEsIDQsIDUsIDEyLCAxOSwgMjYsIDMzLCA0MCwgNDgsIDQxLCAzNCwgMjcsIDIwLCAxMywgNiwgNywgMTQsIDIxLCAyOCwgMzUsIDQyLCA0OSwgNTYsIDU3LCA1MCwgNDMsIDM2LCAyOSwgMjIsIDE1LCAyMywgMzAsIDM3LCA0NCwgNTEsIDU4LCA1OSwgNTIsIDQ1LCAzOCwgMzEsIDM5LCA0NiwgNTMsIDYwLCA2MSwgNTQsIDQ3LCA1NSwgNjIsIDYzXSk7XG4gIHZhciBkY3RDb3MxID0gNDAxNztcbiAgdmFyIGRjdFNpbjEgPSA3OTk7XG4gIHZhciBkY3RDb3MzID0gMzQwNjtcbiAgdmFyIGRjdFNpbjMgPSAyMjc2O1xuICB2YXIgZGN0Q29zNiA9IDE1Njc7XG4gIHZhciBkY3RTaW42ID0gMzc4NDtcbiAgdmFyIGRjdFNxcnQyID0gNTc5MztcbiAgdmFyIGRjdFNxcnQxZDIgPSAyODk2O1xuXG4gIGZ1bmN0aW9uIEpwZWdJbWFnZSh7XG4gICAgZGVjb2RlVHJhbnNmb3JtID0gbnVsbCxcbiAgICBjb2xvclRyYW5zZm9ybSA9IC0xXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuX2RlY29kZVRyYW5zZm9ybSA9IGRlY29kZVRyYW5zZm9ybTtcbiAgICB0aGlzLl9jb2xvclRyYW5zZm9ybSA9IGNvbG9yVHJhbnNmb3JtO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMsIHZhbHVlcykge1xuICAgIHZhciBrID0gMCxcbiAgICAgICAgY29kZSA9IFtdLFxuICAgICAgICBpLFxuICAgICAgICBqLFxuICAgICAgICBsZW5ndGggPSAxNjtcblxuICAgIHdoaWxlIChsZW5ndGggPiAwICYmICFjb2RlTGVuZ3Roc1tsZW5ndGggLSAxXSkge1xuICAgICAgbGVuZ3RoLS07XG4gICAgfVxuXG4gICAgY29kZS5wdXNoKHtcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIGluZGV4OiAwXG4gICAgfSk7XG4gICAgdmFyIHAgPSBjb2RlWzBdLFxuICAgICAgICBxO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgY29kZUxlbmd0aHNbaV07IGorKykge1xuICAgICAgICBwID0gY29kZS5wb3AoKTtcbiAgICAgICAgcC5jaGlsZHJlbltwLmluZGV4XSA9IHZhbHVlc1trXTtcblxuICAgICAgICB3aGlsZSAocC5pbmRleCA+IDApIHtcbiAgICAgICAgICBwID0gY29kZS5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHAuaW5kZXgrKztcbiAgICAgICAgY29kZS5wdXNoKHApO1xuXG4gICAgICAgIHdoaWxlIChjb2RlLmxlbmd0aCA8PSBpKSB7XG4gICAgICAgICAgY29kZS5wdXNoKHEgPSB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBpbmRleDogMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHAuY2hpbGRyZW5bcC5pbmRleF0gPSBxLmNoaWxkcmVuO1xuICAgICAgICAgIHAgPSBxO1xuICAgICAgICB9XG5cbiAgICAgICAgaysrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSArIDEgPCBsZW5ndGgpIHtcbiAgICAgICAgY29kZS5wdXNoKHEgPSB7XG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgIGluZGV4OiAwXG4gICAgICAgIH0pO1xuICAgICAgICBwLmNoaWxkcmVuW3AuaW5kZXhdID0gcS5jaGlsZHJlbjtcbiAgICAgICAgcCA9IHE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvZGVbMF0uY2hpbGRyZW47XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCbG9ja0J1ZmZlck9mZnNldChjb21wb25lbnQsIHJvdywgY29sKSB7XG4gICAgcmV0dXJuIDY0ICogKChjb21wb25lbnQuYmxvY2tzUGVyTGluZSArIDEpICogcm93ICsgY29sKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZVNjYW4oZGF0YSwgb2Zmc2V0LCBmcmFtZSwgY29tcG9uZW50cywgcmVzZXRJbnRlcnZhbCwgc3BlY3RyYWxTdGFydCwgc3BlY3RyYWxFbmQsIHN1Y2Nlc3NpdmVQcmV2LCBzdWNjZXNzaXZlLCBwYXJzZUROTE1hcmtlciA9IGZhbHNlKSB7XG4gICAgdmFyIG1jdXNQZXJMaW5lID0gZnJhbWUubWN1c1BlckxpbmU7XG4gICAgdmFyIHByb2dyZXNzaXZlID0gZnJhbWUucHJvZ3Jlc3NpdmU7XG4gICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgbGV0IGJpdHNEYXRhID0gMCxcbiAgICAgICAgYml0c0NvdW50ID0gMDtcblxuICAgIGZ1bmN0aW9uIHJlYWRCaXQoKSB7XG4gICAgICBpZiAoYml0c0NvdW50ID4gMCkge1xuICAgICAgICBiaXRzQ291bnQtLTtcbiAgICAgICAgcmV0dXJuIGJpdHNEYXRhID4+IGJpdHNDb3VudCAmIDE7XG4gICAgICB9XG5cbiAgICAgIGJpdHNEYXRhID0gZGF0YVtvZmZzZXQrK107XG5cbiAgICAgIGlmIChiaXRzRGF0YSA9PT0gMHhmZikge1xuICAgICAgICB2YXIgbmV4dEJ5dGUgPSBkYXRhW29mZnNldCsrXTtcblxuICAgICAgICBpZiAobmV4dEJ5dGUpIHtcbiAgICAgICAgICBpZiAobmV4dEJ5dGUgPT09IDB4ZGMgJiYgcGFyc2VETkxNYXJrZXIpIHtcbiAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgY29uc3Qgc2NhbkxpbmVzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcblxuICAgICAgICAgICAgaWYgKHNjYW5MaW5lcyA+IDAgJiYgc2NhbkxpbmVzICE9PSBmcmFtZS5zY2FuTGluZXMpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEROTE1hcmtlckVycm9yKFwiRm91bmQgRE5MIG1hcmtlciAoMHhGRkRDKSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YVwiLCBzY2FuTGluZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEJ5dGUgPT09IDB4ZDkpIHtcbiAgICAgICAgICAgIGlmIChwYXJzZUROTE1hcmtlcikge1xuICAgICAgICAgICAgICBjb25zdCBtYXliZVNjYW5MaW5lcyA9IGJsb2NrUm93ICogODtcblxuICAgICAgICAgICAgICBpZiAobWF5YmVTY2FuTGluZXMgPiAwICYmIG1heWJlU2NhbkxpbmVzIDwgZnJhbWUuc2NhbkxpbmVzIC8gMTApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE5MTWFya2VyRXJyb3IoXCJGb3VuZCBFT0kgbWFya2VyICgweEZGRDkpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhLCBcIiArIFwicG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXJcIiwgbWF5YmVTY2FuTGluZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFT0lNYXJrZXJFcnJvcihcIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGFcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihgdW5leHBlY3RlZCBtYXJrZXIgJHsoYml0c0RhdGEgPDwgOCB8IG5leHRCeXRlKS50b1N0cmluZygxNil9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYml0c0NvdW50ID0gNztcbiAgICAgIHJldHVybiBiaXRzRGF0YSA+Pj4gNztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWNvZGVIdWZmbWFuKHRyZWUpIHtcbiAgICAgIHZhciBub2RlID0gdHJlZTtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVbcmVhZEJpdCgpXTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBub2RlKSB7XG4gICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG5cbiAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoXCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2VcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjZWl2ZShsZW5ndGgpIHtcbiAgICAgIHZhciBuID0gMDtcblxuICAgICAgd2hpbGUgKGxlbmd0aCA+IDApIHtcbiAgICAgICAgbiA9IG4gPDwgMSB8IHJlYWRCaXQoKTtcbiAgICAgICAgbGVuZ3RoLS07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY2VpdmVBbmRFeHRlbmQobGVuZ3RoKSB7XG4gICAgICBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiByZWFkQml0KCkgPT09IDEgPyAxIDogLTE7XG4gICAgICB9XG5cbiAgICAgIHZhciBuID0gcmVjZWl2ZShsZW5ndGgpO1xuXG4gICAgICBpZiAobiA+PSAxIDw8IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuIG47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuICsgKC0xIDw8IGxlbmd0aCkgKyAxO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlY29kZUJhc2VsaW5lKGNvbXBvbmVudCwgYmxvY2tPZmZzZXQpIHtcbiAgICAgIHZhciB0ID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlREMpO1xuICAgICAgdmFyIGRpZmYgPSB0ID09PSAwID8gMCA6IHJlY2VpdmVBbmRFeHRlbmQodCk7XG4gICAgICBjb21wb25lbnQuYmxvY2tEYXRhW2Jsb2NrT2Zmc2V0XSA9IGNvbXBvbmVudC5wcmVkICs9IGRpZmY7XG4gICAgICB2YXIgayA9IDE7XG5cbiAgICAgIHdoaWxlIChrIDwgNjQpIHtcbiAgICAgICAgdmFyIHJzID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMpO1xuICAgICAgICB2YXIgcyA9IHJzICYgMTUsXG4gICAgICAgICAgICByID0gcnMgPj4gNDtcblxuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgIGlmIChyIDwgMTUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGsgKz0gMTY7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBrICs9IHI7XG4gICAgICAgIHZhciB6ID0gZGN0WmlnWmFnW2tdO1xuICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW2Jsb2NrT2Zmc2V0ICsgel0gPSByZWNlaXZlQW5kRXh0ZW5kKHMpO1xuICAgICAgICBrKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVjb2RlRENGaXJzdChjb21wb25lbnQsIGJsb2NrT2Zmc2V0KSB7XG4gICAgICB2YXIgdCA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDKTtcbiAgICAgIHZhciBkaWZmID0gdCA9PT0gMCA/IDAgOiByZWNlaXZlQW5kRXh0ZW5kKHQpIDw8IHN1Y2Nlc3NpdmU7XG4gICAgICBjb21wb25lbnQuYmxvY2tEYXRhW2Jsb2NrT2Zmc2V0XSA9IGNvbXBvbmVudC5wcmVkICs9IGRpZmY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVjb2RlRENTdWNjZXNzaXZlKGNvbXBvbmVudCwgYmxvY2tPZmZzZXQpIHtcbiAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXRdIHw9IHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlO1xuICAgIH1cblxuICAgIHZhciBlb2JydW4gPSAwO1xuXG4gICAgZnVuY3Rpb24gZGVjb2RlQUNGaXJzdChjb21wb25lbnQsIGJsb2NrT2Zmc2V0KSB7XG4gICAgICBpZiAoZW9icnVuID4gMCkge1xuICAgICAgICBlb2JydW4tLTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgayA9IHNwZWN0cmFsU3RhcnQsXG4gICAgICAgICAgZSA9IHNwZWN0cmFsRW5kO1xuXG4gICAgICB3aGlsZSAoayA8PSBlKSB7XG4gICAgICAgIHZhciBycyA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDKTtcbiAgICAgICAgdmFyIHMgPSBycyAmIDE1LFxuICAgICAgICAgICAgciA9IHJzID4+IDQ7XG5cbiAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICBpZiAociA8IDE1KSB7XG4gICAgICAgICAgICBlb2JydW4gPSByZWNlaXZlKHIpICsgKDEgPDwgcikgLSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgayArPSAxNjtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGsgKz0gcjtcbiAgICAgICAgdmFyIHogPSBkY3RaaWdaYWdba107XG4gICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXQgKyB6XSA9IHJlY2VpdmVBbmRFeHRlbmQocykgKiAoMSA8PCBzdWNjZXNzaXZlKTtcbiAgICAgICAgaysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzdWNjZXNzaXZlQUNTdGF0ZSA9IDAsXG4gICAgICAgIHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZTtcblxuICAgIGZ1bmN0aW9uIGRlY29kZUFDU3VjY2Vzc2l2ZShjb21wb25lbnQsIGJsb2NrT2Zmc2V0KSB7XG4gICAgICB2YXIgayA9IHNwZWN0cmFsU3RhcnQ7XG4gICAgICB2YXIgZSA9IHNwZWN0cmFsRW5kO1xuICAgICAgdmFyIHIgPSAwO1xuICAgICAgdmFyIHM7XG4gICAgICB2YXIgcnM7XG5cbiAgICAgIHdoaWxlIChrIDw9IGUpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WiA9IGJsb2NrT2Zmc2V0ICsgZGN0WmlnWmFnW2tdO1xuICAgICAgICBjb25zdCBzaWduID0gY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSA8IDAgPyAtMSA6IDE7XG5cbiAgICAgICAgc3dpdGNoIChzdWNjZXNzaXZlQUNTdGF0ZSkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJzID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMpO1xuICAgICAgICAgICAgcyA9IHJzICYgMTU7XG4gICAgICAgICAgICByID0gcnMgPj4gNDtcblxuICAgICAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICAgICAgaWYgKHIgPCAxNSkge1xuICAgICAgICAgICAgICAgIGVvYnJ1biA9IHJlY2VpdmUocikgKyAoMSA8PCByKTtcbiAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgciA9IDE2O1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHMgIT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKFwiaW52YWxpZCBBQ24gZW5jb2RpbmdcIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNOZXh0VmFsdWUgPSByZWNlaXZlQW5kRXh0ZW5kKHMpO1xuICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHIgPyAyIDogMztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0pIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSArPSBzaWduICogKHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHItLTtcblxuICAgICAgICAgICAgICBpZiAociA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gc3VjY2Vzc2l2ZUFDU3RhdGUgPT09IDIgPyAzIDogMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0gKz0gc2lnbiAqIChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdID0gc3VjY2Vzc2l2ZUFDTmV4dFZhbHVlIDw8IHN1Y2Nlc3NpdmU7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdICs9IHNpZ24gKiAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGsrKztcbiAgICAgIH1cblxuICAgICAgaWYgKHN1Y2Nlc3NpdmVBQ1N0YXRlID09PSA0KSB7XG4gICAgICAgIGVvYnJ1bi0tO1xuXG4gICAgICAgIGlmIChlb2JydW4gPT09IDApIHtcbiAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYmxvY2tSb3cgPSAwO1xuXG4gICAgZnVuY3Rpb24gZGVjb2RlTWN1KGNvbXBvbmVudCwgZGVjb2RlLCBtY3UsIHJvdywgY29sKSB7XG4gICAgICB2YXIgbWN1Um93ID0gbWN1IC8gbWN1c1BlckxpbmUgfCAwO1xuICAgICAgdmFyIG1jdUNvbCA9IG1jdSAlIG1jdXNQZXJMaW5lO1xuICAgICAgYmxvY2tSb3cgPSBtY3VSb3cgKiBjb21wb25lbnQudiArIHJvdztcbiAgICAgIHZhciBibG9ja0NvbCA9IG1jdUNvbCAqIGNvbXBvbmVudC5oICsgY29sO1xuICAgICAgY29uc3QgYmxvY2tPZmZzZXQgPSBnZXRCbG9ja0J1ZmZlck9mZnNldChjb21wb25lbnQsIGJsb2NrUm93LCBibG9ja0NvbCk7XG4gICAgICBkZWNvZGUoY29tcG9uZW50LCBibG9ja09mZnNldCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVjb2RlQmxvY2soY29tcG9uZW50LCBkZWNvZGUsIG1jdSkge1xuICAgICAgYmxvY2tSb3cgPSBtY3UgLyBjb21wb25lbnQuYmxvY2tzUGVyTGluZSB8IDA7XG4gICAgICB2YXIgYmxvY2tDb2wgPSBtY3UgJSBjb21wb25lbnQuYmxvY2tzUGVyTGluZTtcbiAgICAgIGNvbnN0IGJsb2NrT2Zmc2V0ID0gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCBibG9ja1JvdywgYmxvY2tDb2wpO1xuICAgICAgZGVjb2RlKGNvbXBvbmVudCwgYmxvY2tPZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRzTGVuZ3RoID0gY29tcG9uZW50cy5sZW5ndGg7XG4gICAgdmFyIGNvbXBvbmVudCwgaSwgaiwgaywgbjtcbiAgICB2YXIgZGVjb2RlRm47XG5cbiAgICBpZiAocHJvZ3Jlc3NpdmUpIHtcbiAgICAgIGlmIChzcGVjdHJhbFN0YXJ0ID09PSAwKSB7XG4gICAgICAgIGRlY29kZUZuID0gc3VjY2Vzc2l2ZVByZXYgPT09IDAgPyBkZWNvZGVEQ0ZpcnN0IDogZGVjb2RlRENTdWNjZXNzaXZlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVjb2RlRm4gPSBzdWNjZXNzaXZlUHJldiA9PT0gMCA/IGRlY29kZUFDRmlyc3QgOiBkZWNvZGVBQ1N1Y2Nlc3NpdmU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlY29kZUZuID0gZGVjb2RlQmFzZWxpbmU7XG4gICAgfVxuXG4gICAgdmFyIG1jdSA9IDAsXG4gICAgICAgIGZpbGVNYXJrZXI7XG4gICAgdmFyIG1jdUV4cGVjdGVkO1xuXG4gICAgaWYgKGNvbXBvbmVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgIG1jdUV4cGVjdGVkID0gY29tcG9uZW50c1swXS5ibG9ja3NQZXJMaW5lICogY29tcG9uZW50c1swXS5ibG9ja3NQZXJDb2x1bW47XG4gICAgfSBlbHNlIHtcbiAgICAgIG1jdUV4cGVjdGVkID0gbWN1c1BlckxpbmUgKiBmcmFtZS5tY3VzUGVyQ29sdW1uO1xuICAgIH1cblxuICAgIHZhciBoLCB2O1xuXG4gICAgd2hpbGUgKG1jdSA8PSBtY3VFeHBlY3RlZCkge1xuICAgICAgdmFyIG1jdVRvUmVhZCA9IHJlc2V0SW50ZXJ2YWwgPyBNYXRoLm1pbihtY3VFeHBlY3RlZCAtIG1jdSwgcmVzZXRJbnRlcnZhbCkgOiBtY3VFeHBlY3RlZDtcblxuICAgICAgaWYgKG1jdVRvUmVhZCA+IDApIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbXBvbmVudHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbXBvbmVudHNbaV0ucHJlZCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBlb2JydW4gPSAwO1xuXG4gICAgICAgIGlmIChjb21wb25lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50c1swXTtcblxuICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBtY3VUb1JlYWQ7IG4rKykge1xuICAgICAgICAgICAgZGVjb2RlQmxvY2soY29tcG9uZW50LCBkZWNvZGVGbiwgbWN1KTtcbiAgICAgICAgICAgIG1jdSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbWN1VG9SZWFkOyBuKyspIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21wb25lbnRzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50c1tpXTtcbiAgICAgICAgICAgICAgaCA9IGNvbXBvbmVudC5oO1xuICAgICAgICAgICAgICB2ID0gY29tcG9uZW50LnY7XG5cbiAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHY7IGorKykge1xuICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgIGRlY29kZU1jdShjb21wb25lbnQsIGRlY29kZUZuLCBtY3UsIGosIGspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtY3UrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYml0c0NvdW50ID0gMDtcbiAgICAgIGZpbGVNYXJrZXIgPSBmaW5kTmV4dEZpbGVNYXJrZXIoZGF0YSwgb2Zmc2V0KTtcblxuICAgICAgaWYgKCFmaWxlTWFya2VyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZU1hcmtlci5pbnZhbGlkKSB7XG4gICAgICAgIGNvbnN0IHBhcnRpYWxNc2cgPSBtY3VUb1JlYWQgPiAwID8gXCJ1bmV4cGVjdGVkXCIgOiBcImV4Y2Vzc2l2ZVwiO1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYGRlY29kZVNjYW4gLSAke3BhcnRpYWxNc2d9IE1DVSBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogJHtmaWxlTWFya2VyLmludmFsaWR9YCk7XG4gICAgICAgIG9mZnNldCA9IGZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZU1hcmtlci5tYXJrZXIgPj0gMHhmZmQwICYmIGZpbGVNYXJrZXIubWFya2VyIDw9IDB4ZmZkNykge1xuICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydE9mZnNldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHF1YW50aXplQW5kSW52ZXJzZShjb21wb25lbnQsIGJsb2NrQnVmZmVyT2Zmc2V0LCBwKSB7XG4gICAgdmFyIHF0ID0gY29tcG9uZW50LnF1YW50aXphdGlvblRhYmxlLFxuICAgICAgICBibG9ja0RhdGEgPSBjb21wb25lbnQuYmxvY2tEYXRhO1xuICAgIHZhciB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2Niwgdjc7XG4gICAgdmFyIHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUsIHA2LCBwNztcbiAgICB2YXIgdDtcblxuICAgIGlmICghcXQpIHtcbiAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoXCJtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS5cIik7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgNjQ7IHJvdyArPSA4KSB7XG4gICAgICBwMCA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvd107XG4gICAgICBwMSA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDFdO1xuICAgICAgcDIgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyAyXTtcbiAgICAgIHAzID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgM107XG4gICAgICBwNCA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDRdO1xuICAgICAgcDUgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyA1XTtcbiAgICAgIHA2ID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgNl07XG4gICAgICBwNyA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDddO1xuICAgICAgcDAgKj0gcXRbcm93XTtcblxuICAgICAgaWYgKChwMSB8IHAyIHwgcDMgfCBwNCB8IHA1IHwgcDYgfCBwNykgPT09IDApIHtcbiAgICAgICAgdCA9IGRjdFNxcnQyICogcDAgKyA1MTIgPj4gMTA7XG4gICAgICAgIHBbcm93XSA9IHQ7XG4gICAgICAgIHBbcm93ICsgMV0gPSB0O1xuICAgICAgICBwW3JvdyArIDJdID0gdDtcbiAgICAgICAgcFtyb3cgKyAzXSA9IHQ7XG4gICAgICAgIHBbcm93ICsgNF0gPSB0O1xuICAgICAgICBwW3JvdyArIDVdID0gdDtcbiAgICAgICAgcFtyb3cgKyA2XSA9IHQ7XG4gICAgICAgIHBbcm93ICsgN10gPSB0O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcDEgKj0gcXRbcm93ICsgMV07XG4gICAgICBwMiAqPSBxdFtyb3cgKyAyXTtcbiAgICAgIHAzICo9IHF0W3JvdyArIDNdO1xuICAgICAgcDQgKj0gcXRbcm93ICsgNF07XG4gICAgICBwNSAqPSBxdFtyb3cgKyA1XTtcbiAgICAgIHA2ICo9IHF0W3JvdyArIDZdO1xuICAgICAgcDcgKj0gcXRbcm93ICsgN107XG4gICAgICB2MCA9IGRjdFNxcnQyICogcDAgKyAxMjggPj4gODtcbiAgICAgIHYxID0gZGN0U3FydDIgKiBwNCArIDEyOCA+PiA4O1xuICAgICAgdjIgPSBwMjtcbiAgICAgIHYzID0gcDY7XG4gICAgICB2NCA9IGRjdFNxcnQxZDIgKiAocDEgLSBwNykgKyAxMjggPj4gODtcbiAgICAgIHY3ID0gZGN0U3FydDFkMiAqIChwMSArIHA3KSArIDEyOCA+PiA4O1xuICAgICAgdjUgPSBwMyA8PCA0O1xuICAgICAgdjYgPSBwNSA8PCA0O1xuICAgICAgdjAgPSB2MCArIHYxICsgMSA+PiAxO1xuICAgICAgdjEgPSB2MCAtIHYxO1xuICAgICAgdCA9IHYyICogZGN0U2luNiArIHYzICogZGN0Q29zNiArIDEyOCA+PiA4O1xuICAgICAgdjIgPSB2MiAqIGRjdENvczYgLSB2MyAqIGRjdFNpbjYgKyAxMjggPj4gODtcbiAgICAgIHYzID0gdDtcbiAgICAgIHY0ID0gdjQgKyB2NiArIDEgPj4gMTtcbiAgICAgIHY2ID0gdjQgLSB2NjtcbiAgICAgIHY3ID0gdjcgKyB2NSArIDEgPj4gMTtcbiAgICAgIHY1ID0gdjcgLSB2NTtcbiAgICAgIHYwID0gdjAgKyB2MyArIDEgPj4gMTtcbiAgICAgIHYzID0gdjAgLSB2MztcbiAgICAgIHYxID0gdjEgKyB2MiArIDEgPj4gMTtcbiAgICAgIHYyID0gdjEgLSB2MjtcbiAgICAgIHQgPSB2NCAqIGRjdFNpbjMgKyB2NyAqIGRjdENvczMgKyAyMDQ4ID4+IDEyO1xuICAgICAgdjQgPSB2NCAqIGRjdENvczMgLSB2NyAqIGRjdFNpbjMgKyAyMDQ4ID4+IDEyO1xuICAgICAgdjcgPSB0O1xuICAgICAgdCA9IHY1ICogZGN0U2luMSArIHY2ICogZGN0Q29zMSArIDIwNDggPj4gMTI7XG4gICAgICB2NSA9IHY1ICogZGN0Q29zMSAtIHY2ICogZGN0U2luMSArIDIwNDggPj4gMTI7XG4gICAgICB2NiA9IHQ7XG4gICAgICBwW3Jvd10gPSB2MCArIHY3O1xuICAgICAgcFtyb3cgKyA3XSA9IHYwIC0gdjc7XG4gICAgICBwW3JvdyArIDFdID0gdjEgKyB2NjtcbiAgICAgIHBbcm93ICsgNl0gPSB2MSAtIHY2O1xuICAgICAgcFtyb3cgKyAyXSA9IHYyICsgdjU7XG4gICAgICBwW3JvdyArIDVdID0gdjIgLSB2NTtcbiAgICAgIHBbcm93ICsgM10gPSB2MyArIHY0O1xuICAgICAgcFtyb3cgKyA0XSA9IHYzIC0gdjQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgODsgKytjb2wpIHtcbiAgICAgIHAwID0gcFtjb2xdO1xuICAgICAgcDEgPSBwW2NvbCArIDhdO1xuICAgICAgcDIgPSBwW2NvbCArIDE2XTtcbiAgICAgIHAzID0gcFtjb2wgKyAyNF07XG4gICAgICBwNCA9IHBbY29sICsgMzJdO1xuICAgICAgcDUgPSBwW2NvbCArIDQwXTtcbiAgICAgIHA2ID0gcFtjb2wgKyA0OF07XG4gICAgICBwNyA9IHBbY29sICsgNTZdO1xuXG4gICAgICBpZiAoKHAxIHwgcDIgfCBwMyB8IHA0IHwgcDUgfCBwNiB8IHA3KSA9PT0gMCkge1xuICAgICAgICB0ID0gZGN0U3FydDIgKiBwMCArIDgxOTIgPj4gMTQ7XG5cbiAgICAgICAgaWYgKHQgPCAtMjA0MCkge1xuICAgICAgICAgIHQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHQgPj0gMjAyNCkge1xuICAgICAgICAgIHQgPSAyNTU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdCA9IHQgKyAyMDU2ID4+IDQ7XG4gICAgICAgIH1cblxuICAgICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2xdID0gdDtcbiAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgOF0gPSB0O1xuICAgICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAxNl0gPSB0O1xuICAgICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAyNF0gPSB0O1xuICAgICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAzMl0gPSB0O1xuICAgICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA0MF0gPSB0O1xuICAgICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA0OF0gPSB0O1xuICAgICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA1Nl0gPSB0O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdjAgPSBkY3RTcXJ0MiAqIHAwICsgMjA0OCA+PiAxMjtcbiAgICAgIHYxID0gZGN0U3FydDIgKiBwNCArIDIwNDggPj4gMTI7XG4gICAgICB2MiA9IHAyO1xuICAgICAgdjMgPSBwNjtcbiAgICAgIHY0ID0gZGN0U3FydDFkMiAqIChwMSAtIHA3KSArIDIwNDggPj4gMTI7XG4gICAgICB2NyA9IGRjdFNxcnQxZDIgKiAocDEgKyBwNykgKyAyMDQ4ID4+IDEyO1xuICAgICAgdjUgPSBwMztcbiAgICAgIHY2ID0gcDU7XG4gICAgICB2MCA9ICh2MCArIHYxICsgMSA+PiAxKSArIDQxMTI7XG4gICAgICB2MSA9IHYwIC0gdjE7XG4gICAgICB0ID0gdjIgKiBkY3RTaW42ICsgdjMgKiBkY3RDb3M2ICsgMjA0OCA+PiAxMjtcbiAgICAgIHYyID0gdjIgKiBkY3RDb3M2IC0gdjMgKiBkY3RTaW42ICsgMjA0OCA+PiAxMjtcbiAgICAgIHYzID0gdDtcbiAgICAgIHY0ID0gdjQgKyB2NiArIDEgPj4gMTtcbiAgICAgIHY2ID0gdjQgLSB2NjtcbiAgICAgIHY3ID0gdjcgKyB2NSArIDEgPj4gMTtcbiAgICAgIHY1ID0gdjcgLSB2NTtcbiAgICAgIHYwID0gdjAgKyB2MyArIDEgPj4gMTtcbiAgICAgIHYzID0gdjAgLSB2MztcbiAgICAgIHYxID0gdjEgKyB2MiArIDEgPj4gMTtcbiAgICAgIHYyID0gdjEgLSB2MjtcbiAgICAgIHQgPSB2NCAqIGRjdFNpbjMgKyB2NyAqIGRjdENvczMgKyAyMDQ4ID4+IDEyO1xuICAgICAgdjQgPSB2NCAqIGRjdENvczMgLSB2NyAqIGRjdFNpbjMgKyAyMDQ4ID4+IDEyO1xuICAgICAgdjcgPSB0O1xuICAgICAgdCA9IHY1ICogZGN0U2luMSArIHY2ICogZGN0Q29zMSArIDIwNDggPj4gMTI7XG4gICAgICB2NSA9IHY1ICogZGN0Q29zMSAtIHY2ICogZGN0U2luMSArIDIwNDggPj4gMTI7XG4gICAgICB2NiA9IHQ7XG4gICAgICBwMCA9IHYwICsgdjc7XG4gICAgICBwNyA9IHYwIC0gdjc7XG4gICAgICBwMSA9IHYxICsgdjY7XG4gICAgICBwNiA9IHYxIC0gdjY7XG4gICAgICBwMiA9IHYyICsgdjU7XG4gICAgICBwNSA9IHYyIC0gdjU7XG4gICAgICBwMyA9IHYzICsgdjQ7XG4gICAgICBwNCA9IHYzIC0gdjQ7XG5cbiAgICAgIGlmIChwMCA8IDE2KSB7XG4gICAgICAgIHAwID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocDAgPj0gNDA4MCkge1xuICAgICAgICBwMCA9IDI1NTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHAwID4+PSA0O1xuICAgICAgfVxuXG4gICAgICBpZiAocDEgPCAxNikge1xuICAgICAgICBwMSA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHAxID49IDQwODApIHtcbiAgICAgICAgcDEgPSAyNTU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwMSA+Pj0gNDtcbiAgICAgIH1cblxuICAgICAgaWYgKHAyIDwgMTYpIHtcbiAgICAgICAgcDIgPSAwO1xuICAgICAgfSBlbHNlIGlmIChwMiA+PSA0MDgwKSB7XG4gICAgICAgIHAyID0gMjU1O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcDIgPj49IDQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwMyA8IDE2KSB7XG4gICAgICAgIHAzID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocDMgPj0gNDA4MCkge1xuICAgICAgICBwMyA9IDI1NTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHAzID4+PSA0O1xuICAgICAgfVxuXG4gICAgICBpZiAocDQgPCAxNikge1xuICAgICAgICBwNCA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHA0ID49IDQwODApIHtcbiAgICAgICAgcDQgPSAyNTU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwNCA+Pj0gNDtcbiAgICAgIH1cblxuICAgICAgaWYgKHA1IDwgMTYpIHtcbiAgICAgICAgcDUgPSAwO1xuICAgICAgfSBlbHNlIGlmIChwNSA+PSA0MDgwKSB7XG4gICAgICAgIHA1ID0gMjU1O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcDUgPj49IDQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwNiA8IDE2KSB7XG4gICAgICAgIHA2ID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocDYgPj0gNDA4MCkge1xuICAgICAgICBwNiA9IDI1NTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHA2ID4+PSA0O1xuICAgICAgfVxuXG4gICAgICBpZiAocDcgPCAxNikge1xuICAgICAgICBwNyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHA3ID49IDQwODApIHtcbiAgICAgICAgcDcgPSAyNTU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwNyA+Pj0gNDtcbiAgICAgIH1cblxuICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sXSA9IHAwO1xuICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgOF0gPSBwMTtcbiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDE2XSA9IHAyO1xuICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMjRdID0gcDM7XG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAzMl0gPSBwNDtcbiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDQwXSA9IHA1O1xuICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDhdID0gcDY7XG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA1Nl0gPSBwNztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZENvbXBvbmVudERhdGEoZnJhbWUsIGNvbXBvbmVudCkge1xuICAgIHZhciBibG9ja3NQZXJMaW5lID0gY29tcG9uZW50LmJsb2Nrc1BlckxpbmU7XG4gICAgdmFyIGJsb2Nrc1BlckNvbHVtbiA9IGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW47XG4gICAgdmFyIGNvbXB1dGF0aW9uQnVmZmVyID0gbmV3IEludDE2QXJyYXkoNjQpO1xuXG4gICAgZm9yICh2YXIgYmxvY2tSb3cgPSAwOyBibG9ja1JvdyA8IGJsb2Nrc1BlckNvbHVtbjsgYmxvY2tSb3crKykge1xuICAgICAgZm9yICh2YXIgYmxvY2tDb2wgPSAwOyBibG9ja0NvbCA8IGJsb2Nrc1BlckxpbmU7IGJsb2NrQ29sKyspIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IGdldEJsb2NrQnVmZmVyT2Zmc2V0KGNvbXBvbmVudCwgYmxvY2tSb3csIGJsb2NrQ29sKTtcbiAgICAgICAgcXVhbnRpemVBbmRJbnZlcnNlKGNvbXBvbmVudCwgb2Zmc2V0LCBjb21wdXRhdGlvbkJ1ZmZlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudC5ibG9ja0RhdGE7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kTmV4dEZpbGVNYXJrZXIoZGF0YSwgY3VycmVudFBvcywgc3RhcnRQb3MgPSBjdXJyZW50UG9zKSB7XG4gICAgY29uc3QgbWF4UG9zID0gZGF0YS5sZW5ndGggLSAxO1xuICAgIHZhciBuZXdQb3MgPSBzdGFydFBvcyA8IGN1cnJlbnRQb3MgPyBzdGFydFBvcyA6IGN1cnJlbnRQb3M7XG5cbiAgICBpZiAoY3VycmVudFBvcyA+PSBtYXhQb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50TWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIGN1cnJlbnRQb3MpO1xuXG4gICAgaWYgKGN1cnJlbnRNYXJrZXIgPj0gMHhmZmMwICYmIGN1cnJlbnRNYXJrZXIgPD0gMHhmZmZlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnZhbGlkOiBudWxsLFxuICAgICAgICBtYXJrZXI6IGN1cnJlbnRNYXJrZXIsXG4gICAgICAgIG9mZnNldDogY3VycmVudFBvc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbmV3TWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG5ld1Bvcyk7XG5cbiAgICB3aGlsZSAoIShuZXdNYXJrZXIgPj0gMHhmZmMwICYmIG5ld01hcmtlciA8PSAweGZmZmUpKSB7XG4gICAgICBpZiAoKytuZXdQb3MgPj0gbWF4UG9zKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBuZXdNYXJrZXIgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgbmV3UG9zKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZDogY3VycmVudE1hcmtlci50b1N0cmluZygxNiksXG4gICAgICBtYXJrZXI6IG5ld01hcmtlcixcbiAgICAgIG9mZnNldDogbmV3UG9zXG4gICAgfTtcbiAgfVxuXG4gIEpwZWdJbWFnZS5wcm90b3R5cGUgPSB7XG4gICAgcGFyc2UoZGF0YSwge1xuICAgICAgZG5sU2NhbkxpbmVzID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgZnVuY3Rpb24gcmVhZERhdGFCbG9jaygpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICBsZXQgZW5kT2Zmc2V0ID0gb2Zmc2V0ICsgbGVuZ3RoIC0gMjtcbiAgICAgICAgdmFyIGZpbGVNYXJrZXIgPSBmaW5kTmV4dEZpbGVNYXJrZXIoZGF0YSwgZW5kT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgICAgIGlmIChmaWxlTWFya2VyICYmIGZpbGVNYXJrZXIuaW52YWxpZCkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogXCIgKyBmaWxlTWFya2VyLmludmFsaWQpO1xuICAgICAgICAgIGVuZE9mZnNldCA9IGZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFycmF5ID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIGVuZE9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcHJlcGFyZUNvbXBvbmVudHMoZnJhbWUpIHtcbiAgICAgICAgdmFyIG1jdXNQZXJMaW5lID0gTWF0aC5jZWlsKGZyYW1lLnNhbXBsZXNQZXJMaW5lIC8gOCAvIGZyYW1lLm1heEgpO1xuICAgICAgICB2YXIgbWN1c1BlckNvbHVtbiA9IE1hdGguY2VpbChmcmFtZS5zY2FuTGluZXMgLyA4IC8gZnJhbWUubWF4Vik7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZS5jb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29tcG9uZW50ID0gZnJhbWUuY29tcG9uZW50c1tpXTtcbiAgICAgICAgICB2YXIgYmxvY2tzUGVyTGluZSA9IE1hdGguY2VpbChNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4KSAqIGNvbXBvbmVudC5oIC8gZnJhbWUubWF4SCk7XG4gICAgICAgICAgdmFyIGJsb2Nrc1BlckNvbHVtbiA9IE1hdGguY2VpbChNYXRoLmNlaWwoZnJhbWUuc2NhbkxpbmVzIC8gOCkgKiBjb21wb25lbnQudiAvIGZyYW1lLm1heFYpO1xuICAgICAgICAgIHZhciBibG9ja3NQZXJMaW5lRm9yTWN1ID0gbWN1c1BlckxpbmUgKiBjb21wb25lbnQuaDtcbiAgICAgICAgICB2YXIgYmxvY2tzUGVyQ29sdW1uRm9yTWN1ID0gbWN1c1BlckNvbHVtbiAqIGNvbXBvbmVudC52O1xuICAgICAgICAgIHZhciBibG9ja3NCdWZmZXJTaXplID0gNjQgKiBibG9ja3NQZXJDb2x1bW5Gb3JNY3UgKiAoYmxvY2tzUGVyTGluZUZvck1jdSArIDEpO1xuICAgICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGEgPSBuZXcgSW50MTZBcnJheShibG9ja3NCdWZmZXJTaXplKTtcbiAgICAgICAgICBjb21wb25lbnQuYmxvY2tzUGVyTGluZSA9IGJsb2Nrc1BlckxpbmU7XG4gICAgICAgICAgY29tcG9uZW50LmJsb2Nrc1BlckNvbHVtbiA9IGJsb2Nrc1BlckNvbHVtbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZyYW1lLm1jdXNQZXJMaW5lID0gbWN1c1BlckxpbmU7XG4gICAgICAgIGZyYW1lLm1jdXNQZXJDb2x1bW4gPSBtY3VzUGVyQ29sdW1uO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgIHZhciBqZmlmID0gbnVsbDtcbiAgICAgIHZhciBhZG9iZSA9IG51bGw7XG4gICAgICB2YXIgZnJhbWUsIHJlc2V0SW50ZXJ2YWw7XG4gICAgICBsZXQgbnVtU09TTWFya2VycyA9IDA7XG4gICAgICB2YXIgcXVhbnRpemF0aW9uVGFibGVzID0gW107XG4gICAgICB2YXIgaHVmZm1hblRhYmxlc0FDID0gW10sXG4gICAgICAgICAgaHVmZm1hblRhYmxlc0RDID0gW107XG4gICAgICBsZXQgZmlsZU1hcmtlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IDI7XG5cbiAgICAgIGlmIChmaWxlTWFya2VyICE9PSAweGZmZDgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIlNPSSBub3QgZm91bmRcIik7XG4gICAgICB9XG5cbiAgICAgIGZpbGVNYXJrZXIgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICBtYXJrZXJMb29wOiB3aGlsZSAoZmlsZU1hcmtlciAhPT0gMHhmZmQ5KSB7XG4gICAgICAgIHZhciBpLCBqLCBsO1xuXG4gICAgICAgIHN3aXRjaCAoZmlsZU1hcmtlcikge1xuICAgICAgICAgIGNhc2UgMHhmZmUwOlxuICAgICAgICAgIGNhc2UgMHhmZmUxOlxuICAgICAgICAgIGNhc2UgMHhmZmUyOlxuICAgICAgICAgIGNhc2UgMHhmZmUzOlxuICAgICAgICAgIGNhc2UgMHhmZmU0OlxuICAgICAgICAgIGNhc2UgMHhmZmU1OlxuICAgICAgICAgIGNhc2UgMHhmZmU2OlxuICAgICAgICAgIGNhc2UgMHhmZmU3OlxuICAgICAgICAgIGNhc2UgMHhmZmU4OlxuICAgICAgICAgIGNhc2UgMHhmZmU5OlxuICAgICAgICAgIGNhc2UgMHhmZmVhOlxuICAgICAgICAgIGNhc2UgMHhmZmViOlxuICAgICAgICAgIGNhc2UgMHhmZmVjOlxuICAgICAgICAgIGNhc2UgMHhmZmVkOlxuICAgICAgICAgIGNhc2UgMHhmZmVlOlxuICAgICAgICAgIGNhc2UgMHhmZmVmOlxuICAgICAgICAgIGNhc2UgMHhmZmZlOlxuICAgICAgICAgICAgdmFyIGFwcERhdGEgPSByZWFkRGF0YUJsb2NrKCk7XG5cbiAgICAgICAgICAgIGlmIChmaWxlTWFya2VyID09PSAweGZmZTApIHtcbiAgICAgICAgICAgICAgaWYgKGFwcERhdGFbMF0gPT09IDB4NGEgJiYgYXBwRGF0YVsxXSA9PT0gMHg0NiAmJiBhcHBEYXRhWzJdID09PSAweDQ5ICYmIGFwcERhdGFbM10gPT09IDB4NDYgJiYgYXBwRGF0YVs0XSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGpmaWYgPSB7XG4gICAgICAgICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIG1ham9yOiBhcHBEYXRhWzVdLFxuICAgICAgICAgICAgICAgICAgICBtaW5vcjogYXBwRGF0YVs2XVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGRlbnNpdHlVbml0czogYXBwRGF0YVs3XSxcbiAgICAgICAgICAgICAgICAgIHhEZW5zaXR5OiBhcHBEYXRhWzhdIDw8IDggfCBhcHBEYXRhWzldLFxuICAgICAgICAgICAgICAgICAgeURlbnNpdHk6IGFwcERhdGFbMTBdIDw8IDggfCBhcHBEYXRhWzExXSxcbiAgICAgICAgICAgICAgICAgIHRodW1iV2lkdGg6IGFwcERhdGFbMTJdLFxuICAgICAgICAgICAgICAgICAgdGh1bWJIZWlnaHQ6IGFwcERhdGFbMTNdLFxuICAgICAgICAgICAgICAgICAgdGh1bWJEYXRhOiBhcHBEYXRhLnN1YmFycmF5KDE0LCAxNCArIDMgKiBhcHBEYXRhWzEyXSAqIGFwcERhdGFbMTNdKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbGVNYXJrZXIgPT09IDB4ZmZlZSkge1xuICAgICAgICAgICAgICBpZiAoYXBwRGF0YVswXSA9PT0gMHg0MSAmJiBhcHBEYXRhWzFdID09PSAweDY0ICYmIGFwcERhdGFbMl0gPT09IDB4NmYgJiYgYXBwRGF0YVszXSA9PT0gMHg2MiAmJiBhcHBEYXRhWzRdID09PSAweDY1KSB7XG4gICAgICAgICAgICAgICAgYWRvYmUgPSB7XG4gICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBhcHBEYXRhWzVdIDw8IDggfCBhcHBEYXRhWzZdLFxuICAgICAgICAgICAgICAgICAgZmxhZ3MwOiBhcHBEYXRhWzddIDw8IDggfCBhcHBEYXRhWzhdLFxuICAgICAgICAgICAgICAgICAgZmxhZ3MxOiBhcHBEYXRhWzldIDw8IDggfCBhcHBEYXRhWzEwXSxcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUNvZGU6IGFwcERhdGFbMTFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHhmZmRiOlxuICAgICAgICAgICAgY29uc3QgcXVhbnRpemF0aW9uVGFibGVzTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgIHZhciBxdWFudGl6YXRpb25UYWJsZXNFbmQgPSBxdWFudGl6YXRpb25UYWJsZXNMZW5ndGggKyBvZmZzZXQgLSAyO1xuICAgICAgICAgICAgdmFyIHo7XG5cbiAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBxdWFudGl6YXRpb25UYWJsZXNFbmQpIHtcbiAgICAgICAgICAgICAgdmFyIHF1YW50aXphdGlvblRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICB2YXIgdGFibGVEYXRhID0gbmV3IFVpbnQxNkFycmF5KDY0KTtcblxuICAgICAgICAgICAgICBpZiAocXVhbnRpemF0aW9uVGFibGVTcGVjID4+IDQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgNjQ7IGorKykge1xuICAgICAgICAgICAgICAgICAgeiA9IGRjdFppZ1phZ1tqXTtcbiAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YVt6XSA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChxdWFudGl6YXRpb25UYWJsZVNwZWMgPj4gNCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICB6ID0gZGN0WmlnWmFnW2pdO1xuICAgICAgICAgICAgICAgICAgdGFibGVEYXRhW3pdID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIkRRVCAtIGludmFsaWQgdGFibGUgc3BlY1wiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHF1YW50aXphdGlvblRhYmxlc1txdWFudGl6YXRpb25UYWJsZVNwZWMgJiAxNV0gPSB0YWJsZURhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmYzA6XG4gICAgICAgICAgY2FzZSAweGZmYzE6XG4gICAgICAgICAgY2FzZSAweGZmYzI6XG4gICAgICAgICAgICBpZiAoZnJhbWUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIk9ubHkgc2luZ2xlIGZyYW1lIEpQRUdzIHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICBmcmFtZSA9IHt9O1xuICAgICAgICAgICAgZnJhbWUuZXh0ZW5kZWQgPSBmaWxlTWFya2VyID09PSAweGZmYzE7XG4gICAgICAgICAgICBmcmFtZS5wcm9ncmVzc2l2ZSA9IGZpbGVNYXJrZXIgPT09IDB4ZmZjMjtcbiAgICAgICAgICAgIGZyYW1lLnByZWNpc2lvbiA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgY29uc3Qgc29mU2NhbkxpbmVzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgIGZyYW1lLnNjYW5MaW5lcyA9IGRubFNjYW5MaW5lcyB8fCBzb2ZTY2FuTGluZXM7XG4gICAgICAgICAgICBmcmFtZS5zYW1wbGVzUGVyTGluZSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICBmcmFtZS5jb21wb25lbnRzID0gW107XG4gICAgICAgICAgICBmcmFtZS5jb21wb25lbnRJZHMgPSB7fTtcbiAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBkYXRhW29mZnNldCsrXSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRJZDtcbiAgICAgICAgICAgIHZhciBtYXhIID0gMCxcbiAgICAgICAgICAgICAgICBtYXhWID0gMDtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudElkID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICAgICAgICB2YXIgaCA9IGRhdGFbb2Zmc2V0ICsgMV0gPj4gNDtcbiAgICAgICAgICAgICAgdmFyIHYgPSBkYXRhW29mZnNldCArIDFdICYgMTU7XG5cbiAgICAgICAgICAgICAgaWYgKG1heEggPCBoKSB7XG4gICAgICAgICAgICAgICAgbWF4SCA9IGg7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAobWF4ViA8IHYpIHtcbiAgICAgICAgICAgICAgICBtYXhWID0gdjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBxSWQgPSBkYXRhW29mZnNldCArIDJdO1xuICAgICAgICAgICAgICBsID0gZnJhbWUuY29tcG9uZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBoLFxuICAgICAgICAgICAgICAgIHYsXG4gICAgICAgICAgICAgICAgcXVhbnRpemF0aW9uSWQ6IHFJZCxcbiAgICAgICAgICAgICAgICBxdWFudGl6YXRpb25UYWJsZTogbnVsbFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZnJhbWUuY29tcG9uZW50SWRzW2NvbXBvbmVudElkXSA9IGwgLSAxO1xuICAgICAgICAgICAgICBvZmZzZXQgKz0gMztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnJhbWUubWF4SCA9IG1heEg7XG4gICAgICAgICAgICBmcmFtZS5tYXhWID0gbWF4VjtcbiAgICAgICAgICAgIHByZXBhcmVDb21wb25lbnRzKGZyYW1lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmYzQ6XG4gICAgICAgICAgICBjb25zdCBodWZmbWFuTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcblxuICAgICAgICAgICAgZm9yIChpID0gMjsgaSA8IGh1ZmZtYW5MZW5ndGg7KSB7XG4gICAgICAgICAgICAgIHZhciBodWZmbWFuVGFibGVTcGVjID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICAgIHZhciBjb2RlTGVuZ3RocyA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgICAgICAgICAgdmFyIGNvZGVMZW5ndGhTdW0gPSAwO1xuXG4gICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgaisrLCBvZmZzZXQrKykge1xuICAgICAgICAgICAgICAgIGNvZGVMZW5ndGhTdW0gKz0gY29kZUxlbmd0aHNbal0gPSBkYXRhW29mZnNldF07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgaHVmZm1hblZhbHVlcyA9IG5ldyBVaW50OEFycmF5KGNvZGVMZW5ndGhTdW0pO1xuXG4gICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb2RlTGVuZ3RoU3VtOyBqKyssIG9mZnNldCsrKSB7XG4gICAgICAgICAgICAgICAgaHVmZm1hblZhbHVlc1tqXSA9IGRhdGFbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGkgKz0gMTcgKyBjb2RlTGVuZ3RoU3VtO1xuICAgICAgICAgICAgICAoaHVmZm1hblRhYmxlU3BlYyA+PiA0ID09PSAwID8gaHVmZm1hblRhYmxlc0RDIDogaHVmZm1hblRhYmxlc0FDKVtodWZmbWFuVGFibGVTcGVjICYgMTVdID0gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMsIGh1ZmZtYW5WYWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHhmZmRkOlxuICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICByZXNldEludGVydmFsID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmZGE6XG4gICAgICAgICAgICBjb25zdCBwYXJzZUROTE1hcmtlciA9ICsrbnVtU09TTWFya2VycyA9PT0gMSAmJiAhZG5sU2NhbkxpbmVzO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3JzQ291bnQgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgIHZhciBjb21wb25lbnRzID0gW10sXG4gICAgICAgICAgICAgICAgY29tcG9uZW50O1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZWN0b3JzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgY29tcG9uZW50SW5kZXggPSBmcmFtZS5jb21wb25lbnRJZHNbZGF0YVtvZmZzZXQrK11dO1xuICAgICAgICAgICAgICBjb21wb25lbnQgPSBmcmFtZS5jb21wb25lbnRzW2NvbXBvbmVudEluZGV4XTtcbiAgICAgICAgICAgICAgdmFyIHRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICBjb21wb25lbnQuaHVmZm1hblRhYmxlREMgPSBodWZmbWFuVGFibGVzRENbdGFibGVTcGVjID4+IDRdO1xuICAgICAgICAgICAgICBjb21wb25lbnQuaHVmZm1hblRhYmxlQUMgPSBodWZmbWFuVGFibGVzQUNbdGFibGVTcGVjICYgMTVdO1xuICAgICAgICAgICAgICBjb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHNwZWN0cmFsU3RhcnQgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgIHZhciBzcGVjdHJhbEVuZCA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgdmFyIHN1Y2Nlc3NpdmVBcHByb3hpbWF0aW9uID0gZGF0YVtvZmZzZXQrK107XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBwcm9jZXNzZWQgPSBkZWNvZGVTY2FuKGRhdGEsIG9mZnNldCwgZnJhbWUsIGNvbXBvbmVudHMsIHJlc2V0SW50ZXJ2YWwsIHNwZWN0cmFsU3RhcnQsIHNwZWN0cmFsRW5kLCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiA+PiA0LCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiAmIDE1LCBwYXJzZUROTE1hcmtlcik7XG4gICAgICAgICAgICAgIG9mZnNldCArPSBwcm9jZXNzZWQ7XG4gICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBETkxNYXJrZXJFcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgJHtleC5tZXNzYWdlfSAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlKGRhdGEsIHtcbiAgICAgICAgICAgICAgICAgIGRubFNjYW5MaW5lczogZXguc2NhbkxpbmVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXggaW5zdGFuY2VvZiBFT0lNYXJrZXJFcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgJHtleC5tZXNzYWdlfSAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS5gKTtcbiAgICAgICAgICAgICAgICBicmVhayBtYXJrZXJMb29wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmZGM6XG4gICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmZmY6XG4gICAgICAgICAgICBpZiAoZGF0YVtvZmZzZXRdICE9PSAweGZmKSB7XG4gICAgICAgICAgICAgIG9mZnNldC0tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBuZXh0RmlsZU1hcmtlciA9IGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBvZmZzZXQgLSAyLCBvZmZzZXQgLSAzKTtcblxuICAgICAgICAgICAgaWYgKG5leHRGaWxlTWFya2VyICYmIG5leHRGaWxlTWFya2VyLmludmFsaWQpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSnBlZ0ltYWdlLnBhcnNlIC0gdW5leHBlY3RlZCBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogXCIgKyBuZXh0RmlsZU1hcmtlci5pbnZhbGlkKTtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dEZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBkYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSnBlZ0ltYWdlLnBhcnNlIC0gcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbWFnZSBkYXRhIFwiICsgXCJ3aXRob3V0IGZpbmRpbmcgYW4gRU9JIG1hcmtlciAoMHhGRkQ5KS5cIik7XG4gICAgICAgICAgICAgIGJyZWFrIG1hcmtlckxvb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoXCJKcGVnSW1hZ2UucGFyc2UgLSB1bmtub3duIG1hcmtlcjogXCIgKyBmaWxlTWFya2VyLnRvU3RyaW5nKDE2KSk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWxlTWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgfVxuXG4gICAgICB0aGlzLndpZHRoID0gZnJhbWUuc2FtcGxlc1BlckxpbmU7XG4gICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLnNjYW5MaW5lcztcbiAgICAgIHRoaXMuamZpZiA9IGpmaWY7XG4gICAgICB0aGlzLmFkb2JlID0gYWRvYmU7XG4gICAgICB0aGlzLmNvbXBvbmVudHMgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lLmNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29tcG9uZW50ID0gZnJhbWUuY29tcG9uZW50c1tpXTtcbiAgICAgICAgdmFyIHF1YW50aXphdGlvblRhYmxlID0gcXVhbnRpemF0aW9uVGFibGVzW2NvbXBvbmVudC5xdWFudGl6YXRpb25JZF07XG5cbiAgICAgICAgaWYgKHF1YW50aXphdGlvblRhYmxlKSB7XG4gICAgICAgICAgY29tcG9uZW50LnF1YW50aXphdGlvblRhYmxlID0gcXVhbnRpemF0aW9uVGFibGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbXBvbmVudHMucHVzaCh7XG4gICAgICAgICAgb3V0cHV0OiBidWlsZENvbXBvbmVudERhdGEoZnJhbWUsIGNvbXBvbmVudCksXG4gICAgICAgICAgc2NhbGVYOiBjb21wb25lbnQuaCAvIGZyYW1lLm1heEgsXG4gICAgICAgICAgc2NhbGVZOiBjb21wb25lbnQudiAvIGZyYW1lLm1heFYsXG4gICAgICAgICAgYmxvY2tzUGVyTGluZTogY29tcG9uZW50LmJsb2Nrc1BlckxpbmUsXG4gICAgICAgICAgYmxvY2tzUGVyQ29sdW1uOiBjb21wb25lbnQuYmxvY2tzUGVyQ29sdW1uXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm51bUNvbXBvbmVudHMgPSB0aGlzLmNvbXBvbmVudHMubGVuZ3RoO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgX2dldExpbmVhcml6ZWRCbG9ja0RhdGEod2lkdGgsIGhlaWdodCwgaXNTb3VyY2VQREYgPSBmYWxzZSkge1xuICAgICAgdmFyIHNjYWxlWCA9IHRoaXMud2lkdGggLyB3aWR0aCxcbiAgICAgICAgICBzY2FsZVkgPSB0aGlzLmhlaWdodCAvIGhlaWdodDtcbiAgICAgIHZhciBjb21wb25lbnQsIGNvbXBvbmVudFNjYWxlWCwgY29tcG9uZW50U2NhbGVZLCBibG9ja3NQZXJTY2FubGluZTtcbiAgICAgIHZhciB4LCB5LCBpLCBqLCBrO1xuICAgICAgdmFyIGluZGV4O1xuICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICB2YXIgb3V0cHV0O1xuICAgICAgdmFyIG51bUNvbXBvbmVudHMgPSB0aGlzLmNvbXBvbmVudHMubGVuZ3RoO1xuICAgICAgdmFyIGRhdGFMZW5ndGggPSB3aWR0aCAqIGhlaWdodCAqIG51bUNvbXBvbmVudHM7XG4gICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkYXRhTGVuZ3RoKTtcbiAgICAgIHZhciB4U2NhbGVCbG9ja09mZnNldCA9IG5ldyBVaW50MzJBcnJheSh3aWR0aCk7XG4gICAgICB2YXIgbWFzazNMU0IgPSAweGZmZmZmZmY4O1xuICAgICAgbGV0IGxhc3RDb21wb25lbnRTY2FsZVg7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1Db21wb25lbnRzOyBpKyspIHtcbiAgICAgICAgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzW2ldO1xuICAgICAgICBjb21wb25lbnRTY2FsZVggPSBjb21wb25lbnQuc2NhbGVYICogc2NhbGVYO1xuICAgICAgICBjb21wb25lbnRTY2FsZVkgPSBjb21wb25lbnQuc2NhbGVZICogc2NhbGVZO1xuICAgICAgICBvZmZzZXQgPSBpO1xuICAgICAgICBvdXRwdXQgPSBjb21wb25lbnQub3V0cHV0O1xuICAgICAgICBibG9ja3NQZXJTY2FubGluZSA9IGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lICsgMSA8PCAzO1xuXG4gICAgICAgIGlmIChjb21wb25lbnRTY2FsZVggIT09IGxhc3RDb21wb25lbnRTY2FsZVgpIHtcbiAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgaiA9IDAgfCB4ICogY29tcG9uZW50U2NhbGVYO1xuICAgICAgICAgICAgeFNjYWxlQmxvY2tPZmZzZXRbeF0gPSAoaiAmIG1hc2szTFNCKSA8PCAzIHwgaiAmIDc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGFzdENvbXBvbmVudFNjYWxlWCA9IGNvbXBvbmVudFNjYWxlWDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgIGogPSAwIHwgeSAqIGNvbXBvbmVudFNjYWxlWTtcbiAgICAgICAgICBpbmRleCA9IGJsb2Nrc1BlclNjYW5saW5lICogKGogJiBtYXNrM0xTQikgfCAoaiAmIDcpIDw8IDM7XG5cbiAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgZGF0YVtvZmZzZXRdID0gb3V0cHV0W2luZGV4ICsgeFNjYWxlQmxvY2tPZmZzZXRbeF1dO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IG51bUNvbXBvbmVudHM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCB0cmFuc2Zvcm0gPSB0aGlzLl9kZWNvZGVUcmFuc2Zvcm07XG5cbiAgICAgIGlmICghaXNTb3VyY2VQREYgJiYgbnVtQ29tcG9uZW50cyA9PT0gNCAmJiAhdHJhbnNmb3JtKSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IG5ldyBJbnQzMkFycmF5KFstMjU2LCAyNTUsIC0yNTYsIDI1NSwgLTI1NiwgMjU1LCAtMjU2LCAyNTVdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDspIHtcbiAgICAgICAgICBmb3IgKGogPSAwLCBrID0gMDsgaiA8IG51bUNvbXBvbmVudHM7IGorKywgaSsrLCBrICs9IDIpIHtcbiAgICAgICAgICAgIGRhdGFbaV0gPSAoZGF0YVtpXSAqIHRyYW5zZm9ybVtrXSA+PiA4KSArIHRyYW5zZm9ybVtrICsgMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG5cbiAgICBnZXQgX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKCkge1xuICAgICAgaWYgKHRoaXMuYWRvYmUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5hZG9iZS50cmFuc2Zvcm1Db2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5udW1Db21wb25lbnRzID09PSAzKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb2xvclRyYW5zZm9ybSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29sb3JUcmFuc2Zvcm0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgX2NvbnZlcnRZY2NUb1JnYjogZnVuY3Rpb24gY29udmVydFljY1RvUmdiKGRhdGEpIHtcbiAgICAgIHZhciBZLCBDYiwgQ3I7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIFkgPSBkYXRhW2ldO1xuICAgICAgICBDYiA9IGRhdGFbaSArIDFdO1xuICAgICAgICBDciA9IGRhdGFbaSArIDJdO1xuICAgICAgICBkYXRhW2ldID0gWSAtIDE3OS40NTYgKyAxLjQwMiAqIENyO1xuICAgICAgICBkYXRhW2kgKyAxXSA9IFkgKyAxMzUuNDU5IC0gMC4zNDQgKiBDYiAtIDAuNzE0ICogQ3I7XG4gICAgICAgIGRhdGFbaSArIDJdID0gWSAtIDIyNi44MTYgKyAxLjc3MiAqIENiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIF9jb252ZXJ0WWNja1RvUmdiOiBmdW5jdGlvbiBjb252ZXJ0WWNja1RvUmdiKGRhdGEpIHtcbiAgICAgIHZhciBZLCBDYiwgQ3IsIGs7XG4gICAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgWSA9IGRhdGFbaV07XG4gICAgICAgIENiID0gZGF0YVtpICsgMV07XG4gICAgICAgIENyID0gZGF0YVtpICsgMl07XG4gICAgICAgIGsgPSBkYXRhW2kgKyAzXTtcbiAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAtMTIyLjY3MTk1NDA2ODk0ICsgQ2IgKiAoLTYuNjA2MzU2Njk0MjAzNjRlLTUgKiBDYiArIDAuMDAwNDM3MTMwNDc1OTI2MjMyICogQ3IgLSA1LjQwODA2MTAwNjQ1OTllLTUgKiBZICsgMC4wMDA0ODQ0OTc5NzEyMDI4MSAqIGsgLSAwLjE1NDM2MjE1MTg3MTEyNikgKyBDciAqICgtMC4wMDA5NTc5NjQzNzg0NDU3NzMgKiBDciArIDAuMDAwODE3MDc2OTExMzQ2NjI1ICogWSAtIDAuMDA0NzcyNzE0MDU0MDg3NDcgKiBrICsgMS41MzM4MDI1MzIyMTczNCkgKyBZICogKDAuMDAwOTYxMjUwMTg0MTMwNjg4ICogWSAtIDAuMDAyNjYyNTczMzIyODM5MzMgKiBrICsgMC40ODM1NzA4ODQ1MTI2NSkgKyBrICogKC0wLjAwMDMzNjE5NzE3NzYxODM5NCAqIGsgKyAwLjQ4NDc5MTU2MTQ5MDc3Nik7XG4gICAgICAgIGRhdGFbb2Zmc2V0KytdID0gMTA3LjI2ODAzOTM5NzcyNCArIENiICogKDIuMTk5MjcxMDQ1MjU3NDFlLTUgKiBDYiAtIDAuMDAwNjQwOTkyMDE4Mjk3OTQ1ICogQ3IgKyAwLjAwMDY1OTM5NzAwMTI0NTU3NyAqIFkgKyAwLjAwMDQyNjEwNTY1MjkzODgzNyAqIGsgLSAwLjE3NjQ5MTc5MjQ2Mjg3NSkgKyBDciAqICgtMC4wMDA3NzgyNjk5NDE1MTM2ODMgKiBDciArIDAuMDAxMzA4NzIyNjE0MDgyNzUgKiBZICsgMC4wMDA3NzA0ODI2MzE4MDExMzIgKiBrIC0gMC4xNTEwNTE0OTI3NzU1NjIpICsgWSAqICgwLjAwMTI2OTM1MzY4MTE0ODQzICogWSAtIDAuMDAyNjUwOTAxODkwMTA4OTggKiBrICsgMC4yNTgwMjkxMDIwNjg0NSkgKyBrICogKC0wLjAwMDMxODkxMzExNzU4ODMyOCAqIGsgLSAwLjIxMzc0MjQwMDMyMzY2NSk7XG4gICAgICAgIGRhdGFbb2Zmc2V0KytdID0gLTIwLjgxMDAxMjU0Njk0NyArIENiICogKC0wLjAwMDU3MDExNTE5Njk3MzY3NyAqIENiIC0gMi42MzQwOTA1MTAwNDU4OWUtNSAqIENyICsgMC4wMDIwNzQxMDg4MTE1MDEyICogWSAtIDAuMDAyODgyNjAyMzY4NTM0NDIgKiBrICsgMC44MTQyNzI5NjgzNTkyOTUpICsgQ3IgKiAoLTEuNTM0OTYwNTc0NDA5NzVlLTUgKiBDciAtIDAuMDAwMTMyNjg5MDQzOTYxNDQ2ICogWSArIDAuMDAwNTYwODMzNjkxMjQyODEyICogayAtIDAuMTk1MTUyMDI3NTM0MDQ5KSArIFkgKiAoMC4wMDE3NDQxODEzMjkyNzU4MiAqIFkgLSAwLjAwMjU1MjQzMzIxNDM5MzQ3ICogayArIDAuMTE2OTM1MDIwNDY1MTQ1KSArIGsgKiAoLTAuMDAwMzQzNTMxOTk2NTEwNTU1ICogayArIDAuMjQxNjUyNjAyMzI0MDcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YS5zdWJhcnJheSgwLCBvZmZzZXQpO1xuICAgIH0sXG4gICAgX2NvbnZlcnRZY2NrVG9DbXlrOiBmdW5jdGlvbiBjb252ZXJ0WWNja1RvQ215ayhkYXRhKSB7XG4gICAgICB2YXIgWSwgQ2IsIENyO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZGF0YS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICBZID0gZGF0YVtpXTtcbiAgICAgICAgQ2IgPSBkYXRhW2kgKyAxXTtcbiAgICAgICAgQ3IgPSBkYXRhW2kgKyAyXTtcbiAgICAgICAgZGF0YVtpXSA9IDQzNC40NTYgLSBZIC0gMS40MDIgKiBDcjtcbiAgICAgICAgZGF0YVtpICsgMV0gPSAxMTkuNTQxIC0gWSArIDAuMzQ0ICogQ2IgKyAwLjcxNCAqIENyO1xuICAgICAgICBkYXRhW2kgKyAyXSA9IDQ4MS44MTYgLSBZIC0gMS43NzIgKiBDYjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgICBfY29udmVydENteWtUb1JnYjogZnVuY3Rpb24gY29udmVydENteWtUb1JnYihkYXRhKSB7XG4gICAgICB2YXIgYywgbSwgeSwgaztcbiAgICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZGF0YS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICBjID0gZGF0YVtpXTtcbiAgICAgICAgbSA9IGRhdGFbaSArIDFdO1xuICAgICAgICB5ID0gZGF0YVtpICsgMl07XG4gICAgICAgIGsgPSBkYXRhW2kgKyAzXTtcbiAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgKyBjICogKC0wLjAwMDA2NzQ3MTQ3MDczNjAyNDQxICogYyArIDAuMDAwODM3OTI2MjEyMTAxMzcyNyAqIG0gKyAwLjAwMDI4OTQ3MTgxODg2NDMyOTQgKiB5ICsgMC4wMDMyNjQyMzEwNTc1Mzc4MDYgKiBrIC0gMS4xMTg1NjExODY3MjAzOTM3KSArIG0gKiAoMC4wMDAwMjYzNzQxMDc2MTYwODk0MDUgKiBtIC0gMC4wMDAwODYyNjk0OTE1ODYzODU3MiAqIHkgLSAwLjAwMDI3NDg3NjkwNjc0OTk0OTEgKiBrIC0gMC4wMjE1NTY4ODc5NDk3ODk2NykgKyB5ICogKC0wLjAwMDAzODc4MDk5MjEyODY5MzYzICogeSAtIDAuMDAwMzI2NzgwODI3OTQ4NTI4NiAqIGsgKyAwLjA2ODY3NDIyMzg1OTUzNDUpIC0gayAqICgwLjAwMDMzNjE5NzE3NzYxODM5MzcgKiBrICsgMC43NDMwNjU5MTUxMzQyMjU0KTtcbiAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgKyBjICogKDAuMDAwMTM1OTYzNzI4MTM1ODg4NDggKiBjICsgMC4wMDA5MjQ1MzcxMzI1NzM1ODUgKiBtICsgMC4wMDAxMDU2NzM1OTYxODY4MzU5MyAqIHkgKyAwLjAwMDQ3OTE4NjQ2ODc0MzY1MTIgKiBrIC0gMC4zMTA5Njg5NTg3NTE1ODc1KSArIG0gKiAoLTAuMDAwMjM1NDUzNDYxMDgzNzAzNDQgKiBtICsgMC4wMDAyNzAyODQ1MjUzNTM0NzE0ICogeSArIDAuMDAyMDIwMDMwODk3NzMwNzE1NiAqIGsgLSAwLjc0ODgwNTIxNjcwMTU0OTQpICsgeSAqICgwLjAwMDA2ODM0ODE1OTk4MjM1NjYyICogeSArIDAuMDAwMTUxNjg0NTIzNjM0NjA5NzMgKiBrIC0gMC4wOTc1MTkyNzc3NDcyODkzMykgLSBrICogKDAuMDAwMzE4OTEzMTE3NTg4MzI4MTQgKiBrICsgMC43MzY0ODgzODA3NzMzMTY4KTtcbiAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgKyBjICogKDAuMDAwMDEzNTk4NjUwNDExMzg1MzA3ICogYyArIDAuMDAwMTI0MjM5NTYxNzU0OTA4NTEgKiBtICsgMC4wMDA0NzUxOTg1MDk3NTgzNTg5ICogeSAtIDAuMDAwMDAzNjcyOTMxNzQ3NjYzMDQyMiAqIGsgLSAwLjA1NTYyMTg2OTgwMjY0MDM0KSArIG0gKiAoMC4wMDAxNjE0MTM4MDU5ODcyNDY3NiAqIG0gKyAwLjAwMDk2OTIyMzkxMzA3MjUxODYgKiB5ICsgMC4wMDA3NzgyNjkyNDUwMDM2MjUzICogayAtIDAuNDQwMTUyMzIzNjc1MjY0NjMpICsgeSAqICg1LjA2ODg4MjkxNDA2ODc2OWUtNyAqIHkgKyAwLjAwMTc3NzgzNjkwMTEzNzUwNzEgKiBrIC0gMC43NTkxNDU0NjQ5NzQ5NjA5KSAtIGsgKiAoMC4wMDAzNDM1MzE5OTY1MTA1NTUzICogayArIDAuNzA2Mzc3MDE4NjE2MDE0NCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhLnN1YmFycmF5KDAsIG9mZnNldCk7XG4gICAgfSxcblxuICAgIGdldERhdGEoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBmb3JjZVJHQiA9IGZhbHNlLFxuICAgICAgaXNTb3VyY2VQREYgPSBmYWxzZVxuICAgIH0pIHtcbiAgICAgIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPiA0KSB7XG4gICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoXCJVbnN1cHBvcnRlZCBjb2xvciBtb2RlXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX2dldExpbmVhcml6ZWRCbG9ja0RhdGEod2lkdGgsIGhlaWdodCwgaXNTb3VyY2VQREYpO1xuXG4gICAgICBpZiAodGhpcy5udW1Db21wb25lbnRzID09PSAxICYmIGZvcmNlUkdCKSB7XG4gICAgICAgIHZhciBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciByZ2JEYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGFMZW5ndGggKiAzKTtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZ3JheUNvbG9yID0gZGF0YVtpXTtcbiAgICAgICAgICByZ2JEYXRhW29mZnNldCsrXSA9IGdyYXlDb2xvcjtcbiAgICAgICAgICByZ2JEYXRhW29mZnNldCsrXSA9IGdyYXlDb2xvcjtcbiAgICAgICAgICByZ2JEYXRhW29mZnNldCsrXSA9IGdyYXlDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZ2JEYXRhO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDMgJiYgdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihkYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5udW1Db21wb25lbnRzID09PSA0KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCkge1xuICAgICAgICAgIGlmIChmb3JjZVJHQikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NrVG9SZ2IoZGF0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NrVG9DbXlrKGRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcmNlUkdCKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2IoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBKcGVnSW1hZ2U7XG59KCk7XG5cbmV4cG9ydHMuSnBlZ0ltYWdlID0gSnBlZ0ltYWdlO1xuXG4vKioqLyB9KSxcbi8qIDIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkpweFN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF9qcHggPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIxKTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgSnB4U3RyZWFtID0gZnVuY3Rpb24gSnB4U3RyZWFtQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gSnB4U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIGRpY3QsIHBhcmFtcykge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMubWF5YmVMZW5ndGggPSBtYXliZUxlbmd0aDtcbiAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuXG4gICAgX3N0cmVhbS5EZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gIH1cblxuICBKcHhTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShfc3RyZWFtLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnB4U3RyZWFtLnByb3RvdHlwZSwgXCJieXRlc1wiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBKcHhTdHJlYW1fYnl0ZXMoKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJieXRlc1wiLCB0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSk7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG5cbiAgSnB4U3RyZWFtLnByb3RvdHlwZS5lbnN1cmVCdWZmZXIgPSBmdW5jdGlvbiAocmVxdWVzdGVkKSB7fTtcblxuICBKcHhTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBqcHhJbWFnZSA9IG5ldyBfanB4LkpweEltYWdlKCk7XG4gICAganB4SW1hZ2UucGFyc2UodGhpcy5ieXRlcyk7XG4gICAgY29uc3Qgd2lkdGggPSBqcHhJbWFnZS53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBqcHhJbWFnZS5oZWlnaHQ7XG4gICAgY29uc3QgY29tcG9uZW50c0NvdW50ID0ganB4SW1hZ2UuY29tcG9uZW50c0NvdW50O1xuICAgIGNvbnN0IHRpbGVDb3VudCA9IGpweEltYWdlLnRpbGVzLmxlbmd0aDtcblxuICAgIGlmICh0aWxlQ291bnQgPT09IDEpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0ganB4SW1hZ2UudGlsZXNbMF0uaXRlbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQgKiBjb21wb25lbnRzQ291bnQpO1xuXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRpbGVDb3VudDsgaysrKSB7XG4gICAgICAgIGNvbnN0IHRpbGVDb21wb25lbnRzID0ganB4SW1hZ2UudGlsZXNba107XG4gICAgICAgIGNvbnN0IHRpbGVXaWR0aCA9IHRpbGVDb21wb25lbnRzLndpZHRoO1xuICAgICAgICBjb25zdCB0aWxlSGVpZ2h0ID0gdGlsZUNvbXBvbmVudHMuaGVpZ2h0O1xuICAgICAgICBjb25zdCB0aWxlTGVmdCA9IHRpbGVDb21wb25lbnRzLmxlZnQ7XG4gICAgICAgIGNvbnN0IHRpbGVUb3AgPSB0aWxlQ29tcG9uZW50cy50b3A7XG4gICAgICAgIGNvbnN0IHNyYyA9IHRpbGVDb21wb25lbnRzLml0ZW1zO1xuICAgICAgICBsZXQgc3JjUG9zaXRpb24gPSAwO1xuICAgICAgICBsZXQgZGF0YVBvc2l0aW9uID0gKHdpZHRoICogdGlsZVRvcCArIHRpbGVMZWZ0KSAqIGNvbXBvbmVudHNDb3VudDtcbiAgICAgICAgY29uc3QgaW1nUm93U2l6ZSA9IHdpZHRoICogY29tcG9uZW50c0NvdW50O1xuICAgICAgICBjb25zdCB0aWxlUm93U2l6ZSA9IHRpbGVXaWR0aCAqIGNvbXBvbmVudHNDb3VudDtcblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRpbGVIZWlnaHQ7IGorKykge1xuICAgICAgICAgIGNvbnN0IHJvd0J5dGVzID0gc3JjLnN1YmFycmF5KHNyY1Bvc2l0aW9uLCBzcmNQb3NpdGlvbiArIHRpbGVSb3dTaXplKTtcbiAgICAgICAgICBkYXRhLnNldChyb3dCeXRlcywgZGF0YVBvc2l0aW9uKTtcbiAgICAgICAgICBzcmNQb3NpdGlvbiArPSB0aWxlUm93U2l6ZTtcbiAgICAgICAgICBkYXRhUG9zaXRpb24gKz0gaW1nUm93U2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gICAgdGhpcy5lb2YgPSB0cnVlO1xuICB9O1xuXG4gIHJldHVybiBKcHhTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuSnB4U3RyZWFtID0gSnB4U3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkpweEltYWdlID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG52YXIgX2FyaXRobWV0aWNfZGVjb2RlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMTcpO1xuXG5jbGFzcyBKcHhFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihgSlBYIGVycm9yOiAke21zZ31gKTtcbiAgfVxuXG59XG5cbnZhciBKcHhJbWFnZSA9IGZ1bmN0aW9uIEpweEltYWdlQ2xvc3VyZSgpIHtcbiAgdmFyIFN1YmJhbmRzR2FpbkxvZzIgPSB7XG4gICAgTEw6IDAsXG4gICAgTEg6IDEsXG4gICAgSEw6IDEsXG4gICAgSEg6IDJcbiAgfTtcblxuICBmdW5jdGlvbiBKcHhJbWFnZSgpIHtcbiAgICB0aGlzLmZhaWxPbkNvcnJ1cHRlZEltYWdlID0gZmFsc2U7XG4gIH1cblxuICBKcHhJbWFnZS5wcm90b3R5cGUgPSB7XG4gICAgcGFyc2U6IGZ1bmN0aW9uIEpweEltYWdlX3BhcnNlKGRhdGEpIHtcbiAgICAgIHZhciBoZWFkID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIDApO1xuXG4gICAgICBpZiAoaGVhZCA9PT0gMHhmZjRmKSB7XG4gICAgICAgIHRoaXMucGFyc2VDb2Rlc3RyZWFtKGRhdGEsIDAsIGRhdGEubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zaXRpb24gPSAwLFxuICAgICAgICAgIGxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGhlYWRlclNpemUgPSA4O1xuICAgICAgICB2YXIgbGJveCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHZhciB0Ym94ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgNCk7XG4gICAgICAgIHBvc2l0aW9uICs9IGhlYWRlclNpemU7XG5cbiAgICAgICAgaWYgKGxib3ggPT09IDEpIHtcbiAgICAgICAgICBsYm94ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKSAqIDQyOTQ5NjcyOTYgKyAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgICAgICBwb3NpdGlvbiArPSA4O1xuICAgICAgICAgIGhlYWRlclNpemUgKz0gODtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYm94ID09PSAwKSB7XG4gICAgICAgICAgbGJveCA9IGxlbmd0aCAtIHBvc2l0aW9uICsgaGVhZGVyU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYm94IDwgaGVhZGVyU2l6ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIkludmFsaWQgYm94IGZpZWxkIHNpemVcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF0YUxlbmd0aCA9IGxib3ggLSBoZWFkZXJTaXplO1xuICAgICAgICB2YXIganVtcERhdGFMZW5ndGggPSB0cnVlO1xuXG4gICAgICAgIHN3aXRjaCAodGJveCkge1xuICAgICAgICAgIGNhc2UgMHg2YTcwMzI2ODpcbiAgICAgICAgICAgIGp1bXBEYXRhTGVuZ3RoID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHg2MzZmNmM3MjpcbiAgICAgICAgICAgIHZhciBtZXRob2QgPSBkYXRhW3Bvc2l0aW9uXTtcblxuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gMSkge1xuICAgICAgICAgICAgICB2YXIgY29sb3JzcGFjZSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDMpO1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAoY29sb3JzcGFjZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5rbm93biBjb2xvcnNwYWNlIFwiICsgY29sb3JzcGFjZSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IDIpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiSUNDIHByb2ZpbGUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4NmE3MDMyNjM6XG4gICAgICAgICAgICB0aGlzLnBhcnNlQ29kZXN0cmVhbShkYXRhLCBwb3NpdGlvbiwgcG9zaXRpb24gKyBkYXRhTGVuZ3RoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweDZhNTAyMDIwOlxuICAgICAgICAgICAgaWYgKCgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbikgIT09IDB4MGQwYTg3MGEpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBKUDIgc2lnbmF0dXJlXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHg2YTUwMWExYTpcbiAgICAgICAgICBjYXNlIDB4NjY3NDc5NzA6XG4gICAgICAgICAgY2FzZSAweDcyNzI2NTcxOlxuICAgICAgICAgIGNhc2UgMHg3MjY1NzMyMDpcbiAgICAgICAgICBjYXNlIDB4Njk2ODY0NzI6XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgaGVhZGVyVHlwZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGJveCA+PiAyNCAmIDB4ZmYsIHRib3ggPj4gMTYgJiAweGZmLCB0Ym94ID4+IDggJiAweGZmLCB0Ym94ICYgMHhmZik7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbnN1cHBvcnRlZCBoZWFkZXIgdHlwZSBcIiArIHRib3ggKyBcIiAoXCIgKyBoZWFkZXJUeXBlICsgXCIpXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoanVtcERhdGFMZW5ndGgpIHtcbiAgICAgICAgICBwb3NpdGlvbiArPSBkYXRhTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJzZUltYWdlUHJvcGVydGllczogZnVuY3Rpb24gSnB4SW1hZ2VfcGFyc2VJbWFnZVByb3BlcnRpZXMoc3RyZWFtKSB7XG4gICAgICB2YXIgbmV3Qnl0ZSA9IHN0cmVhbS5nZXRCeXRlKCk7XG5cbiAgICAgIHdoaWxlIChuZXdCeXRlID49IDApIHtcbiAgICAgICAgdmFyIG9sZEJ5dGUgPSBuZXdCeXRlO1xuICAgICAgICBuZXdCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgdmFyIGNvZGUgPSBvbGRCeXRlIDw8IDggfCBuZXdCeXRlO1xuXG4gICAgICAgIGlmIChjb2RlID09PSAweGZmNTEpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcCg0KTtcbiAgICAgICAgICB2YXIgWHNpeiA9IHN0cmVhbS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgIHZhciBZc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgdmFyIFhPc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgdmFyIFlPc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgc3RyZWFtLnNraXAoMTYpO1xuICAgICAgICAgIHZhciBDc2l6ID0gc3RyZWFtLmdldFVpbnQxNigpO1xuICAgICAgICAgIHRoaXMud2lkdGggPSBYc2l6IC0gWE9zaXo7XG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSBZc2l6IC0gWU9zaXo7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRzQ291bnQgPSBDc2l6O1xuICAgICAgICAgIHRoaXMuYml0c1BlckNvbXBvbmVudCA9IDg7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW1cIik7XG4gICAgfSxcbiAgICBwYXJzZUNvZGVzdHJlYW06IGZ1bmN0aW9uIEpweEltYWdlX3BhcnNlQ29kZXN0cmVhbShkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgdmFyIGRvTm90UmVjb3ZlciA9IGZhbHNlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBzdGFydDtcblxuICAgICAgICB3aGlsZSAocG9zaXRpb24gKyAxIDwgZW5kKSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgICAgdmFyIGxlbmd0aCA9IDAsXG4gICAgICAgICAgICAgIGosXG4gICAgICAgICAgICAgIHNxY2QsXG4gICAgICAgICAgICAgIHNwcWNkcyxcbiAgICAgICAgICAgICAgc3BxY2RTaXplLFxuICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQsXG4gICAgICAgICAgICAgIHRpbGU7XG5cbiAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgMHhmZjRmOlxuICAgICAgICAgICAgICBjb250ZXh0Lm1haW5IZWFkZXIgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweGZmZDk6XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4ZmY1MTpcbiAgICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgdmFyIHNpeiA9IHt9O1xuICAgICAgICAgICAgICBzaXouWHNpeiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDQpO1xuICAgICAgICAgICAgICBzaXouWXNpeiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDgpO1xuICAgICAgICAgICAgICBzaXouWE9zaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAxMik7XG4gICAgICAgICAgICAgIHNpei5ZT3NpeiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDE2KTtcbiAgICAgICAgICAgICAgc2l6LlhUc2l6ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgMjApO1xuICAgICAgICAgICAgICBzaXouWVRzaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyNCk7XG4gICAgICAgICAgICAgIHNpei5YVE9zaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyOCk7XG4gICAgICAgICAgICAgIHNpei5ZVE9zaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAzMik7XG4gICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24gKyAzNik7XG4gICAgICAgICAgICAgIHNpei5Dc2l6ID0gY29tcG9uZW50c0NvdW50O1xuICAgICAgICAgICAgICB2YXIgY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgICBqID0gcG9zaXRpb24gKyAzODtcblxuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHtcbiAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogKGRhdGFbal0gJiAweDdmKSArIDEsXG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZDogISEoZGF0YVtqXSAmIDB4ODApLFxuICAgICAgICAgICAgICAgICAgWFJzaXo6IGRhdGFbaiArIDFdLFxuICAgICAgICAgICAgICAgICAgWVJzaXo6IGRhdGFbaiArIDJdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBqICs9IDM7XG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlQ29tcG9uZW50RGltZW5zaW9ucyhjb21wb25lbnQsIHNpeik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb250ZXh0LlNJWiA9IHNpejtcbiAgICAgICAgICAgICAgY29udGV4dC5jb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgICAgICAgICAgICAgY2FsY3VsYXRlVGlsZUdyaWRzKGNvbnRleHQsIGNvbXBvbmVudHMpO1xuICAgICAgICAgICAgICBjb250ZXh0LlFDQyA9IFtdO1xuICAgICAgICAgICAgICBjb250ZXh0LkNPQyA9IFtdO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweGZmNWM6XG4gICAgICAgICAgICAgIGxlbmd0aCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgIHZhciBxY2QgPSB7fTtcbiAgICAgICAgICAgICAgaiA9IHBvc2l0aW9uICsgMjtcbiAgICAgICAgICAgICAgc3FjZCA9IGRhdGFbaisrXTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHNxY2QgJiAweDFmKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gODtcbiAgICAgICAgICAgICAgICAgIHNjYWxhckV4cG91bmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDE2O1xuICAgICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDE2O1xuICAgICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgU1FjZCB2YWx1ZSBcIiArIHNxY2QpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcWNkLm5vUXVhbnRpemF0aW9uID0gc3BxY2RTaXplID09PSA4O1xuICAgICAgICAgICAgICBxY2Quc2NhbGFyRXhwb3VuZGVkID0gc2NhbGFyRXhwb3VuZGVkO1xuICAgICAgICAgICAgICBxY2QuZ3VhcmRCaXRzID0gc3FjZCA+PiA1O1xuICAgICAgICAgICAgICBzcHFjZHMgPSBbXTtcblxuICAgICAgICAgICAgICB3aGlsZSAoaiA8IGxlbmd0aCArIHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNwcWNkID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoc3BxY2RTaXplID09PSA4KSB7XG4gICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqKytdID4+IDM7XG4gICAgICAgICAgICAgICAgICBzcHFjZC5tdSA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNwcWNkLmVwc2lsb24gPSBkYXRhW2pdID4+IDM7XG4gICAgICAgICAgICAgICAgICBzcHFjZC5tdSA9IChkYXRhW2pdICYgMHg3KSA8PCA4IHwgZGF0YVtqICsgMV07XG4gICAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3BxY2RzLnB1c2goc3BxY2QpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcWNkLlNQcWNkcyA9IHNwcWNkcztcblxuICAgICAgICAgICAgICBpZiAoY29udGV4dC5tYWluSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5RQ0QgPSBxY2Q7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5RQ0QgPSBxY2Q7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5RQ0MgPSBbXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4ZmY1ZDpcbiAgICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgdmFyIHFjYyA9IHt9O1xuICAgICAgICAgICAgICBqID0gcG9zaXRpb24gKyAyO1xuICAgICAgICAgICAgICB2YXIgY3FjYztcblxuICAgICAgICAgICAgICBpZiAoY29udGV4dC5TSVouQ3NpeiA8IDI1Nykge1xuICAgICAgICAgICAgICAgIGNxY2MgPSBkYXRhW2orK107XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3FjYyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBqKTtcbiAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzcWNkID0gZGF0YVtqKytdO1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAoc3FjZCAmIDB4MWYpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICBzcHFjZFNpemUgPSA4O1xuICAgICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBTUWNkIHZhbHVlIFwiICsgc3FjZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBxY2Mubm9RdWFudGl6YXRpb24gPSBzcHFjZFNpemUgPT09IDg7XG4gICAgICAgICAgICAgIHFjYy5zY2FsYXJFeHBvdW5kZWQgPSBzY2FsYXJFeHBvdW5kZWQ7XG4gICAgICAgICAgICAgIHFjYy5ndWFyZEJpdHMgPSBzcWNkID4+IDU7XG4gICAgICAgICAgICAgIHNwcWNkcyA9IFtdO1xuXG4gICAgICAgICAgICAgIHdoaWxlIChqIDwgbGVuZ3RoICsgcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBzcHFjZCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHNwcWNkU2l6ZSA9PT0gOCkge1xuICAgICAgICAgICAgICAgICAgc3BxY2QuZXBzaWxvbiA9IGRhdGFbaisrXSA+PiAzO1xuICAgICAgICAgICAgICAgICAgc3BxY2QubXUgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqXSA+PiAzO1xuICAgICAgICAgICAgICAgICAgc3BxY2QubXUgPSAoZGF0YVtqXSAmIDB4NykgPDwgOCB8IGRhdGFbaiArIDFdO1xuICAgICAgICAgICAgICAgICAgaiArPSAyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNwcWNkcy5wdXNoKHNwcWNkKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHFjYy5TUHFjZHMgPSBzcHFjZHM7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWFpbkhlYWRlcikge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuUUNDW2NxY2NdID0gcWNjO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUuUUNDW2NxY2NdID0gcWNjO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHhmZjUyOlxuICAgICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICB2YXIgY29kID0ge307XG4gICAgICAgICAgICAgIGogPSBwb3NpdGlvbiArIDI7XG4gICAgICAgICAgICAgIHZhciBzY29kID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICBjb2QuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cyA9ICEhKHNjb2QgJiAxKTtcbiAgICAgICAgICAgICAgY29kLnNvcE1hcmtlclVzZWQgPSAhIShzY29kICYgMik7XG4gICAgICAgICAgICAgIGNvZC5lcGhNYXJrZXJVc2VkID0gISEoc2NvZCAmIDQpO1xuICAgICAgICAgICAgICBjb2QucHJvZ3Jlc3Npb25PcmRlciA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgICAgY29kLmxheWVyc0NvdW50ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIGopO1xuICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgIGNvZC5tdWx0aXBsZUNvbXBvbmVudFRyYW5zZm9ybSA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgICAgY29kLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgICAgY29kLnhjYiA9IChkYXRhW2orK10gJiAweGYpICsgMjtcbiAgICAgICAgICAgICAgY29kLnljYiA9IChkYXRhW2orK10gJiAweGYpICsgMjtcbiAgICAgICAgICAgICAgdmFyIGJsb2NrU3R5bGUgPSBkYXRhW2orK107XG4gICAgICAgICAgICAgIGNvZC5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzID0gISEoYmxvY2tTdHlsZSAmIDEpO1xuICAgICAgICAgICAgICBjb2QucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcyA9ICEhKGJsb2NrU3R5bGUgJiAyKTtcbiAgICAgICAgICAgICAgY29kLnRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyA9ICEhKGJsb2NrU3R5bGUgJiA0KTtcbiAgICAgICAgICAgICAgY29kLnZlcnRpY2FsbHlTdHJpcGUgPSAhIShibG9ja1N0eWxlICYgOCk7XG4gICAgICAgICAgICAgIGNvZC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uID0gISEoYmxvY2tTdHlsZSAmIDE2KTtcbiAgICAgICAgICAgICAgY29kLnNlZ21lbnRhdGlvblN5bWJvbFVzZWQgPSAhIShibG9ja1N0eWxlICYgMzIpO1xuICAgICAgICAgICAgICBjb2QucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uID0gZGF0YVtqKytdO1xuXG4gICAgICAgICAgICAgIGlmIChjb2QuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cykge1xuICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdHNTaXplcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGogPCBsZW5ndGggKyBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgdmFyIHByZWNpbmN0c1NpemUgPSBkYXRhW2orK107XG4gICAgICAgICAgICAgICAgICBwcmVjaW5jdHNTaXplcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgUFB4OiBwcmVjaW5jdHNTaXplICYgMHhmLFxuICAgICAgICAgICAgICAgICAgICBQUHk6IHByZWNpbmN0c1NpemUgPj4gNFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29kLnByZWNpbmN0c1NpemVzID0gcHJlY2luY3RzU2l6ZXM7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgdW5zdXBwb3J0ZWQgPSBbXTtcblxuICAgICAgICAgICAgICBpZiAoY29kLnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MpIHtcbiAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKFwic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzc1wiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjb2QucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcykge1xuICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkLnB1c2goXCJyZXNldENvbnRleHRQcm9iYWJpbGl0aWVzXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNvZC50ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3MpIHtcbiAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKFwidGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNvZC52ZXJ0aWNhbGx5U3RyaXBlKSB7XG4gICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQucHVzaChcInZlcnRpY2FsbHlTdHJpcGVcIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY29kLnByZWRpY3RhYmxlVGVybWluYXRpb24pIHtcbiAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKFwicHJlZGljdGFibGVUZXJtaW5hdGlvblwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh1bnN1cHBvcnRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZG9Ob3RSZWNvdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBDT0Qgb3B0aW9ucyAoXCIgKyB1bnN1cHBvcnRlZC5qb2luKFwiLCBcIikgKyBcIilcIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY29udGV4dC5tYWluSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5DT0QgPSBjb2Q7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5DT0QgPSBjb2Q7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5DT0MgPSBbXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4ZmY5MDpcbiAgICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgdGlsZSA9IHt9O1xuICAgICAgICAgICAgICB0aWxlLmluZGV4ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uICsgMik7XG4gICAgICAgICAgICAgIHRpbGUubGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgNCk7XG4gICAgICAgICAgICAgIHRpbGUuZGF0YUVuZCA9IHRpbGUubGVuZ3RoICsgcG9zaXRpb24gLSAyO1xuICAgICAgICAgICAgICB0aWxlLnBhcnRJbmRleCA9IGRhdGFbcG9zaXRpb24gKyA4XTtcbiAgICAgICAgICAgICAgdGlsZS5wYXJ0c0NvdW50ID0gZGF0YVtwb3NpdGlvbiArIDldO1xuICAgICAgICAgICAgICBjb250ZXh0Lm1haW5IZWFkZXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgICBpZiAodGlsZS5wYXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aWxlLkNPRCA9IGNvbnRleHQuQ09EO1xuICAgICAgICAgICAgICAgIHRpbGUuQ09DID0gY29udGV4dC5DT0Muc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgdGlsZS5RQ0QgPSBjb250ZXh0LlFDRDtcbiAgICAgICAgICAgICAgICB0aWxlLlFDQyA9IGNvbnRleHQuUUNDLnNsaWNlKDApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZSA9IHRpbGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4ZmY5MzpcbiAgICAgICAgICAgICAgdGlsZSA9IGNvbnRleHQuY3VycmVudFRpbGU7XG5cbiAgICAgICAgICAgICAgaWYgKHRpbGUucGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVRpbGUoY29udGV4dCwgdGlsZS5pbmRleCk7XG4gICAgICAgICAgICAgICAgYnVpbGRQYWNrZXRzKGNvbnRleHQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGVuZ3RoID0gdGlsZS5kYXRhRW5kIC0gcG9zaXRpb247XG4gICAgICAgICAgICAgIHBhcnNlVGlsZVBhY2tldHMoY29udGV4dCwgZGF0YSwgcG9zaXRpb24sIGxlbmd0aCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4ZmY1NTpcbiAgICAgICAgICAgIGNhc2UgMHhmZjU3OlxuICAgICAgICAgICAgY2FzZSAweGZmNTg6XG4gICAgICAgICAgICBjYXNlIDB4ZmY2NDpcbiAgICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHhmZjUzOlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2Rlc3RyZWFtIGNvZGUgMHhGRjUzIChDT0MpIGlzIG5vdCBpbXBsZW1lbnRlZFwiKTtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6IFwiICsgY29kZS50b1N0cmluZygxNikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZG9Ob3RSZWNvdmVyIHx8IHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206IFwiICsgZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRpbGVzID0gdHJhbnNmb3JtQ29tcG9uZW50cyhjb250ZXh0KTtcbiAgICAgIHRoaXMud2lkdGggPSBjb250ZXh0LlNJWi5Yc2l6IC0gY29udGV4dC5TSVouWE9zaXo7XG4gICAgICB0aGlzLmhlaWdodCA9IGNvbnRleHQuU0laLllzaXogLSBjb250ZXh0LlNJWi5ZT3NpejtcbiAgICAgIHRoaXMuY29tcG9uZW50c0NvdW50ID0gY29udGV4dC5TSVouQ3NpejtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gY2FsY3VsYXRlQ29tcG9uZW50RGltZW5zaW9ucyhjb21wb25lbnQsIHNpeikge1xuICAgIGNvbXBvbmVudC54MCA9IE1hdGguY2VpbChzaXouWE9zaXogLyBjb21wb25lbnQuWFJzaXopO1xuICAgIGNvbXBvbmVudC54MSA9IE1hdGguY2VpbChzaXouWHNpeiAvIGNvbXBvbmVudC5YUnNpeik7XG4gICAgY29tcG9uZW50LnkwID0gTWF0aC5jZWlsKHNpei5ZT3NpeiAvIGNvbXBvbmVudC5ZUnNpeik7XG4gICAgY29tcG9uZW50LnkxID0gTWF0aC5jZWlsKHNpei5Zc2l6IC8gY29tcG9uZW50LllSc2l6KTtcbiAgICBjb21wb25lbnQud2lkdGggPSBjb21wb25lbnQueDEgLSBjb21wb25lbnQueDA7XG4gICAgY29tcG9uZW50LmhlaWdodCA9IGNvbXBvbmVudC55MSAtIGNvbXBvbmVudC55MDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZVRpbGVHcmlkcyhjb250ZXh0LCBjb21wb25lbnRzKSB7XG4gICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgIHZhciB0aWxlLFxuICAgICAgICB0aWxlcyA9IFtdO1xuICAgIHZhciBudW1YdGlsZXMgPSBNYXRoLmNlaWwoKHNpei5Yc2l6IC0gc2l6LlhUT3NpeikgLyBzaXouWFRzaXopO1xuICAgIHZhciBudW1ZdGlsZXMgPSBNYXRoLmNlaWwoKHNpei5Zc2l6IC0gc2l6LllUT3NpeikgLyBzaXouWVRzaXopO1xuXG4gICAgZm9yICh2YXIgcSA9IDA7IHEgPCBudW1ZdGlsZXM7IHErKykge1xuICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBudW1YdGlsZXM7IHArKykge1xuICAgICAgICB0aWxlID0ge307XG4gICAgICAgIHRpbGUudHgwID0gTWF0aC5tYXgoc2l6LlhUT3NpeiArIHAgKiBzaXouWFRzaXosIHNpei5YT3Npeik7XG4gICAgICAgIHRpbGUudHkwID0gTWF0aC5tYXgoc2l6LllUT3NpeiArIHEgKiBzaXouWVRzaXosIHNpei5ZT3Npeik7XG4gICAgICAgIHRpbGUudHgxID0gTWF0aC5taW4oc2l6LlhUT3NpeiArIChwICsgMSkgKiBzaXouWFRzaXosIHNpei5Yc2l6KTtcbiAgICAgICAgdGlsZS50eTEgPSBNYXRoLm1pbihzaXouWVRPc2l6ICsgKHEgKyAxKSAqIHNpei5ZVHNpeiwgc2l6LllzaXopO1xuICAgICAgICB0aWxlLndpZHRoID0gdGlsZS50eDEgLSB0aWxlLnR4MDtcbiAgICAgICAgdGlsZS5oZWlnaHQgPSB0aWxlLnR5MSAtIHRpbGUudHkwO1xuICAgICAgICB0aWxlLmNvbXBvbmVudHMgPSBbXTtcbiAgICAgICAgdGlsZXMucHVzaCh0aWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb250ZXh0LnRpbGVzID0gdGlsZXM7XG4gICAgdmFyIGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY29tcG9uZW50c0NvdW50OyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IHRpbGVzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgdmFyIHRpbGVDb21wb25lbnQgPSB7fTtcbiAgICAgICAgdGlsZSA9IHRpbGVzW2pdO1xuICAgICAgICB0aWxlQ29tcG9uZW50LnRjeDAgPSBNYXRoLmNlaWwodGlsZS50eDAgLyBjb21wb25lbnQuWFJzaXopO1xuICAgICAgICB0aWxlQ29tcG9uZW50LnRjeTAgPSBNYXRoLmNlaWwodGlsZS50eTAgLyBjb21wb25lbnQuWVJzaXopO1xuICAgICAgICB0aWxlQ29tcG9uZW50LnRjeDEgPSBNYXRoLmNlaWwodGlsZS50eDEgLyBjb21wb25lbnQuWFJzaXopO1xuICAgICAgICB0aWxlQ29tcG9uZW50LnRjeTEgPSBNYXRoLmNlaWwodGlsZS50eTEgLyBjb21wb25lbnQuWVJzaXopO1xuICAgICAgICB0aWxlQ29tcG9uZW50LndpZHRoID0gdGlsZUNvbXBvbmVudC50Y3gxIC0gdGlsZUNvbXBvbmVudC50Y3gwO1xuICAgICAgICB0aWxlQ29tcG9uZW50LmhlaWdodCA9IHRpbGVDb21wb25lbnQudGN5MSAtIHRpbGVDb21wb25lbnQudGN5MDtcbiAgICAgICAgdGlsZS5jb21wb25lbnRzW2ldID0gdGlsZUNvbXBvbmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCbG9ja3NEaW1lbnNpb25zKGNvbnRleHQsIGNvbXBvbmVudCwgcikge1xuICAgIHZhciBjb2RPckNvYyA9IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnM7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gICAgaWYgKCFjb2RPckNvYy5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKSB7XG4gICAgICByZXN1bHQuUFB4ID0gMTU7XG4gICAgICByZXN1bHQuUFB5ID0gMTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5QUHggPSBjb2RPckNvYy5wcmVjaW5jdHNTaXplc1tyXS5QUHg7XG4gICAgICByZXN1bHQuUFB5ID0gY29kT3JDb2MucHJlY2luY3RzU2l6ZXNbcl0uUFB5O1xuICAgIH1cblxuICAgIHJlc3VsdC54Y2JfID0gciA+IDAgPyBNYXRoLm1pbihjb2RPckNvYy54Y2IsIHJlc3VsdC5QUHggLSAxKSA6IE1hdGgubWluKGNvZE9yQ29jLnhjYiwgcmVzdWx0LlBQeCk7XG4gICAgcmVzdWx0LnljYl8gPSByID4gMCA/IE1hdGgubWluKGNvZE9yQ29jLnljYiwgcmVzdWx0LlBQeSAtIDEpIDogTWF0aC5taW4oY29kT3JDb2MueWNiLCByZXN1bHQuUFB5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRQcmVjaW5jdHMoY29udGV4dCwgcmVzb2x1dGlvbiwgZGltZW5zaW9ucykge1xuICAgIHZhciBwcmVjaW5jdFdpZHRoID0gMSA8PCBkaW1lbnNpb25zLlBQeDtcbiAgICB2YXIgcHJlY2luY3RIZWlnaHQgPSAxIDw8IGRpbWVuc2lvbnMuUFB5O1xuICAgIHZhciBpc1plcm9SZXMgPSByZXNvbHV0aW9uLnJlc0xldmVsID09PSAwO1xuICAgIHZhciBwcmVjaW5jdFdpZHRoSW5TdWJiYW5kID0gMSA8PCBkaW1lbnNpb25zLlBQeCArIChpc1plcm9SZXMgPyAwIDogLTEpO1xuICAgIHZhciBwcmVjaW5jdEhlaWdodEluU3ViYmFuZCA9IDEgPDwgZGltZW5zaW9ucy5QUHkgKyAoaXNaZXJvUmVzID8gMCA6IC0xKTtcbiAgICB2YXIgbnVtcHJlY2luY3Rzd2lkZSA9IHJlc29sdXRpb24udHJ4MSA+IHJlc29sdXRpb24udHJ4MCA/IE1hdGguY2VpbChyZXNvbHV0aW9uLnRyeDEgLyBwcmVjaW5jdFdpZHRoKSAtIE1hdGguZmxvb3IocmVzb2x1dGlvbi50cngwIC8gcHJlY2luY3RXaWR0aCkgOiAwO1xuICAgIHZhciBudW1wcmVjaW5jdHNoaWdoID0gcmVzb2x1dGlvbi50cnkxID4gcmVzb2x1dGlvbi50cnkwID8gTWF0aC5jZWlsKHJlc29sdXRpb24udHJ5MSAvIHByZWNpbmN0SGVpZ2h0KSAtIE1hdGguZmxvb3IocmVzb2x1dGlvbi50cnkwIC8gcHJlY2luY3RIZWlnaHQpIDogMDtcbiAgICB2YXIgbnVtcHJlY2luY3RzID0gbnVtcHJlY2luY3Rzd2lkZSAqIG51bXByZWNpbmN0c2hpZ2g7XG4gICAgcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMgPSB7XG4gICAgICBwcmVjaW5jdFdpZHRoLFxuICAgICAgcHJlY2luY3RIZWlnaHQsXG4gICAgICBudW1wcmVjaW5jdHN3aWRlLFxuICAgICAgbnVtcHJlY2luY3RzaGlnaCxcbiAgICAgIG51bXByZWNpbmN0cyxcbiAgICAgIHByZWNpbmN0V2lkdGhJblN1YmJhbmQsXG4gICAgICBwcmVjaW5jdEhlaWdodEluU3ViYmFuZFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZENvZGVibG9ja3MoY29udGV4dCwgc3ViYmFuZCwgZGltZW5zaW9ucykge1xuICAgIHZhciB4Y2JfID0gZGltZW5zaW9ucy54Y2JfO1xuICAgIHZhciB5Y2JfID0gZGltZW5zaW9ucy55Y2JfO1xuICAgIHZhciBjb2RlYmxvY2tXaWR0aCA9IDEgPDwgeGNiXztcbiAgICB2YXIgY29kZWJsb2NrSGVpZ2h0ID0gMSA8PCB5Y2JfO1xuICAgIHZhciBjYngwID0gc3ViYmFuZC50YngwID4+IHhjYl87XG4gICAgdmFyIGNieTAgPSBzdWJiYW5kLnRieTAgPj4geWNiXztcbiAgICB2YXIgY2J4MSA9IHN1YmJhbmQudGJ4MSArIGNvZGVibG9ja1dpZHRoIC0gMSA+PiB4Y2JfO1xuICAgIHZhciBjYnkxID0gc3ViYmFuZC50YnkxICsgY29kZWJsb2NrSGVpZ2h0IC0gMSA+PiB5Y2JfO1xuICAgIHZhciBwcmVjaW5jdFBhcmFtZXRlcnMgPSBzdWJiYW5kLnJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzO1xuICAgIHZhciBjb2RlYmxvY2tzID0gW107XG4gICAgdmFyIHByZWNpbmN0cyA9IFtdO1xuICAgIHZhciBpLCBqLCBjb2RlYmxvY2ssIHByZWNpbmN0TnVtYmVyO1xuXG4gICAgZm9yIChqID0gY2J5MDsgaiA8IGNieTE7IGorKykge1xuICAgICAgZm9yIChpID0gY2J4MDsgaSA8IGNieDE7IGkrKykge1xuICAgICAgICBjb2RlYmxvY2sgPSB7XG4gICAgICAgICAgY2J4OiBpLFxuICAgICAgICAgIGNieTogaixcbiAgICAgICAgICB0YngwOiBjb2RlYmxvY2tXaWR0aCAqIGksXG4gICAgICAgICAgdGJ5MDogY29kZWJsb2NrSGVpZ2h0ICogaixcbiAgICAgICAgICB0YngxOiBjb2RlYmxvY2tXaWR0aCAqIChpICsgMSksXG4gICAgICAgICAgdGJ5MTogY29kZWJsb2NrSGVpZ2h0ICogKGogKyAxKVxuICAgICAgICB9O1xuICAgICAgICBjb2RlYmxvY2sudGJ4MF8gPSBNYXRoLm1heChzdWJiYW5kLnRieDAsIGNvZGVibG9jay50YngwKTtcbiAgICAgICAgY29kZWJsb2NrLnRieTBfID0gTWF0aC5tYXgoc3ViYmFuZC50YnkwLCBjb2RlYmxvY2sudGJ5MCk7XG4gICAgICAgIGNvZGVibG9jay50YngxXyA9IE1hdGgubWluKHN1YmJhbmQudGJ4MSwgY29kZWJsb2NrLnRieDEpO1xuICAgICAgICBjb2RlYmxvY2sudGJ5MV8gPSBNYXRoLm1pbihzdWJiYW5kLnRieTEsIGNvZGVibG9jay50YnkxKTtcbiAgICAgICAgdmFyIHBpID0gTWF0aC5mbG9vcigoY29kZWJsb2NrLnRieDBfIC0gc3ViYmFuZC50YngwKSAvIHByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoSW5TdWJiYW5kKTtcbiAgICAgICAgdmFyIHBqID0gTWF0aC5mbG9vcigoY29kZWJsb2NrLnRieTBfIC0gc3ViYmFuZC50YnkwKSAvIHByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdEhlaWdodEluU3ViYmFuZCk7XG4gICAgICAgIHByZWNpbmN0TnVtYmVyID0gcGkgKyBwaiAqIHByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlO1xuICAgICAgICBjb2RlYmxvY2sucHJlY2luY3ROdW1iZXIgPSBwcmVjaW5jdE51bWJlcjtcbiAgICAgICAgY29kZWJsb2NrLnN1YmJhbmRUeXBlID0gc3ViYmFuZC50eXBlO1xuICAgICAgICBjb2RlYmxvY2suTGJsb2NrID0gMztcblxuICAgICAgICBpZiAoY29kZWJsb2NrLnRieDFfIDw9IGNvZGVibG9jay50YngwXyB8fCBjb2RlYmxvY2sudGJ5MV8gPD0gY29kZWJsb2NrLnRieTBfKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb2RlYmxvY2tzLnB1c2goY29kZWJsb2NrKTtcbiAgICAgICAgdmFyIHByZWNpbmN0ID0gcHJlY2luY3RzW3ByZWNpbmN0TnVtYmVyXTtcblxuICAgICAgICBpZiAocHJlY2luY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChpIDwgcHJlY2luY3QuY2J4TWluKSB7XG4gICAgICAgICAgICBwcmVjaW5jdC5jYnhNaW4gPSBpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IHByZWNpbmN0LmNieE1heCkge1xuICAgICAgICAgICAgcHJlY2luY3QuY2J4TWF4ID0gaTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaiA8IHByZWNpbmN0LmNieU1pbikge1xuICAgICAgICAgICAgcHJlY2luY3QuY2J4TWluID0gajtcbiAgICAgICAgICB9IGVsc2UgaWYgKGogPiBwcmVjaW5jdC5jYnlNYXgpIHtcbiAgICAgICAgICAgIHByZWNpbmN0LmNieU1heCA9IGo7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWNpbmN0c1twcmVjaW5jdE51bWJlcl0gPSBwcmVjaW5jdCA9IHtcbiAgICAgICAgICAgIGNieE1pbjogaSxcbiAgICAgICAgICAgIGNieU1pbjogaixcbiAgICAgICAgICAgIGNieE1heDogaSxcbiAgICAgICAgICAgIGNieU1heDogalxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb2RlYmxvY2sucHJlY2luY3QgPSBwcmVjaW5jdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdWJiYW5kLmNvZGVibG9ja1BhcmFtZXRlcnMgPSB7XG4gICAgICBjb2RlYmxvY2tXaWR0aDogeGNiXyxcbiAgICAgIGNvZGVibG9ja0hlaWdodDogeWNiXyxcbiAgICAgIG51bWNvZGVibG9ja3dpZGU6IGNieDEgLSBjYngwICsgMSxcbiAgICAgIG51bWNvZGVibG9ja2hpZ2g6IGNieTEgLSBjYnkwICsgMVxuICAgIH07XG4gICAgc3ViYmFuZC5jb2RlYmxvY2tzID0gY29kZWJsb2NrcztcbiAgICBzdWJiYW5kLnByZWNpbmN0cyA9IHByZWNpbmN0cztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhY2tldChyZXNvbHV0aW9uLCBwcmVjaW5jdE51bWJlciwgbGF5ZXJOdW1iZXIpIHtcbiAgICB2YXIgcHJlY2luY3RDb2RlYmxvY2tzID0gW107XG4gICAgdmFyIHN1YmJhbmRzID0gcmVzb2x1dGlvbi5zdWJiYW5kcztcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHN1YmJhbmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBzdWJiYW5kID0gc3ViYmFuZHNbaV07XG4gICAgICB2YXIgY29kZWJsb2NrcyA9IHN1YmJhbmQuY29kZWJsb2NrcztcblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gY29kZWJsb2Nrcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIHZhciBjb2RlYmxvY2sgPSBjb2RlYmxvY2tzW2pdO1xuXG4gICAgICAgIGlmIChjb2RlYmxvY2sucHJlY2luY3ROdW1iZXIgIT09IHByZWNpbmN0TnVtYmVyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBwcmVjaW5jdENvZGVibG9ja3MucHVzaChjb2RlYmxvY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsYXllck51bWJlcixcbiAgICAgIGNvZGVibG9ja3M6IHByZWNpbmN0Q29kZWJsb2Nrc1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgdmFyIGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICB2YXIgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICAgIGZvciAodmFyIHEgPSAwOyBxIDwgY29tcG9uZW50c0NvdW50OyBxKyspIHtcbiAgICAgIG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IE1hdGgubWF4KG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCwgdGlsZS5jb21wb25lbnRzW3FdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO1xuICAgIH1cblxuICAgIHZhciBsID0gMCxcbiAgICAgICAgciA9IDAsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBrID0gMDtcblxuICAgIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKSB7XG4gICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50OyBsKyspIHtcbiAgICAgICAgZm9yICg7IHIgPD0gbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgICAgICBmb3IgKDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2ldO1xuXG4gICAgICAgICAgICBpZiAociA+IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICAgIHZhciBudW1wcmVjaW5jdHMgPSByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7XG5cbiAgICAgICAgICAgIGZvciAoOyBrIDwgbnVtcHJlY2luY3RzOykge1xuICAgICAgICAgICAgICB2YXIgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIGssIGwpO1xuICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGsgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgciA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIk91dCBvZiBwYWNrZXRzXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBSZXNvbHV0aW9uTGF5ZXJDb21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgdmFyIGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICB2YXIgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICAgIGZvciAodmFyIHEgPSAwOyBxIDwgY29tcG9uZW50c0NvdW50OyBxKyspIHtcbiAgICAgIG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IE1hdGgubWF4KG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCwgdGlsZS5jb21wb25lbnRzW3FdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO1xuICAgIH1cblxuICAgIHZhciByID0gMCxcbiAgICAgICAgbCA9IDAsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBrID0gMDtcblxuICAgIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKSB7XG4gICAgICBmb3IgKDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50OyBsKyspIHtcbiAgICAgICAgICBmb3IgKDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2ldO1xuXG4gICAgICAgICAgICBpZiAociA+IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICAgIHZhciBudW1wcmVjaW5jdHMgPSByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7XG5cbiAgICAgICAgICAgIGZvciAoOyBrIDwgbnVtcHJlY2luY3RzOykge1xuICAgICAgICAgICAgICB2YXIgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIGssIGwpO1xuICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGsgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIk91dCBvZiBwYWNrZXRzXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBSZXNvbHV0aW9uUG9zaXRpb25Db21wb25lbnRMYXllckl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgdmFyIGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICB2YXIgbCwgciwgYywgcDtcbiAgICB2YXIgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICAgIGZvciAoYyA9IDA7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gTWF0aC5tYXgobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50LCBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7XG4gICAgfVxuXG4gICAgdmFyIG1heE51bVByZWNpbmN0c0luTGV2ZWwgPSBuZXcgSW50MzJBcnJheShtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgKyAxKTtcblxuICAgIGZvciAociA9IDA7IHIgPD0gbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyArK3IpIHtcbiAgICAgIHZhciBtYXhOdW1QcmVjaW5jdHMgPSAwO1xuXG4gICAgICBmb3IgKGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyArK2MpIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb25zID0gdGlsZS5jb21wb25lbnRzW2NdLnJlc29sdXRpb25zO1xuXG4gICAgICAgIGlmIChyIDwgcmVzb2x1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgbWF4TnVtUHJlY2luY3RzID0gTWF0aC5tYXgobWF4TnVtUHJlY2luY3RzLCByZXNvbHV0aW9uc1tyXS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtYXhOdW1QcmVjaW5jdHNJbkxldmVsW3JdID0gbWF4TnVtUHJlY2luY3RzO1xuICAgIH1cblxuICAgIGwgPSAwO1xuICAgIHIgPSAwO1xuICAgIGMgPSAwO1xuICAgIHAgPSAwO1xuXG4gICAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICAgIGZvciAoOyByIDw9IG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgIGZvciAoOyBwIDwgbWF4TnVtUHJlY2luY3RzSW5MZXZlbFtyXTsgcCsrKSB7XG4gICAgICAgICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuXG4gICAgICAgICAgICBpZiAociA+IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICAgIHZhciBudW1wcmVjaW5jdHMgPSByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7XG5cbiAgICAgICAgICAgIGlmIChwID49IG51bXByZWNpbmN0cykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDspIHtcbiAgICAgICAgICAgICAgdmFyIHBhY2tldCA9IGNyZWF0ZVBhY2tldChyZXNvbHV0aW9uLCBwLCBsKTtcbiAgICAgICAgICAgICAgbCsrO1xuICAgICAgICAgICAgICByZXR1cm4gcGFja2V0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHAgPSAwO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoXCJPdXQgb2YgcGFja2V0c1wiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gUG9zaXRpb25Db21wb25lbnRSZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihjb250ZXh0KSB7XG4gICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgIHZhciB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICAgIHZhciB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICAgIHZhciBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gICAgdmFyIHByZWNpbmN0c1NpemVzID0gZ2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZSh0aWxlKTtcbiAgICB2YXIgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMgPSBwcmVjaW5jdHNTaXplcztcbiAgICB2YXIgbCA9IDAsXG4gICAgICAgIHIgPSAwLFxuICAgICAgICBjID0gMCxcbiAgICAgICAgcHggPSAwLFxuICAgICAgICBweSA9IDA7XG5cbiAgICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCkge1xuICAgICAgZm9yICg7IHB5IDwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMubWF4TnVtSGlnaDsgcHkrKykge1xuICAgICAgICBmb3IgKDsgcHggPCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcy5tYXhOdW1XaWRlOyBweCsrKSB7XG4gICAgICAgICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcbiAgICAgICAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcblxuICAgICAgICAgICAgZm9yICg7IHIgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgIHZhciBzaXplSW5JbWFnZVNjYWxlID0gcHJlY2luY3RzU2l6ZXMuY29tcG9uZW50c1tjXS5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICAgICAgdmFyIGsgPSBnZXRQcmVjaW5jdEluZGV4SWZFeGlzdChweCwgcHksIHNpemVJbkltYWdlU2NhbGUsIHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLCByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgICBpZiAoayA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDspIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIGssIGwpO1xuICAgICAgICAgICAgICAgIGwrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFja2V0O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAwO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoXCJPdXQgb2YgcGFja2V0c1wiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gQ29tcG9uZW50UG9zaXRpb25SZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihjb250ZXh0KSB7XG4gICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgIHZhciB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICAgIHZhciB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICAgIHZhciBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gICAgdmFyIHByZWNpbmN0c1NpemVzID0gZ2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZSh0aWxlKTtcbiAgICB2YXIgbCA9IDAsXG4gICAgICAgIHIgPSAwLFxuICAgICAgICBjID0gMCxcbiAgICAgICAgcHggPSAwLFxuICAgICAgICBweSA9IDA7XG5cbiAgICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCkge1xuICAgICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7ICsrYykge1xuICAgICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgICB2YXIgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMgPSBwcmVjaW5jdHNTaXplcy5jb21wb25lbnRzW2NdO1xuICAgICAgICB2YXIgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG5cbiAgICAgICAgZm9yICg7IHB5IDwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMubWF4TnVtSGlnaDsgcHkrKykge1xuICAgICAgICAgIGZvciAoOyBweCA8IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLm1heE51bVdpZGU7IHB4KyspIHtcbiAgICAgICAgICAgIGZvciAoOyByIDw9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgICB2YXIgc2l6ZUluSW1hZ2VTY2FsZSA9IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgICB2YXIgayA9IGdldFByZWNpbmN0SW5kZXhJZkV4aXN0KHB4LCBweSwgc2l6ZUluSW1hZ2VTY2FsZSwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMsIHJlc29sdXRpb24pO1xuXG4gICAgICAgICAgICAgIGlmIChrID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgICAgIHZhciBwYWNrZXQgPSBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgaywgbCk7XG4gICAgICAgICAgICAgICAgbCsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBsID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcHkgPSAwO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoXCJPdXQgb2YgcGFja2V0c1wiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UHJlY2luY3RJbmRleElmRXhpc3QocHhJbmRleCwgcHlJbmRleCwgc2l6ZUluSW1hZ2VTY2FsZSwgcHJlY2luY3RJdGVyYXRpb25TaXplcywgcmVzb2x1dGlvbikge1xuICAgIHZhciBwb3NYID0gcHhJbmRleCAqIHByZWNpbmN0SXRlcmF0aW9uU2l6ZXMubWluV2lkdGg7XG4gICAgdmFyIHBvc1kgPSBweUluZGV4ICogcHJlY2luY3RJdGVyYXRpb25TaXplcy5taW5IZWlnaHQ7XG5cbiAgICBpZiAocG9zWCAlIHNpemVJbkltYWdlU2NhbGUud2lkdGggIT09IDAgfHwgcG9zWSAlIHNpemVJbkltYWdlU2NhbGUuaGVpZ2h0ICE9PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRQcmVjaW5jdFJvd0luZGV4ID0gcG9zWSAvIHNpemVJbkltYWdlU2NhbGUud2lkdGggKiByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlO1xuICAgIHJldHVybiBwb3NYIC8gc2l6ZUluSW1hZ2VTY2FsZS5oZWlnaHQgKyBzdGFydFByZWNpbmN0Um93SW5kZXg7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQcmVjaW5jdFNpemVzSW5JbWFnZVNjYWxlKHRpbGUpIHtcbiAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gdGlsZS5jb21wb25lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWluV2lkdGggPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIHZhciBtaW5IZWlnaHQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIHZhciBtYXhOdW1XaWRlID0gMDtcbiAgICB2YXIgbWF4TnVtSGlnaCA9IDA7XG4gICAgdmFyIHNpemVQZXJDb21wb25lbnQgPSBuZXcgQXJyYXkoY29tcG9uZW50c0NvdW50KTtcblxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICB2YXIgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG4gICAgICB2YXIgc2l6ZVBlclJlc29sdXRpb24gPSBuZXcgQXJyYXkoZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ICsgMSk7XG4gICAgICB2YXIgbWluV2lkdGhDdXJyZW50Q29tcG9uZW50ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgIHZhciBtaW5IZWlnaHRDdXJyZW50Q29tcG9uZW50ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgIHZhciBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCA9IDA7XG4gICAgICB2YXIgbWF4TnVtSGlnaEN1cnJlbnRDb21wb25lbnQgPSAwO1xuICAgICAgdmFyIHNjYWxlID0gMTtcblxuICAgICAgZm9yICh2YXIgciA9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgIHZhciB3aWR0aEN1cnJlbnRSZXNvbHV0aW9uID0gc2NhbGUgKiByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0Q3VycmVudFJlc29sdXRpb24gPSBzY2FsZSAqIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0SGVpZ2h0O1xuICAgICAgICBtaW5XaWR0aEN1cnJlbnRDb21wb25lbnQgPSBNYXRoLm1pbihtaW5XaWR0aEN1cnJlbnRDb21wb25lbnQsIHdpZHRoQ3VycmVudFJlc29sdXRpb24pO1xuICAgICAgICBtaW5IZWlnaHRDdXJyZW50Q29tcG9uZW50ID0gTWF0aC5taW4obWluSGVpZ2h0Q3VycmVudENvbXBvbmVudCwgaGVpZ2h0Q3VycmVudFJlc29sdXRpb24pO1xuICAgICAgICBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCA9IE1hdGgubWF4KG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50LCByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKTtcbiAgICAgICAgbWF4TnVtSGlnaEN1cnJlbnRDb21wb25lbnQgPSBNYXRoLm1heChtYXhOdW1IaWdoQ3VycmVudENvbXBvbmVudCwgcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzaGlnaCk7XG4gICAgICAgIHNpemVQZXJSZXNvbHV0aW9uW3JdID0ge1xuICAgICAgICAgIHdpZHRoOiB3aWR0aEN1cnJlbnRSZXNvbHV0aW9uLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0Q3VycmVudFJlc29sdXRpb25cbiAgICAgICAgfTtcbiAgICAgICAgc2NhbGUgPDw9IDE7XG4gICAgICB9XG5cbiAgICAgIG1pbldpZHRoID0gTWF0aC5taW4obWluV2lkdGgsIG1pbldpZHRoQ3VycmVudENvbXBvbmVudCk7XG4gICAgICBtaW5IZWlnaHQgPSBNYXRoLm1pbihtaW5IZWlnaHQsIG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQpO1xuICAgICAgbWF4TnVtV2lkZSA9IE1hdGgubWF4KG1heE51bVdpZGUsIG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50KTtcbiAgICAgIG1heE51bUhpZ2ggPSBNYXRoLm1heChtYXhOdW1IaWdoLCBtYXhOdW1IaWdoQ3VycmVudENvbXBvbmVudCk7XG4gICAgICBzaXplUGVyQ29tcG9uZW50W2NdID0ge1xuICAgICAgICByZXNvbHV0aW9uczogc2l6ZVBlclJlc29sdXRpb24sXG4gICAgICAgIG1pbldpZHRoOiBtaW5XaWR0aEN1cnJlbnRDb21wb25lbnQsXG4gICAgICAgIG1pbkhlaWdodDogbWluSGVpZ2h0Q3VycmVudENvbXBvbmVudCxcbiAgICAgICAgbWF4TnVtV2lkZTogbWF4TnVtV2lkZUN1cnJlbnRDb21wb25lbnQsXG4gICAgICAgIG1heE51bUhpZ2g6IG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb21wb25lbnRzOiBzaXplUGVyQ29tcG9uZW50LFxuICAgICAgbWluV2lkdGgsXG4gICAgICBtaW5IZWlnaHQsXG4gICAgICBtYXhOdW1XaWRlLFxuICAgICAgbWF4TnVtSGlnaFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFBhY2tldHMoY29udGV4dCkge1xuICAgIHZhciBzaXogPSBjb250ZXh0LlNJWjtcbiAgICB2YXIgdGlsZUluZGV4ID0gY29udGV4dC5jdXJyZW50VGlsZS5pbmRleDtcbiAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG5cbiAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgdmFyIGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O1xuICAgICAgdmFyIHJlc29sdXRpb25zID0gW107XG4gICAgICB2YXIgc3ViYmFuZHMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgciA9IDA7IHIgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgICAgdmFyIGJsb2Nrc0RpbWVuc2lvbnMgPSBnZXRCbG9ja3NEaW1lbnNpb25zKGNvbnRleHQsIGNvbXBvbmVudCwgcik7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0ge307XG4gICAgICAgIHZhciBzY2FsZSA9IDEgPDwgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50IC0gcjtcbiAgICAgICAgcmVzb2x1dGlvbi50cngwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gwIC8gc2NhbGUpO1xuICAgICAgICByZXNvbHV0aW9uLnRyeTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBzY2FsZSk7XG4gICAgICAgIHJlc29sdXRpb24udHJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIHNjYWxlKTtcbiAgICAgICAgcmVzb2x1dGlvbi50cnkxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kxIC8gc2NhbGUpO1xuICAgICAgICByZXNvbHV0aW9uLnJlc0xldmVsID0gcjtcbiAgICAgICAgYnVpbGRQcmVjaW5jdHMoY29udGV4dCwgcmVzb2x1dGlvbiwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICAgIHJlc29sdXRpb25zLnB1c2gocmVzb2x1dGlvbik7XG4gICAgICAgIHZhciBzdWJiYW5kO1xuXG4gICAgICAgIGlmIChyID09PSAwKSB7XG4gICAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICAgIHN1YmJhbmQudHlwZSA9IFwiTExcIjtcbiAgICAgICAgICBzdWJiYW5kLnRieDAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDAgLyBzY2FsZSk7XG4gICAgICAgICAgc3ViYmFuZC50YnkwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kwIC8gc2NhbGUpO1xuICAgICAgICAgIHN1YmJhbmQudGJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIHNjYWxlKTtcbiAgICAgICAgICBzdWJiYW5kLnRieTEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTEgLyBzY2FsZSk7XG4gICAgICAgICAgc3ViYmFuZC5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICAgICAgICBidWlsZENvZGVibG9ja3MoY29udGV4dCwgc3ViYmFuZCwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICByZXNvbHV0aW9uLnN1YmJhbmRzID0gW3N1YmJhbmRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBic2NhbGUgPSAxIDw8IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCAtIHIgKyAxO1xuICAgICAgICAgIHZhciByZXNvbHV0aW9uU3ViYmFuZHMgPSBbXTtcbiAgICAgICAgICBzdWJiYW5kID0ge307XG4gICAgICAgICAgc3ViYmFuZC50eXBlID0gXCJITFwiO1xuICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgc3ViYmFuZC50YnkwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kwIC8gYnNjYWxlKTtcbiAgICAgICAgICBzdWJiYW5kLnRieDEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDEgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSk7XG4gICAgICAgICAgc3ViYmFuZC5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICAgICAgICBidWlsZENvZGVibG9ja3MoY29udGV4dCwgc3ViYmFuZCwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICByZXNvbHV0aW9uU3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICBzdWJiYW5kID0ge307XG4gICAgICAgICAgc3ViYmFuZC50eXBlID0gXCJMSFwiO1xuICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSk7XG4gICAgICAgICAgc3ViYmFuZC50YnkwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kwIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgICBzdWJiYW5kLnRieDEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDEgLyBic2NhbGUpO1xuICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgc3ViYmFuZC5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICAgICAgICBidWlsZENvZGVibG9ja3MoY29udGV4dCwgc3ViYmFuZCwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICByZXNvbHV0aW9uU3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICBzdWJiYW5kID0ge307XG4gICAgICAgICAgc3ViYmFuZC50eXBlID0gXCJISFwiO1xuICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgc3ViYmFuZC50YnkwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kwIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgICBzdWJiYW5kLnRieDEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDEgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgc3ViYmFuZC5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICAgICAgICBidWlsZENvZGVibG9ja3MoY29udGV4dCwgc3ViYmFuZCwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICByZXNvbHV0aW9uU3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICByZXNvbHV0aW9uLnN1YmJhbmRzID0gcmVzb2x1dGlvblN1YmJhbmRzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbXBvbmVudC5yZXNvbHV0aW9ucyA9IHJlc29sdXRpb25zO1xuICAgICAgY29tcG9uZW50LnN1YmJhbmRzID0gc3ViYmFuZHM7XG4gICAgfVxuXG4gICAgdmFyIHByb2dyZXNzaW9uT3JkZXIgPSB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMucHJvZ3Jlc3Npb25PcmRlcjtcblxuICAgIHN3aXRjaCAocHJvZ3Jlc3Npb25PcmRlcikge1xuICAgICAgY2FzZSAwOlxuICAgICAgICB0aWxlLnBhY2tldHNJdGVyYXRvciA9IG5ldyBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGNvbnRleHQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxOlxuICAgICAgICB0aWxlLnBhY2tldHNJdGVyYXRvciA9IG5ldyBSZXNvbHV0aW9uTGF5ZXJDb21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGNvbnRleHQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICB0aWxlLnBhY2tldHNJdGVyYXRvciA9IG5ldyBSZXNvbHV0aW9uUG9zaXRpb25Db21wb25lbnRMYXllckl0ZXJhdG9yKGNvbnRleHQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzOlxuICAgICAgICB0aWxlLnBhY2tldHNJdGVyYXRvciA9IG5ldyBQb3NpdGlvbkNvbXBvbmVudFJlc29sdXRpb25MYXllckl0ZXJhdG9yKGNvbnRleHQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICB0aWxlLnBhY2tldHNJdGVyYXRvciA9IG5ldyBDb21wb25lbnRQb3NpdGlvblJlc29sdXRpb25MYXllckl0ZXJhdG9yKGNvbnRleHQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKGBVbnN1cHBvcnRlZCBwcm9ncmVzc2lvbiBvcmRlciAke3Byb2dyZXNzaW9uT3JkZXJ9YCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VUaWxlUGFja2V0cyhjb250ZXh0LCBkYXRhLCBvZmZzZXQsIGRhdGFMZW5ndGgpIHtcbiAgICB2YXIgcG9zaXRpb24gPSAwO1xuICAgIHZhciBidWZmZXIsXG4gICAgICAgIGJ1ZmZlclNpemUgPSAwLFxuICAgICAgICBza2lwTmV4dEJpdCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gcmVhZEJpdHMoY291bnQpIHtcbiAgICAgIHdoaWxlIChidWZmZXJTaXplIDwgY291bnQpIHtcbiAgICAgICAgdmFyIGIgPSBkYXRhW29mZnNldCArIHBvc2l0aW9uXTtcbiAgICAgICAgcG9zaXRpb24rKztcblxuICAgICAgICBpZiAoc2tpcE5leHRCaXQpIHtcbiAgICAgICAgICBidWZmZXIgPSBidWZmZXIgPDwgNyB8IGI7XG4gICAgICAgICAgYnVmZmVyU2l6ZSArPSA3O1xuICAgICAgICAgIHNraXBOZXh0Qml0ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyID0gYnVmZmVyIDw8IDggfCBiO1xuICAgICAgICAgIGJ1ZmZlclNpemUgKz0gODtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiID09PSAweGZmKSB7XG4gICAgICAgICAgc2tpcE5leHRCaXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlclNpemUgLT0gY291bnQ7XG4gICAgICByZXR1cm4gYnVmZmVyID4+PiBidWZmZXJTaXplICYgKDEgPDwgY291bnQpIC0gMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBza2lwTWFya2VySWZFcXVhbCh2YWx1ZSkge1xuICAgICAgaWYgKGRhdGFbb2Zmc2V0ICsgcG9zaXRpb24gLSAxXSA9PT0gMHhmZiAmJiBkYXRhW29mZnNldCArIHBvc2l0aW9uXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgc2tpcEJ5dGVzKDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YVtvZmZzZXQgKyBwb3NpdGlvbl0gPT09IDB4ZmYgJiYgZGF0YVtvZmZzZXQgKyBwb3NpdGlvbiArIDFdID09PSB2YWx1ZSkge1xuICAgICAgICBza2lwQnl0ZXMoMik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2tpcEJ5dGVzKGNvdW50KSB7XG4gICAgICBwb3NpdGlvbiArPSBjb3VudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhbGlnblRvQnl0ZSgpIHtcbiAgICAgIGJ1ZmZlclNpemUgPSAwO1xuXG4gICAgICBpZiAoc2tpcE5leHRCaXQpIHtcbiAgICAgICAgcG9zaXRpb24rKztcbiAgICAgICAgc2tpcE5leHRCaXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkQ29kaW5ncGFzc2VzKCkge1xuICAgICAgaWYgKHJlYWRCaXRzKDEpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVhZEJpdHMoMSkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IHJlYWRCaXRzKDIpO1xuXG4gICAgICBpZiAodmFsdWUgPCAzKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSArIDM7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gcmVhZEJpdHMoNSk7XG5cbiAgICAgIGlmICh2YWx1ZSA8IDMxKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSArIDY7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gcmVhZEJpdHMoNyk7XG4gICAgICByZXR1cm4gdmFsdWUgKyAzNztcbiAgICB9XG5cbiAgICB2YXIgdGlsZUluZGV4ID0gY29udGV4dC5jdXJyZW50VGlsZS5pbmRleDtcbiAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICB2YXIgc29wTWFya2VyVXNlZCA9IGNvbnRleHQuQ09ELnNvcE1hcmtlclVzZWQ7XG4gICAgdmFyIGVwaE1hcmtlclVzZWQgPSBjb250ZXh0LkNPRC5lcGhNYXJrZXJVc2VkO1xuICAgIHZhciBwYWNrZXRzSXRlcmF0b3IgPSB0aWxlLnBhY2tldHNJdGVyYXRvcjtcblxuICAgIHdoaWxlIChwb3NpdGlvbiA8IGRhdGFMZW5ndGgpIHtcbiAgICAgIGFsaWduVG9CeXRlKCk7XG5cbiAgICAgIGlmIChzb3BNYXJrZXJVc2VkICYmIHNraXBNYXJrZXJJZkVxdWFsKDB4OTEpKSB7XG4gICAgICAgIHNraXBCeXRlcyg0KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhY2tldCA9IHBhY2tldHNJdGVyYXRvci5uZXh0UGFja2V0KCk7XG5cbiAgICAgIGlmICghcmVhZEJpdHMoMSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBsYXllck51bWJlciA9IHBhY2tldC5sYXllck51bWJlcjtcbiAgICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICAgIGNvZGVibG9jaztcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcGFja2V0LmNvZGVibG9ja3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb2RlYmxvY2sgPSBwYWNrZXQuY29kZWJsb2Nrc1tpXTtcbiAgICAgICAgdmFyIHByZWNpbmN0ID0gY29kZWJsb2NrLnByZWNpbmN0O1xuICAgICAgICB2YXIgY29kZWJsb2NrQ29sdW1uID0gY29kZWJsb2NrLmNieCAtIHByZWNpbmN0LmNieE1pbjtcbiAgICAgICAgdmFyIGNvZGVibG9ja1JvdyA9IGNvZGVibG9jay5jYnkgLSBwcmVjaW5jdC5jYnlNaW47XG4gICAgICAgIHZhciBjb2RlYmxvY2tJbmNsdWRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZmlyc3RUaW1lSW5jbHVzaW9uID0gZmFsc2U7XG4gICAgICAgIHZhciB2YWx1ZVJlYWR5O1xuXG4gICAgICAgIGlmIChjb2RlYmxvY2suaW5jbHVkZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvZGVibG9ja0luY2x1ZGVkID0gISFyZWFkQml0cygxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmVjaW5jdCA9IGNvZGVibG9jay5wcmVjaW5jdDtcbiAgICAgICAgICB2YXIgaW5jbHVzaW9uVHJlZSwgemVyb0JpdFBsYW5lc1RyZWU7XG5cbiAgICAgICAgICBpZiAocHJlY2luY3QuaW5jbHVzaW9uVHJlZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpbmNsdXNpb25UcmVlID0gcHJlY2luY3QuaW5jbHVzaW9uVHJlZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gcHJlY2luY3QuY2J4TWF4IC0gcHJlY2luY3QuY2J4TWluICsgMTtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBwcmVjaW5jdC5jYnlNYXggLSBwcmVjaW5jdC5jYnlNaW4gKyAxO1xuICAgICAgICAgICAgaW5jbHVzaW9uVHJlZSA9IG5ldyBJbmNsdXNpb25UcmVlKHdpZHRoLCBoZWlnaHQsIGxheWVyTnVtYmVyKTtcbiAgICAgICAgICAgIHplcm9CaXRQbGFuZXNUcmVlID0gbmV3IFRhZ1RyZWUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICBwcmVjaW5jdC5pbmNsdXNpb25UcmVlID0gaW5jbHVzaW9uVHJlZTtcbiAgICAgICAgICAgIHByZWNpbmN0Lnplcm9CaXRQbGFuZXNUcmVlID0gemVyb0JpdFBsYW5lc1RyZWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGluY2x1c2lvblRyZWUucmVzZXQoY29kZWJsb2NrQ29sdW1uLCBjb2RlYmxvY2tSb3csIGxheWVyTnVtYmVyKSkge1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgaWYgKHJlYWRCaXRzKDEpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVSZWFkeSA9ICFpbmNsdXNpb25UcmVlLm5leHRMZXZlbCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVibG9jay5pbmNsdWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBjb2RlYmxvY2tJbmNsdWRlZCA9IGZpcnN0VGltZUluY2x1c2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5jbHVzaW9uVHJlZS5pbmNyZW1lbnRWYWx1ZShsYXllck51bWJlcik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvZGVibG9ja0luY2x1ZGVkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlyc3RUaW1lSW5jbHVzaW9uKSB7XG4gICAgICAgICAgemVyb0JpdFBsYW5lc1RyZWUgPSBwcmVjaW5jdC56ZXJvQml0UGxhbmVzVHJlZTtcbiAgICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZS5yZXNldChjb2RlYmxvY2tDb2x1bW4sIGNvZGVibG9ja1Jvdyk7XG5cbiAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHJlYWRCaXRzKDEpKSB7XG4gICAgICAgICAgICAgIHZhbHVlUmVhZHkgPSAhemVyb0JpdFBsYW5lc1RyZWUubmV4dExldmVsKCk7XG5cbiAgICAgICAgICAgICAgaWYgKHZhbHVlUmVhZHkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgemVyb0JpdFBsYW5lc1RyZWUuaW5jcmVtZW50VmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb2RlYmxvY2suemVyb0JpdFBsYW5lcyA9IHplcm9CaXRQbGFuZXNUcmVlLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvZGluZ3Bhc3NlcyA9IHJlYWRDb2RpbmdwYXNzZXMoKTtcblxuICAgICAgICB3aGlsZSAocmVhZEJpdHMoMSkpIHtcbiAgICAgICAgICBjb2RlYmxvY2suTGJsb2NrKys7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY29kaW5ncGFzc2VzTG9nMiA9ICgwLCBfY29yZV91dGlscy5sb2cyKShjb2RpbmdwYXNzZXMpO1xuICAgICAgICB2YXIgYml0cyA9IChjb2RpbmdwYXNzZXMgPCAxIDw8IGNvZGluZ3Bhc3Nlc0xvZzIgPyBjb2RpbmdwYXNzZXNMb2cyIC0gMSA6IGNvZGluZ3Bhc3Nlc0xvZzIpICsgY29kZWJsb2NrLkxibG9jaztcbiAgICAgICAgdmFyIGNvZGVkRGF0YUxlbmd0aCA9IHJlYWRCaXRzKGJpdHMpO1xuICAgICAgICBxdWV1ZS5wdXNoKHtcbiAgICAgICAgICBjb2RlYmxvY2ssXG4gICAgICAgICAgY29kaW5ncGFzc2VzLFxuICAgICAgICAgIGRhdGFMZW5ndGg6IGNvZGVkRGF0YUxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYWxpZ25Ub0J5dGUoKTtcblxuICAgICAgaWYgKGVwaE1hcmtlclVzZWQpIHtcbiAgICAgICAgc2tpcE1hcmtlcklmRXF1YWwoMHg5Mik7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBwYWNrZXRJdGVtID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgY29kZWJsb2NrID0gcGFja2V0SXRlbS5jb2RlYmxvY2s7XG5cbiAgICAgICAgaWYgKGNvZGVibG9jay5kYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb2RlYmxvY2suZGF0YSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29kZWJsb2NrLmRhdGEucHVzaCh7XG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBzdGFydDogb2Zmc2V0ICsgcG9zaXRpb24sXG4gICAgICAgICAgZW5kOiBvZmZzZXQgKyBwb3NpdGlvbiArIHBhY2tldEl0ZW0uZGF0YUxlbmd0aCxcbiAgICAgICAgICBjb2RpbmdwYXNzZXM6IHBhY2tldEl0ZW0uY29kaW5ncGFzc2VzXG4gICAgICAgIH0pO1xuICAgICAgICBwb3NpdGlvbiArPSBwYWNrZXRJdGVtLmRhdGFMZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gY29weUNvZWZmaWNpZW50cyhjb2VmZmljaWVudHMsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBzdWJiYW5kLCBkZWx0YSwgbWIsIHJldmVyc2libGUsIHNlZ21lbnRhdGlvblN5bWJvbFVzZWQpIHtcbiAgICB2YXIgeDAgPSBzdWJiYW5kLnRieDA7XG4gICAgdmFyIHkwID0gc3ViYmFuZC50YnkwO1xuICAgIHZhciB3aWR0aCA9IHN1YmJhbmQudGJ4MSAtIHN1YmJhbmQudGJ4MDtcbiAgICB2YXIgY29kZWJsb2NrcyA9IHN1YmJhbmQuY29kZWJsb2NrcztcbiAgICB2YXIgcmlnaHQgPSBzdWJiYW5kLnR5cGUuY2hhckF0KDApID09PSBcIkhcIiA/IDEgOiAwO1xuICAgIHZhciBib3R0b20gPSBzdWJiYW5kLnR5cGUuY2hhckF0KDEpID09PSBcIkhcIiA/IGxldmVsV2lkdGggOiAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY29kZWJsb2Nrcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICB2YXIgY29kZWJsb2NrID0gY29kZWJsb2Nrc1tpXTtcbiAgICAgIHZhciBibG9ja1dpZHRoID0gY29kZWJsb2NrLnRieDFfIC0gY29kZWJsb2NrLnRieDBfO1xuICAgICAgdmFyIGJsb2NrSGVpZ2h0ID0gY29kZWJsb2NrLnRieTFfIC0gY29kZWJsb2NrLnRieTBfO1xuXG4gICAgICBpZiAoYmxvY2tXaWR0aCA9PT0gMCB8fCBibG9ja0hlaWdodCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvZGVibG9jay5kYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBiaXRNb2RlbCwgY3VycmVudENvZGluZ3Bhc3NUeXBlO1xuICAgICAgYml0TW9kZWwgPSBuZXcgQml0TW9kZWwoYmxvY2tXaWR0aCwgYmxvY2tIZWlnaHQsIGNvZGVibG9jay5zdWJiYW5kVHlwZSwgY29kZWJsb2NrLnplcm9CaXRQbGFuZXMsIG1iKTtcbiAgICAgIGN1cnJlbnRDb2RpbmdwYXNzVHlwZSA9IDI7XG4gICAgICB2YXIgZGF0YSA9IGNvZGVibG9jay5kYXRhLFxuICAgICAgICAgIHRvdGFsTGVuZ3RoID0gMCxcbiAgICAgICAgICBjb2RpbmdwYXNzZXMgPSAwO1xuICAgICAgdmFyIGosIGpqLCBkYXRhSXRlbTtcblxuICAgICAgZm9yIChqID0gMCwgamogPSBkYXRhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgZGF0YUl0ZW0gPSBkYXRhW2pdO1xuICAgICAgICB0b3RhbExlbmd0aCArPSBkYXRhSXRlbS5lbmQgLSBkYXRhSXRlbS5zdGFydDtcbiAgICAgICAgY29kaW5ncGFzc2VzICs9IGRhdGFJdGVtLmNvZGluZ3Bhc3NlcztcbiAgICAgIH1cblxuICAgICAgdmFyIGVuY29kZWREYXRhID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpO1xuICAgICAgdmFyIHBvc2l0aW9uID0gMDtcblxuICAgICAgZm9yIChqID0gMCwgamogPSBkYXRhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgZGF0YUl0ZW0gPSBkYXRhW2pdO1xuICAgICAgICB2YXIgY2h1bmsgPSBkYXRhSXRlbS5kYXRhLnN1YmFycmF5KGRhdGFJdGVtLnN0YXJ0LCBkYXRhSXRlbS5lbmQpO1xuICAgICAgICBlbmNvZGVkRGF0YS5zZXQoY2h1bmssIHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGVjb2RlciA9IG5ldyBfYXJpdGhtZXRpY19kZWNvZGVyLkFyaXRobWV0aWNEZWNvZGVyKGVuY29kZWREYXRhLCAwLCB0b3RhbExlbmd0aCk7XG4gICAgICBiaXRNb2RlbC5zZXREZWNvZGVyKGRlY29kZXIpO1xuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgY29kaW5ncGFzc2VzOyBqKyspIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50Q29kaW5ncGFzc1R5cGUpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBiaXRNb2RlbC5ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgYml0TW9kZWwucnVuTWFnbml0dWRlUmVmaW5lbWVudFBhc3MoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgYml0TW9kZWwucnVuQ2xlYW51cFBhc3MoKTtcblxuICAgICAgICAgICAgaWYgKHNlZ21lbnRhdGlvblN5bWJvbFVzZWQpIHtcbiAgICAgICAgICAgICAgYml0TW9kZWwuY2hlY2tTZWdtZW50YXRpb25TeW1ib2woKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50Q29kaW5ncGFzc1R5cGUgPSAoY3VycmVudENvZGluZ3Bhc3NUeXBlICsgMSkgJSAzO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2Zmc2V0ID0gY29kZWJsb2NrLnRieDBfIC0geDAgKyAoY29kZWJsb2NrLnRieTBfIC0geTApICogd2lkdGg7XG4gICAgICB2YXIgc2lnbiA9IGJpdE1vZGVsLmNvZWZmaWNlbnRzU2lnbjtcbiAgICAgIHZhciBtYWduaXR1ZGUgPSBiaXRNb2RlbC5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgIHZhciBiaXRzRGVjb2RlZCA9IGJpdE1vZGVsLmJpdHNEZWNvZGVkO1xuICAgICAgdmFyIG1hZ25pdHVkZUNvcnJlY3Rpb24gPSByZXZlcnNpYmxlID8gMCA6IDAuNTtcbiAgICAgIHZhciBrLCBuLCBuYjtcbiAgICAgIHBvc2l0aW9uID0gMDtcbiAgICAgIHZhciBpbnRlcmxlYXZlID0gc3ViYmFuZC50eXBlICE9PSBcIkxMXCI7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBibG9ja0hlaWdodDsgaisrKSB7XG4gICAgICAgIHZhciByb3cgPSBvZmZzZXQgLyB3aWR0aCB8IDA7XG4gICAgICAgIHZhciBsZXZlbE9mZnNldCA9IDIgKiByb3cgKiAobGV2ZWxXaWR0aCAtIHdpZHRoKSArIHJpZ2h0ICsgYm90dG9tO1xuXG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBibG9ja1dpZHRoOyBrKyspIHtcbiAgICAgICAgICBuID0gbWFnbml0dWRlW3Bvc2l0aW9uXTtcblxuICAgICAgICAgIGlmIChuICE9PSAwKSB7XG4gICAgICAgICAgICBuID0gKG4gKyBtYWduaXR1ZGVDb3JyZWN0aW9uKSAqIGRlbHRhO1xuXG4gICAgICAgICAgICBpZiAoc2lnbltwb3NpdGlvbl0gIT09IDApIHtcbiAgICAgICAgICAgICAgbiA9IC1uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuYiA9IGJpdHNEZWNvZGVkW3Bvc2l0aW9uXTtcbiAgICAgICAgICAgIHZhciBwb3MgPSBpbnRlcmxlYXZlID8gbGV2ZWxPZmZzZXQgKyAob2Zmc2V0IDw8IDEpIDogb2Zmc2V0O1xuXG4gICAgICAgICAgICBpZiAocmV2ZXJzaWJsZSAmJiBuYiA+PSBtYikge1xuICAgICAgICAgICAgICBjb2VmZmljaWVudHNbcG9zXSA9IG47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb2VmZmljaWVudHNbcG9zXSA9IG4gKiAoMSA8PCBtYiAtIG5iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICBwb3NpdGlvbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IHdpZHRoIC0gYmxvY2tXaWR0aDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1UaWxlKGNvbnRleHQsIHRpbGUsIGMpIHtcbiAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgIHZhciBjb2RpbmdTdHlsZVBhcmFtZXRlcnMgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzO1xuICAgIHZhciBxdWFudGl6YXRpb25QYXJhbWV0ZXJzID0gY29tcG9uZW50LnF1YW50aXphdGlvblBhcmFtZXRlcnM7XG4gICAgdmFyIGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IGNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG4gICAgdmFyIHNwcWNkcyA9IHF1YW50aXphdGlvblBhcmFtZXRlcnMuU1BxY2RzO1xuICAgIHZhciBzY2FsYXJFeHBvdW5kZWQgPSBxdWFudGl6YXRpb25QYXJhbWV0ZXJzLnNjYWxhckV4cG91bmRlZDtcbiAgICB2YXIgZ3VhcmRCaXRzID0gcXVhbnRpemF0aW9uUGFyYW1ldGVycy5ndWFyZEJpdHM7XG4gICAgdmFyIHNlZ21lbnRhdGlvblN5bWJvbFVzZWQgPSBjb2RpbmdTdHlsZVBhcmFtZXRlcnMuc2VnbWVudGF0aW9uU3ltYm9sVXNlZDtcbiAgICB2YXIgcHJlY2lzaW9uID0gY29udGV4dC5jb21wb25lbnRzW2NdLnByZWNpc2lvbjtcbiAgICB2YXIgcmV2ZXJzaWJsZSA9IGNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb247XG4gICAgdmFyIHRyYW5zZm9ybSA9IHJldmVyc2libGUgPyBuZXcgUmV2ZXJzaWJsZVRyYW5zZm9ybSgpIDogbmV3IElycmV2ZXJzaWJsZVRyYW5zZm9ybSgpO1xuICAgIHZhciBzdWJiYW5kQ29lZmZpY2llbnRzID0gW107XG4gICAgdmFyIGIgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyBpKyspIHtcbiAgICAgIHZhciByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW2ldO1xuICAgICAgdmFyIHdpZHRoID0gcmVzb2x1dGlvbi50cngxIC0gcmVzb2x1dGlvbi50cngwO1xuICAgICAgdmFyIGhlaWdodCA9IHJlc29sdXRpb24udHJ5MSAtIHJlc29sdXRpb24udHJ5MDtcbiAgICAgIHZhciBjb2VmZmljaWVudHMgPSBuZXcgRmxvYXQzMkFycmF5KHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcmVzb2x1dGlvbi5zdWJiYW5kcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIHZhciBtdSwgZXBzaWxvbjtcblxuICAgICAgICBpZiAoIXNjYWxhckV4cG91bmRlZCkge1xuICAgICAgICAgIG11ID0gc3BxY2RzWzBdLm11O1xuICAgICAgICAgIGVwc2lsb24gPSBzcHFjZHNbMF0uZXBzaWxvbiArIChpID4gMCA/IDEgLSBpIDogMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbXUgPSBzcHFjZHNbYl0ubXU7XG4gICAgICAgICAgZXBzaWxvbiA9IHNwcWNkc1tiXS5lcHNpbG9uO1xuICAgICAgICAgIGIrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdWJiYW5kID0gcmVzb2x1dGlvbi5zdWJiYW5kc1tqXTtcbiAgICAgICAgdmFyIGdhaW5Mb2cyID0gU3ViYmFuZHNHYWluTG9nMltzdWJiYW5kLnR5cGVdO1xuICAgICAgICB2YXIgZGVsdGEgPSByZXZlcnNpYmxlID8gMSA6IDIgKiogKHByZWNpc2lvbiArIGdhaW5Mb2cyIC0gZXBzaWxvbikgKiAoMSArIG11IC8gMjA0OCk7XG4gICAgICAgIHZhciBtYiA9IGd1YXJkQml0cyArIGVwc2lsb24gLSAxO1xuICAgICAgICBjb3B5Q29lZmZpY2llbnRzKGNvZWZmaWNpZW50cywgd2lkdGgsIGhlaWdodCwgc3ViYmFuZCwgZGVsdGEsIG1iLCByZXZlcnNpYmxlLCBzZWdtZW50YXRpb25TeW1ib2xVc2VkKTtcbiAgICAgIH1cblxuICAgICAgc3ViYmFuZENvZWZmaWNpZW50cy5wdXNoKHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaXRlbXM6IGNvZWZmaWNpZW50c1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IHRyYW5zZm9ybS5jYWxjdWxhdGUoc3ViYmFuZENvZWZmaWNpZW50cywgY29tcG9uZW50LnRjeDAsIGNvbXBvbmVudC50Y3kwKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogY29tcG9uZW50LnRjeDAsXG4gICAgICB0b3A6IGNvbXBvbmVudC50Y3kwLFxuICAgICAgd2lkdGg6IHJlc3VsdC53aWR0aCxcbiAgICAgIGhlaWdodDogcmVzdWx0LmhlaWdodCxcbiAgICAgIGl0ZW1zOiByZXN1bHQuaXRlbXNcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtQ29tcG9uZW50cyhjb250ZXh0KSB7XG4gICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgIHZhciBjb21wb25lbnRzID0gY29udGV4dC5jb21wb25lbnRzO1xuICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICB2YXIgcmVzdWx0SW1hZ2VzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjb250ZXh0LnRpbGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciB0aWxlID0gY29udGV4dC50aWxlc1tpXTtcbiAgICAgIHZhciB0cmFuc2Zvcm1lZFRpbGVzID0gW107XG4gICAgICB2YXIgYztcblxuICAgICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICAgIHRyYW5zZm9ybWVkVGlsZXNbY10gPSB0cmFuc2Zvcm1UaWxlKGNvbnRleHQsIHRpbGUsIGMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdGlsZTAgPSB0cmFuc2Zvcm1lZFRpbGVzWzBdO1xuICAgICAgdmFyIG91dCA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh0aWxlMC5pdGVtcy5sZW5ndGggKiBjb21wb25lbnRzQ291bnQpO1xuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgbGVmdDogdGlsZTAubGVmdCxcbiAgICAgICAgdG9wOiB0aWxlMC50b3AsXG4gICAgICAgIHdpZHRoOiB0aWxlMC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aWxlMC5oZWlnaHQsXG4gICAgICAgIGl0ZW1zOiBvdXRcbiAgICAgIH07XG4gICAgICB2YXIgc2hpZnQsIG9mZnNldDtcbiAgICAgIHZhciBwb3MgPSAwLFxuICAgICAgICAgIGosXG4gICAgICAgICAgamosXG4gICAgICAgICAgeTAsXG4gICAgICAgICAgeTEsXG4gICAgICAgICAgeTI7XG5cbiAgICAgIGlmICh0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm0pIHtcbiAgICAgICAgdmFyIGZvdXJDb21wb25lbnRzID0gY29tcG9uZW50c0NvdW50ID09PSA0O1xuICAgICAgICB2YXIgeTBpdGVtcyA9IHRyYW5zZm9ybWVkVGlsZXNbMF0uaXRlbXM7XG4gICAgICAgIHZhciB5MWl0ZW1zID0gdHJhbnNmb3JtZWRUaWxlc1sxXS5pdGVtcztcbiAgICAgICAgdmFyIHkyaXRlbXMgPSB0cmFuc2Zvcm1lZFRpbGVzWzJdLml0ZW1zO1xuICAgICAgICB2YXIgeTNpdGVtcyA9IGZvdXJDb21wb25lbnRzID8gdHJhbnNmb3JtZWRUaWxlc1szXS5pdGVtcyA6IG51bGw7XG4gICAgICAgIHNoaWZ0ID0gY29tcG9uZW50c1swXS5wcmVjaXNpb24gLSA4O1xuICAgICAgICBvZmZzZXQgPSAoMTI4IDw8IHNoaWZ0KSArIDAuNTtcbiAgICAgICAgdmFyIGNvbXBvbmVudDAgPSB0aWxlLmNvbXBvbmVudHNbMF07XG4gICAgICAgIHZhciBhbHBoYTAxID0gY29tcG9uZW50c0NvdW50IC0gMztcbiAgICAgICAgamogPSB5MGl0ZW1zLmxlbmd0aDtcblxuICAgICAgICBpZiAoIWNvbXBvbmVudDAuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbikge1xuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBqajsgaisrLCBwb3MgKz0gYWxwaGEwMSkge1xuICAgICAgICAgICAgeTAgPSB5MGl0ZW1zW2pdICsgb2Zmc2V0O1xuICAgICAgICAgICAgeTEgPSB5MWl0ZW1zW2pdO1xuICAgICAgICAgICAgeTIgPSB5Mml0ZW1zW2pdO1xuICAgICAgICAgICAgb3V0W3BvcysrXSA9IHkwICsgMS40MDIgKiB5MiA+PiBzaGlmdDtcbiAgICAgICAgICAgIG91dFtwb3MrK10gPSB5MCAtIDAuMzQ0MTMgKiB5MSAtIDAuNzE0MTQgKiB5MiA+PiBzaGlmdDtcbiAgICAgICAgICAgIG91dFtwb3MrK10gPSB5MCArIDEuNzcyICogeTEgPj4gc2hpZnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBqajsgaisrLCBwb3MgKz0gYWxwaGEwMSkge1xuICAgICAgICAgICAgeTAgPSB5MGl0ZW1zW2pdICsgb2Zmc2V0O1xuICAgICAgICAgICAgeTEgPSB5MWl0ZW1zW2pdO1xuICAgICAgICAgICAgeTIgPSB5Mml0ZW1zW2pdO1xuICAgICAgICAgICAgY29uc3QgZyA9IHkwIC0gKHkyICsgeTEgPj4gMik7XG4gICAgICAgICAgICBvdXRbcG9zKytdID0gZyArIHkyID4+IHNoaWZ0O1xuICAgICAgICAgICAgb3V0W3BvcysrXSA9IGcgPj4gc2hpZnQ7XG4gICAgICAgICAgICBvdXRbcG9zKytdID0gZyArIHkxID4+IHNoaWZ0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3VyQ29tcG9uZW50cykge1xuICAgICAgICAgIGZvciAoaiA9IDAsIHBvcyA9IDM7IGogPCBqajsgaisrLCBwb3MgKz0gNCkge1xuICAgICAgICAgICAgb3V0W3Bvc10gPSB5M2l0ZW1zW2pdICsgb2Zmc2V0ID4+IHNoaWZ0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICAgICAgdmFyIGl0ZW1zID0gdHJhbnNmb3JtZWRUaWxlc1tjXS5pdGVtcztcbiAgICAgICAgICBzaGlmdCA9IGNvbXBvbmVudHNbY10ucHJlY2lzaW9uIC0gODtcbiAgICAgICAgICBvZmZzZXQgPSAoMTI4IDw8IHNoaWZ0KSArIDAuNTtcblxuICAgICAgICAgIGZvciAocG9zID0gYywgaiA9IDAsIGpqID0gaXRlbXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgb3V0W3Bvc10gPSBpdGVtc1tqXSArIG9mZnNldCA+PiBzaGlmdDtcbiAgICAgICAgICAgIHBvcyArPSBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdEltYWdlcy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdEltYWdlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVUaWxlKGNvbnRleHQsIHRpbGVJbmRleCkge1xuICAgIHZhciBzaXogPSBjb250ZXh0LlNJWjtcbiAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG5cbiAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgdmFyIHFjZE9yUWNjID0gY29udGV4dC5jdXJyZW50VGlsZS5RQ0NbY10gIT09IHVuZGVmaW5lZCA/IGNvbnRleHQuY3VycmVudFRpbGUuUUNDW2NdIDogY29udGV4dC5jdXJyZW50VGlsZS5RQ0Q7XG4gICAgICBjb21wb25lbnQucXVhbnRpemF0aW9uUGFyYW1ldGVycyA9IHFjZE9yUWNjO1xuICAgICAgdmFyIGNvZE9yQ29jID0gY29udGV4dC5jdXJyZW50VGlsZS5DT0NbY10gIT09IHVuZGVmaW5lZCA/IGNvbnRleHQuY3VycmVudFRpbGUuQ09DW2NdIDogY29udGV4dC5jdXJyZW50VGlsZS5DT0Q7XG4gICAgICBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzID0gY29kT3JDb2M7XG4gICAgfVxuXG4gICAgdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzID0gY29udGV4dC5jdXJyZW50VGlsZS5DT0Q7XG4gIH1cblxuICB2YXIgVGFnVHJlZSA9IGZ1bmN0aW9uIFRhZ1RyZWVDbG9zdXJlKCkge1xuICAgIGZ1bmN0aW9uIFRhZ1RyZWUod2lkdGgsIGhlaWdodCkge1xuICAgICAgdmFyIGxldmVsc0xlbmd0aCA9ICgwLCBfY29yZV91dGlscy5sb2cyKShNYXRoLm1heCh3aWR0aCwgaGVpZ2h0KSkgKyAxO1xuICAgICAgdGhpcy5sZXZlbHMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXZlbHNMZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbGV2ZWwgPSB7XG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyAyKTtcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFRhZ1RyZWUucHJvdG90eXBlID0ge1xuICAgICAgcmVzZXQ6IGZ1bmN0aW9uIFRhZ1RyZWVfcmVzZXQoaSwgaikge1xuICAgICAgICB2YXIgY3VycmVudExldmVsID0gMCxcbiAgICAgICAgICAgIHZhbHVlID0gMCxcbiAgICAgICAgICAgIGxldmVsO1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50TGV2ZWwgPCB0aGlzLmxldmVscy5sZW5ndGgpIHtcbiAgICAgICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICAgICAgdmFyIGluZGV4ID0gaSArIGogKiBsZXZlbC53aWR0aDtcblxuICAgICAgICAgIGlmIChsZXZlbC5pdGVtc1tpbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBsZXZlbC5pdGVtc1tpbmRleF07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXZlbC5pbmRleCA9IGluZGV4O1xuICAgICAgICAgIGkgPj49IDE7XG4gICAgICAgICAgaiA+Pj0gMTtcbiAgICAgICAgICBjdXJyZW50TGV2ZWwrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRMZXZlbC0tO1xuICAgICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICAgICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgICB9LFxuICAgICAgaW5jcmVtZW50VmFsdWU6IGZ1bmN0aW9uIFRhZ1RyZWVfaW5jcmVtZW50VmFsdWUoKSB7XG4gICAgICAgIHZhciBsZXZlbCA9IHRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtcbiAgICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdKys7XG4gICAgICB9LFxuICAgICAgbmV4dExldmVsOiBmdW5jdGlvbiBUYWdUcmVlX25leHRMZXZlbCgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRMZXZlbCA9IHRoaXMuY3VycmVudExldmVsO1xuICAgICAgICB2YXIgbGV2ZWwgPSB0aGlzLmxldmVsc1tjdXJyZW50TGV2ZWxdO1xuICAgICAgICB2YXIgdmFsdWUgPSBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF07XG4gICAgICAgIGN1cnJlbnRMZXZlbC0tO1xuXG4gICAgICAgIGlmIChjdXJyZW50TGV2ZWwgPCAwKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudExldmVsID0gY3VycmVudExldmVsO1xuICAgICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBUYWdUcmVlO1xuICB9KCk7XG5cbiAgdmFyIEluY2x1c2lvblRyZWUgPSBmdW5jdGlvbiBJbmNsdXNpb25UcmVlQ2xvc3VyZSgpIHtcbiAgICBmdW5jdGlvbiBJbmNsdXNpb25UcmVlKHdpZHRoLCBoZWlnaHQsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdmFyIGxldmVsc0xlbmd0aCA9ICgwLCBfY29yZV91dGlscy5sb2cyKShNYXRoLm1heCh3aWR0aCwgaGVpZ2h0KSkgKyAxO1xuICAgICAgdGhpcy5sZXZlbHMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXZlbHNMZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaXRlbXMgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gaXRlbXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgIGl0ZW1zW2pdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxldmVsID0ge1xuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBpdGVtc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyAyKTtcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEluY2x1c2lvblRyZWUucHJvdG90eXBlID0ge1xuICAgICAgcmVzZXQ6IGZ1bmN0aW9uIEluY2x1c2lvblRyZWVfcmVzZXQoaSwgaiwgc3RvcFZhbHVlKSB7XG4gICAgICAgIHZhciBjdXJyZW50TGV2ZWwgPSAwO1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50TGV2ZWwgPCB0aGlzLmxldmVscy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgbGV2ZWwgPSB0aGlzLmxldmVsc1tjdXJyZW50TGV2ZWxdO1xuICAgICAgICAgIHZhciBpbmRleCA9IGkgKyBqICogbGV2ZWwud2lkdGg7XG4gICAgICAgICAgbGV2ZWwuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBsZXZlbC5pdGVtc1tpbmRleF07XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IDB4ZmYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA+IHN0b3BWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWw7XG4gICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlcygpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGkgPj49IDE7XG4gICAgICAgICAgaiA+Pj0gMTtcbiAgICAgICAgICBjdXJyZW50TGV2ZWwrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudExldmVsID0gY3VycmVudExldmVsIC0gMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgaW5jcmVtZW50VmFsdWU6IGZ1bmN0aW9uIEluY2x1c2lvblRyZWVfaW5jcmVtZW50VmFsdWUoc3RvcFZhbHVlKSB7XG4gICAgICAgIHZhciBsZXZlbCA9IHRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtcbiAgICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gc3RvcFZhbHVlICsgMTtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVWYWx1ZXMoKTtcbiAgICAgIH0sXG4gICAgICBwcm9wYWdhdGVWYWx1ZXM6IGZ1bmN0aW9uIEluY2x1c2lvblRyZWVfcHJvcGFnYXRlVmFsdWVzKCkge1xuICAgICAgICB2YXIgbGV2ZWxJbmRleCA9IHRoaXMuY3VycmVudExldmVsO1xuICAgICAgICB2YXIgbGV2ZWwgPSB0aGlzLmxldmVsc1tsZXZlbEluZGV4XTtcbiAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGxldmVsLml0ZW1zW2xldmVsLmluZGV4XTtcblxuICAgICAgICB3aGlsZSAoLS1sZXZlbEluZGV4ID49IDApIHtcbiAgICAgICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2xldmVsSW5kZXhdO1xuICAgICAgICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG5leHRMZXZlbDogZnVuY3Rpb24gSW5jbHVzaW9uVHJlZV9uZXh0TGV2ZWwoKSB7XG4gICAgICAgIHZhciBjdXJyZW50TGV2ZWwgPSB0aGlzLmN1cnJlbnRMZXZlbDtcbiAgICAgICAgdmFyIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgdmFyIHZhbHVlID0gbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdO1xuICAgICAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0gPSAweGZmO1xuICAgICAgICBjdXJyZW50TGV2ZWwtLTtcblxuICAgICAgICBpZiAoY3VycmVudExldmVsIDwgMCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudExldmVsID0gY3VycmVudExldmVsO1xuICAgICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBJbmNsdXNpb25UcmVlO1xuICB9KCk7XG5cbiAgdmFyIEJpdE1vZGVsID0gZnVuY3Rpb24gQml0TW9kZWxDbG9zdXJlKCkge1xuICAgIHZhciBVTklGT1JNX0NPTlRFWFQgPSAxNztcbiAgICB2YXIgUlVOTEVOR1RIX0NPTlRFWFQgPSAxODtcbiAgICB2YXIgTExBbmRMSENvbnRleHRzTGFiZWwgPSBuZXcgVWludDhBcnJheShbMCwgNSwgOCwgMCwgMywgNywgOCwgMCwgNCwgNywgOCwgMCwgMCwgMCwgMCwgMCwgMSwgNiwgOCwgMCwgMywgNywgOCwgMCwgNCwgNywgOCwgMCwgMCwgMCwgMCwgMCwgMiwgNiwgOCwgMCwgMywgNywgOCwgMCwgNCwgNywgOCwgMCwgMCwgMCwgMCwgMCwgMiwgNiwgOCwgMCwgMywgNywgOCwgMCwgNCwgNywgOCwgMCwgMCwgMCwgMCwgMCwgMiwgNiwgOCwgMCwgMywgNywgOCwgMCwgNCwgNywgOF0pO1xuICAgIHZhciBITENvbnRleHRMYWJlbCA9IG5ldyBVaW50OEFycmF5KFswLCAzLCA0LCAwLCA1LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAxLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4XSk7XG4gICAgdmFyIEhIQ29udGV4dExhYmVsID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDAsIDEsIDIsIDIsIDAsIDIsIDIsIDIsIDAsIDAsIDAsIDAsIDAsIDMsIDQsIDUsIDAsIDQsIDUsIDUsIDAsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDYsIDcsIDcsIDAsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDgsIDgsIDgsIDAsIDgsIDgsIDgsIDAsIDgsIDgsIDgsIDAsIDAsIDAsIDAsIDAsIDgsIDgsIDgsIDAsIDgsIDgsIDgsIDAsIDgsIDgsIDhdKTtcblxuICAgIGZ1bmN0aW9uIEJpdE1vZGVsKHdpZHRoLCBoZWlnaHQsIHN1YmJhbmQsIHplcm9CaXRQbGFuZXMsIG1iKSB7XG4gICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGxldCBjb250ZXh0TGFiZWxUYWJsZTtcblxuICAgICAgaWYgKHN1YmJhbmQgPT09IFwiSEhcIikge1xuICAgICAgICBjb250ZXh0TGFiZWxUYWJsZSA9IEhIQ29udGV4dExhYmVsO1xuICAgICAgfSBlbHNlIGlmIChzdWJiYW5kID09PSBcIkhMXCIpIHtcbiAgICAgICAgY29udGV4dExhYmVsVGFibGUgPSBITENvbnRleHRMYWJlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHRMYWJlbFRhYmxlID0gTExBbmRMSENvbnRleHRzTGFiZWw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udGV4dExhYmVsVGFibGUgPSBjb250ZXh0TGFiZWxUYWJsZTtcbiAgICAgIHZhciBjb2VmZmljaWVudENvdW50ID0gd2lkdGggKiBoZWlnaHQ7XG4gICAgICB0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgdGhpcy5jb2VmZmljZW50c1NpZ24gPSBuZXcgVWludDhBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIGxldCBjb2VmZmljZW50c01hZ25pdHVkZTtcblxuICAgICAgaWYgKG1iID4gMTQpIHtcbiAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGUgPSBuZXcgVWludDMyQXJyYXkoY29lZmZpY2llbnRDb3VudCk7XG4gICAgICB9IGVsc2UgaWYgKG1iID4gNikge1xuICAgICAgICBjb2VmZmljZW50c01hZ25pdHVkZSA9IG5ldyBVaW50MTZBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gbmV3IFVpbnQ4QXJyYXkoY29lZmZpY2llbnRDb3VudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUgPSBjb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ0ZsYWdzID0gbmV3IFVpbnQ4QXJyYXkoY29lZmZpY2llbnRDb3VudCk7XG4gICAgICB2YXIgYml0c0RlY29kZWQgPSBuZXcgVWludDhBcnJheShjb2VmZmljaWVudENvdW50KTtcblxuICAgICAgaWYgKHplcm9CaXRQbGFuZXMgIT09IDApIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2VmZmljaWVudENvdW50OyBpKyspIHtcbiAgICAgICAgICBiaXRzRGVjb2RlZFtpXSA9IHplcm9CaXRQbGFuZXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5iaXRzRGVjb2RlZCA9IGJpdHNEZWNvZGVkO1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIEJpdE1vZGVsLnByb3RvdHlwZSA9IHtcbiAgICAgIHNldERlY29kZXI6IGZ1bmN0aW9uIEJpdE1vZGVsX3NldERlY29kZXIoZGVjb2Rlcikge1xuICAgICAgICB0aGlzLmRlY29kZXIgPSBkZWNvZGVyO1xuICAgICAgfSxcbiAgICAgIHJlc2V0OiBmdW5jdGlvbiBCaXRNb2RlbF9yZXNldCgpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0cyA9IG5ldyBJbnQ4QXJyYXkoMTkpO1xuICAgICAgICB0aGlzLmNvbnRleHRzWzBdID0gNCA8PCAxIHwgMDtcbiAgICAgICAgdGhpcy5jb250ZXh0c1tVTklGT1JNX0NPTlRFWFRdID0gNDYgPDwgMSB8IDA7XG4gICAgICAgIHRoaXMuY29udGV4dHNbUlVOTEVOR1RIX0NPTlRFWFRdID0gMyA8PCAxIHwgMDtcbiAgICAgIH0sXG4gICAgICBzZXROZWlnaGJvcnNTaWduaWZpY2FuY2U6IGZ1bmN0aW9uIEJpdE1vZGVsX3NldE5laWdoYm9yc1NpZ25pZmljYW5jZShyb3csIGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIG5laWdoYm9yc1NpZ25pZmljYW5jZSA9IHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIHZhciBsZWZ0ID0gY29sdW1uID4gMDtcbiAgICAgICAgdmFyIHJpZ2h0ID0gY29sdW1uICsgMSA8IHdpZHRoO1xuICAgICAgICB2YXIgaTtcblxuICAgICAgICBpZiAocm93ID4gMCkge1xuICAgICAgICAgIGkgPSBpbmRleCAtIHdpZHRoO1xuXG4gICAgICAgICAgaWYgKGxlZnQpIHtcbiAgICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpIC0gMV0gKz0gMHgxMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpICsgMV0gKz0gMHgxMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaV0gKz0gMHgwNDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3cgKyAxIDwgaGVpZ2h0KSB7XG4gICAgICAgICAgaSA9IGluZGV4ICsgd2lkdGg7XG5cbiAgICAgICAgICBpZiAobGVmdCkge1xuICAgICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgLSAxXSArPSAweDEwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyaWdodCkge1xuICAgICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgKyAxXSArPSAweDEwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpXSArPSAweDA0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxlZnQpIHtcbiAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXggLSAxXSArPSAweDAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4ICsgMV0gKz0gMHgwMTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF0gfD0gMHg4MDtcbiAgICAgIH0sXG4gICAgICBydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3M6IGZ1bmN0aW9uIEJpdE1vZGVsX3J1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzcygpIHtcbiAgICAgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZXI7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgdmFyIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgICAgdmFyIGNvZWZmaWNlbnRzU2lnbiA9IHRoaXMuY29lZmZpY2VudHNTaWduO1xuICAgICAgICB2YXIgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICAgIHZhciBwcm9jZXNzaW5nRmxhZ3MgPSB0aGlzLnByb2Nlc3NpbmdGbGFncztcbiAgICAgICAgdmFyIGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgICAgdmFyIGxhYmVscyA9IHRoaXMuY29udGV4dExhYmVsVGFibGU7XG4gICAgICAgIHZhciBiaXRzRGVjb2RlZCA9IHRoaXMuYml0c0RlY29kZWQ7XG4gICAgICAgIHZhciBwcm9jZXNzZWRJbnZlcnNlTWFzayA9IH4xO1xuICAgICAgICB2YXIgcHJvY2Vzc2VkTWFzayA9IDE7XG4gICAgICAgIHZhciBmaXJzdE1hZ25pdHVkZUJpdE1hc2sgPSAyO1xuXG4gICAgICAgIGZvciAodmFyIGkwID0gMDsgaTAgPCBoZWlnaHQ7IGkwICs9IDQpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGkwICogd2lkdGggKyBqO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpMSA9IDA7IGkxIDwgNDsgaTErKywgaW5kZXggKz0gd2lkdGgpIHtcbiAgICAgICAgICAgICAgdmFyIGkgPSBpMCArIGkxO1xuXG4gICAgICAgICAgICAgIGlmIChpID49IGhlaWdodCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSAmPSBwcm9jZXNzZWRJbnZlcnNlTWFzaztcblxuICAgICAgICAgICAgICBpZiAoY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdIHx8ICFuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgY29udGV4dExhYmVsID0gbGFiZWxzW25laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF1dO1xuICAgICAgICAgICAgICB2YXIgZGVjaXNpb24gPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgaWYgKGRlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNpZ24gPSB0aGlzLmRlY29kZVNpZ25CaXQoaSwgaiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvZWZmaWNlbnRzU2lnbltpbmRleF0gPSBzaWduO1xuICAgICAgICAgICAgICAgIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4XSA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UoaSwgaiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXhdKys7XG4gICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gcHJvY2Vzc2VkTWFzaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZWNvZGVTaWduQml0OiBmdW5jdGlvbiBCaXRNb2RlbF9kZWNvZGVTaWduQml0KHJvdywgY29sdW1uLCBpbmRleCkge1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIHZhciBjb2VmZmljZW50c01hZ25pdHVkZSA9IHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU7XG4gICAgICAgIHZhciBjb2VmZmljZW50c1NpZ24gPSB0aGlzLmNvZWZmaWNlbnRzU2lnbjtcbiAgICAgICAgdmFyIGNvbnRyaWJ1dGlvbiwgc2lnbjAsIHNpZ24xLCBzaWduaWZpY2FuY2UxO1xuICAgICAgICB2YXIgY29udGV4dExhYmVsLCBkZWNvZGVkO1xuICAgICAgICBzaWduaWZpY2FuY2UxID0gY29sdW1uID4gMCAmJiBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleCAtIDFdICE9PSAwO1xuXG4gICAgICAgIGlmIChjb2x1bW4gKyAxIDwgd2lkdGggJiYgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXggKyAxXSAhPT0gMCkge1xuICAgICAgICAgIHNpZ24xID0gY29lZmZpY2VudHNTaWduW2luZGV4ICsgMV07XG5cbiAgICAgICAgICBpZiAoc2lnbmlmaWNhbmNlMSkge1xuICAgICAgICAgICAgc2lnbjAgPSBjb2VmZmljZW50c1NpZ25baW5kZXggLSAxXTtcbiAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMSAtIHNpZ24wO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjEgLSBzaWduMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2lnbmlmaWNhbmNlMSkge1xuICAgICAgICAgIHNpZ24wID0gY29lZmZpY2VudHNTaWduW2luZGV4IC0gMV07XG4gICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24wIC0gc2lnbjA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJpYnV0aW9uID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBob3Jpem9udGFsQ29udHJpYnV0aW9uID0gMyAqIGNvbnRyaWJ1dGlvbjtcbiAgICAgICAgc2lnbmlmaWNhbmNlMSA9IHJvdyA+IDAgJiYgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXggLSB3aWR0aF0gIT09IDA7XG5cbiAgICAgICAgaWYgKHJvdyArIDEgPCBoZWlnaHQgJiYgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXggKyB3aWR0aF0gIT09IDApIHtcbiAgICAgICAgICBzaWduMSA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCArIHdpZHRoXTtcblxuICAgICAgICAgIGlmIChzaWduaWZpY2FuY2UxKSB7XG4gICAgICAgICAgICBzaWduMCA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCAtIHdpZHRoXTtcbiAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMSAtIHNpZ24wICsgaG9yaXpvbnRhbENvbnRyaWJ1dGlvbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjEgKyBob3Jpem9udGFsQ29udHJpYnV0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzaWduaWZpY2FuY2UxKSB7XG4gICAgICAgICAgc2lnbjAgPSBjb2VmZmljZW50c1NpZ25baW5kZXggLSB3aWR0aF07XG4gICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24wIC0gc2lnbjAgKyBob3Jpem9udGFsQ29udHJpYnV0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IGhvcml6b250YWxDb250cmlidXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udHJpYnV0aW9uID49IDApIHtcbiAgICAgICAgICBjb250ZXh0TGFiZWwgPSA5ICsgY29udHJpYnV0aW9uO1xuICAgICAgICAgIGRlY29kZWQgPSB0aGlzLmRlY29kZXIucmVhZEJpdCh0aGlzLmNvbnRleHRzLCBjb250ZXh0TGFiZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHRMYWJlbCA9IDkgLSBjb250cmlidXRpb247XG4gICAgICAgICAgZGVjb2RlZCA9IHRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMsIGNvbnRleHRMYWJlbCkgXiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlY29kZWQ7XG4gICAgICB9LFxuICAgICAgcnVuTWFnbml0dWRlUmVmaW5lbWVudFBhc3M6IGZ1bmN0aW9uIEJpdE1vZGVsX3J1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzKCkge1xuICAgICAgICB2YXIgZGVjb2RlciA9IHRoaXMuZGVjb2RlcjtcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICB2YXIgY29lZmZpY2VudHNNYWduaXR1ZGUgPSB0aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgICB2YXIgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICAgIHZhciBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICAgIHZhciBiaXRzRGVjb2RlZCA9IHRoaXMuYml0c0RlY29kZWQ7XG4gICAgICAgIHZhciBwcm9jZXNzaW5nRmxhZ3MgPSB0aGlzLnByb2Nlc3NpbmdGbGFncztcbiAgICAgICAgdmFyIHByb2Nlc3NlZE1hc2sgPSAxO1xuICAgICAgICB2YXIgZmlyc3RNYWduaXR1ZGVCaXRNYXNrID0gMjtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0O1xuICAgICAgICB2YXIgd2lkdGg0ID0gd2lkdGggKiA0O1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4MCA9IDAsIGluZGV4TmV4dDsgaW5kZXgwIDwgbGVuZ3RoOyBpbmRleDAgPSBpbmRleE5leHQpIHtcbiAgICAgICAgICBpbmRleE5leHQgPSBNYXRoLm1pbihsZW5ndGgsIGluZGV4MCArIHdpZHRoNCk7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gaW5kZXgwICsgajsgaW5kZXggPCBpbmRleE5leHQ7IGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgIGlmICghY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdIHx8IChwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdICYgcHJvY2Vzc2VkTWFzaykgIT09IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBjb250ZXh0TGFiZWwgPSAxNjtcblxuICAgICAgICAgICAgICBpZiAoKHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gJiBmaXJzdE1hZ25pdHVkZUJpdE1hc2spICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSBePSBmaXJzdE1hZ25pdHVkZUJpdE1hc2s7XG4gICAgICAgICAgICAgICAgdmFyIHNpZ25pZmljYW5jZSA9IG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF0gJiAxMjc7XG4gICAgICAgICAgICAgICAgY29udGV4dExhYmVsID0gc2lnbmlmaWNhbmNlID09PSAwID8gMTUgOiAxNDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBiaXQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICAgICAgICAgIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4XSA9IGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4XSA8PCAxIHwgYml0O1xuICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleF0rKztcbiAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSB8PSBwcm9jZXNzZWRNYXNrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bkNsZWFudXBQYXNzOiBmdW5jdGlvbiBCaXRNb2RlbF9ydW5DbGVhbnVwUGFzcygpIHtcbiAgICAgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZXI7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgdmFyIG5laWdoYm9yc1NpZ25pZmljYW5jZSA9IHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlO1xuICAgICAgICB2YXIgY29lZmZpY2VudHNNYWduaXR1ZGUgPSB0aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgICB2YXIgY29lZmZpY2VudHNTaWduID0gdGhpcy5jb2VmZmljZW50c1NpZ247XG4gICAgICAgIHZhciBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICAgIHZhciBsYWJlbHMgPSB0aGlzLmNvbnRleHRMYWJlbFRhYmxlO1xuICAgICAgICB2YXIgYml0c0RlY29kZWQgPSB0aGlzLmJpdHNEZWNvZGVkO1xuICAgICAgICB2YXIgcHJvY2Vzc2luZ0ZsYWdzID0gdGhpcy5wcm9jZXNzaW5nRmxhZ3M7XG4gICAgICAgIHZhciBwcm9jZXNzZWRNYXNrID0gMTtcbiAgICAgICAgdmFyIGZpcnN0TWFnbml0dWRlQml0TWFzayA9IDI7XG4gICAgICAgIHZhciBvbmVSb3dEb3duID0gd2lkdGg7XG4gICAgICAgIHZhciB0d29Sb3dzRG93biA9IHdpZHRoICogMjtcbiAgICAgICAgdmFyIHRocmVlUm93c0Rvd24gPSB3aWR0aCAqIDM7XG4gICAgICAgIHZhciBpTmV4dDtcblxuICAgICAgICBmb3IgKHZhciBpMCA9IDA7IGkwIDwgaGVpZ2h0OyBpMCA9IGlOZXh0KSB7XG4gICAgICAgICAgaU5leHQgPSBNYXRoLm1pbihpMCArIDQsIGhlaWdodCk7XG4gICAgICAgICAgdmFyIGluZGV4QmFzZSA9IGkwICogd2lkdGg7XG4gICAgICAgICAgdmFyIGNoZWNrQWxsRW1wdHkgPSBpMCArIDMgPCBoZWlnaHQ7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBpbmRleDAgPSBpbmRleEJhc2UgKyBqO1xuICAgICAgICAgICAgdmFyIGFsbEVtcHR5ID0gY2hlY2tBbGxFbXB0eSAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwXSA9PT0gMCAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwICsgb25lUm93RG93bl0gPT09IDAgJiYgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4MCArIHR3b1Jvd3NEb3duXSA9PT0gMCAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwICsgdGhyZWVSb3dzRG93bl0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MF0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MCArIG9uZVJvd0Rvd25dID09PSAwICYmIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleDAgKyB0d29Sb3dzRG93bl0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MCArIHRocmVlUm93c0Rvd25dID09PSAwO1xuICAgICAgICAgICAgdmFyIGkxID0gMCxcbiAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4MDtcbiAgICAgICAgICAgIHZhciBpID0gaTAsXG4gICAgICAgICAgICAgICAgc2lnbjtcblxuICAgICAgICAgICAgaWYgKGFsbEVtcHR5KSB7XG4gICAgICAgICAgICAgIHZhciBoYXNTaWduaWZpY2FudENvZWZmaWNlbnQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFJVTkxFTkdUSF9DT05URVhUKTtcblxuICAgICAgICAgICAgICBpZiAoIWhhc1NpZ25pZmljYW50Q29lZmZpY2VudCkge1xuICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MF0rKztcbiAgICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleDAgKyBvbmVSb3dEb3duXSsrO1xuICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIHR3b1Jvd3NEb3duXSsrO1xuICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIHRocmVlUm93c0Rvd25dKys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpMSA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgVU5JRk9STV9DT05URVhUKSA8PCAxIHwgZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpO1xuXG4gICAgICAgICAgICAgIGlmIChpMSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGkgPSBpMCArIGkxO1xuICAgICAgICAgICAgICAgIGluZGV4ICs9IGkxICogd2lkdGg7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzaWduID0gdGhpcy5kZWNvZGVTaWduQml0KGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgY29lZmZpY2VudHNTaWduW2luZGV4XSA9IHNpZ247XG4gICAgICAgICAgICAgIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4XSA9IDE7XG4gICAgICAgICAgICAgIHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSB8PSBmaXJzdE1hZ25pdHVkZUJpdE1hc2s7XG4gICAgICAgICAgICAgIGluZGV4ID0gaW5kZXgwO1xuXG4gICAgICAgICAgICAgIGZvciAodmFyIGkyID0gaTA7IGkyIDw9IGk7IGkyKyssIGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXhdKys7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpMSsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSBpMCArIGkxOyBpIDwgaU5leHQ7IGkrKywgaW5kZXggKz0gd2lkdGgpIHtcbiAgICAgICAgICAgICAgaWYgKGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4XSB8fCAocHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSAmIHByb2Nlc3NlZE1hc2spICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgY29udGV4dExhYmVsID0gbGFiZWxzW25laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF1dO1xuICAgICAgICAgICAgICB2YXIgZGVjaXNpb24gPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgaWYgKGRlY2lzaW9uID09PSAxKSB7XG4gICAgICAgICAgICAgICAgc2lnbiA9IHRoaXMuZGVjb2RlU2lnbkJpdChpLCBqLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29lZmZpY2VudHNTaWduW2luZGV4XSA9IHNpZ247XG4gICAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZShpLCBqLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSB8PSBmaXJzdE1hZ25pdHVkZUJpdE1hc2s7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleF0rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjaGVja1NlZ21lbnRhdGlvblN5bWJvbDogZnVuY3Rpb24gQml0TW9kZWxfY2hlY2tTZWdtZW50YXRpb25TeW1ib2woKSB7XG4gICAgICAgIHZhciBkZWNvZGVyID0gdGhpcy5kZWNvZGVyO1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB2YXIgc3ltYm9sID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpIDw8IDMgfCBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCkgPDwgMiB8IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgVU5JRk9STV9DT05URVhUKSA8PCAxIHwgZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpO1xuXG4gICAgICAgIGlmIChzeW1ib2wgIT09IDB4YSkge1xuICAgICAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEJpdE1vZGVsO1xuICB9KCk7XG5cbiAgdmFyIFRyYW5zZm9ybSA9IGZ1bmN0aW9uIFRyYW5zZm9ybUNsb3N1cmUoKSB7XG4gICAgZnVuY3Rpb24gVHJhbnNmb3JtKCkge31cblxuICAgIFRyYW5zZm9ybS5wcm90b3R5cGUuY2FsY3VsYXRlID0gZnVuY3Rpb24gdHJhbnNmb3JtQ2FsY3VsYXRlKHN1YmJhbmRzLCB1MCwgdjApIHtcbiAgICAgIHZhciBsbCA9IHN1YmJhbmRzWzBdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMSwgaWkgPSBzdWJiYW5kcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGxsID0gdGhpcy5pdGVyYXRlKGxsLCBzdWJiYW5kc1tpXSwgdTAsIHYwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxsO1xuICAgIH07XG5cbiAgICBUcmFuc2Zvcm0ucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZChidWZmZXIsIG9mZnNldCwgc2l6ZSkge1xuICAgICAgdmFyIGkxID0gb2Zmc2V0IC0gMSxcbiAgICAgICAgICBqMSA9IG9mZnNldCArIDE7XG4gICAgICB2YXIgaTIgPSBvZmZzZXQgKyBzaXplIC0gMixcbiAgICAgICAgICBqMiA9IG9mZnNldCArIHNpemU7XG4gICAgICBidWZmZXJbaTEtLV0gPSBidWZmZXJbajErK107XG4gICAgICBidWZmZXJbajIrK10gPSBidWZmZXJbaTItLV07XG4gICAgICBidWZmZXJbaTEtLV0gPSBidWZmZXJbajErK107XG4gICAgICBidWZmZXJbajIrK10gPSBidWZmZXJbaTItLV07XG4gICAgICBidWZmZXJbaTEtLV0gPSBidWZmZXJbajErK107XG4gICAgICBidWZmZXJbajIrK10gPSBidWZmZXJbaTItLV07XG4gICAgICBidWZmZXJbaTFdID0gYnVmZmVyW2oxXTtcbiAgICAgIGJ1ZmZlcltqMl0gPSBidWZmZXJbaTJdO1xuICAgIH07XG5cbiAgICBUcmFuc2Zvcm0ucHJvdG90eXBlLml0ZXJhdGUgPSBmdW5jdGlvbiBUcmFuc2Zvcm1faXRlcmF0ZShsbCwgaGxfbGhfaGgsIHUwLCB2MCkge1xuICAgICAgdmFyIGxsV2lkdGggPSBsbC53aWR0aCxcbiAgICAgICAgICBsbEhlaWdodCA9IGxsLmhlaWdodCxcbiAgICAgICAgICBsbEl0ZW1zID0gbGwuaXRlbXM7XG4gICAgICB2YXIgd2lkdGggPSBobF9saF9oaC53aWR0aDtcbiAgICAgIHZhciBoZWlnaHQgPSBobF9saF9oaC5oZWlnaHQ7XG4gICAgICB2YXIgaXRlbXMgPSBobF9saF9oaC5pdGVtcztcbiAgICAgIHZhciBpLCBqLCBrLCBsLCB1LCB2O1xuXG4gICAgICBmb3IgKGsgPSAwLCBpID0gMDsgaSA8IGxsSGVpZ2h0OyBpKyspIHtcbiAgICAgICAgbCA9IGkgKiAyICogd2lkdGg7XG5cbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGxsV2lkdGg7IGorKywgaysrLCBsICs9IDIpIHtcbiAgICAgICAgICBpdGVtc1tsXSA9IGxsSXRlbXNba107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGxJdGVtcyA9IGxsLml0ZW1zID0gbnVsbDtcbiAgICAgIHZhciBidWZmZXJQYWRkaW5nID0gNDtcbiAgICAgIHZhciByb3dCdWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KHdpZHRoICsgMiAqIGJ1ZmZlclBhZGRpbmcpO1xuXG4gICAgICBpZiAod2lkdGggPT09IDEpIHtcbiAgICAgICAgaWYgKCh1MCAmIDEpICE9PSAwKSB7XG4gICAgICAgICAgZm9yICh2ID0gMCwgayA9IDA7IHYgPCBoZWlnaHQ7IHYrKywgayArPSB3aWR0aCkge1xuICAgICAgICAgICAgaXRlbXNba10gKj0gMC41O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2ID0gMCwgayA9IDA7IHYgPCBoZWlnaHQ7IHYrKywgayArPSB3aWR0aCkge1xuICAgICAgICAgIHJvd0J1ZmZlci5zZXQoaXRlbXMuc3ViYXJyYXkoaywgayArIHdpZHRoKSwgYnVmZmVyUGFkZGluZyk7XG4gICAgICAgICAgdGhpcy5leHRlbmQocm93QnVmZmVyLCBidWZmZXJQYWRkaW5nLCB3aWR0aCk7XG4gICAgICAgICAgdGhpcy5maWx0ZXIocm93QnVmZmVyLCBidWZmZXJQYWRkaW5nLCB3aWR0aCk7XG4gICAgICAgICAgaXRlbXMuc2V0KHJvd0J1ZmZlci5zdWJhcnJheShidWZmZXJQYWRkaW5nLCBidWZmZXJQYWRkaW5nICsgd2lkdGgpLCBrKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbnVtQnVmZmVycyA9IDE2O1xuICAgICAgdmFyIGNvbEJ1ZmZlcnMgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bUJ1ZmZlcnM7IGkrKykge1xuICAgICAgICBjb2xCdWZmZXJzLnB1c2gobmV3IEZsb2F0MzJBcnJheShoZWlnaHQgKyAyICogYnVmZmVyUGFkZGluZykpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYixcbiAgICAgICAgICBjdXJyZW50QnVmZmVyID0gMDtcbiAgICAgIGxsID0gYnVmZmVyUGFkZGluZyArIGhlaWdodDtcblxuICAgICAgaWYgKGhlaWdodCA9PT0gMSkge1xuICAgICAgICBpZiAoKHYwICYgMSkgIT09IDApIHtcbiAgICAgICAgICBmb3IgKHUgPSAwOyB1IDwgd2lkdGg7IHUrKykge1xuICAgICAgICAgICAgaXRlbXNbdV0gKj0gMC41O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh1ID0gMDsgdSA8IHdpZHRoOyB1KyspIHtcbiAgICAgICAgICBpZiAoY3VycmVudEJ1ZmZlciA9PT0gMCkge1xuICAgICAgICAgICAgbnVtQnVmZmVycyA9IE1hdGgubWluKHdpZHRoIC0gdSwgbnVtQnVmZmVycyk7XG5cbiAgICAgICAgICAgIGZvciAoayA9IHUsIGwgPSBidWZmZXJQYWRkaW5nOyBsIDwgbGw7IGsgKz0gd2lkdGgsIGwrKykge1xuICAgICAgICAgICAgICBmb3IgKGIgPSAwOyBiIDwgbnVtQnVmZmVyczsgYisrKSB7XG4gICAgICAgICAgICAgICAgY29sQnVmZmVyc1tiXVtsXSA9IGl0ZW1zW2sgKyBiXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50QnVmZmVyID0gbnVtQnVmZmVycztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50QnVmZmVyLS07XG4gICAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbEJ1ZmZlcnNbY3VycmVudEJ1ZmZlcl07XG4gICAgICAgICAgdGhpcy5leHRlbmQoYnVmZmVyLCBidWZmZXJQYWRkaW5nLCBoZWlnaHQpO1xuICAgICAgICAgIHRoaXMuZmlsdGVyKGJ1ZmZlciwgYnVmZmVyUGFkZGluZywgaGVpZ2h0KTtcblxuICAgICAgICAgIGlmIChjdXJyZW50QnVmZmVyID09PSAwKSB7XG4gICAgICAgICAgICBrID0gdSAtIG51bUJ1ZmZlcnMgKyAxO1xuXG4gICAgICAgICAgICBmb3IgKGwgPSBidWZmZXJQYWRkaW5nOyBsIDwgbGw7IGsgKz0gd2lkdGgsIGwrKykge1xuICAgICAgICAgICAgICBmb3IgKGIgPSAwOyBiIDwgbnVtQnVmZmVyczsgYisrKSB7XG4gICAgICAgICAgICAgICAgaXRlbXNbayArIGJdID0gY29sQnVmZmVyc1tiXVtsXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBpdGVtc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFRyYW5zZm9ybTtcbiAgfSgpO1xuXG4gIHZhciBJcnJldmVyc2libGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiBJcnJldmVyc2libGVUcmFuc2Zvcm1DbG9zdXJlKCkge1xuICAgIGZ1bmN0aW9uIElycmV2ZXJzaWJsZVRyYW5zZm9ybSgpIHtcbiAgICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIElycmV2ZXJzaWJsZVRyYW5zZm9ybS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zZm9ybS5wcm90b3R5cGUpO1xuXG4gICAgSXJyZXZlcnNpYmxlVHJhbnNmb3JtLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiBpcnJldmVyc2libGVUcmFuc2Zvcm1GaWx0ZXIoeCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICAgIHZhciBsZW4gPSBsZW5ndGggPj4gMTtcbiAgICAgIG9mZnNldCA9IG9mZnNldCB8IDA7XG4gICAgICB2YXIgaiwgbiwgY3VycmVudCwgbmV4dDtcbiAgICAgIHZhciBhbHBoYSA9IC0xLjU4NjEzNDM0MjA1OTkyNDtcbiAgICAgIHZhciBiZXRhID0gLTAuMDUyOTgwMTE4NTcyOTYxO1xuICAgICAgdmFyIGdhbW1hID0gMC44ODI5MTEwNzU1MzA5MzQ7XG4gICAgICB2YXIgZGVsdGEgPSAwLjQ0MzUwNjg1MjA0Mzk3MTtcbiAgICAgIHZhciBLID0gMS4yMzAxNzQxMDQ5MTQwMDE7XG4gICAgICB2YXIgS18gPSAxIC8gSztcbiAgICAgIGogPSBvZmZzZXQgLSAzO1xuXG4gICAgICBmb3IgKG4gPSBsZW4gKyA0OyBuLS07IGogKz0gMikge1xuICAgICAgICB4W2pdICo9IEtfO1xuICAgICAgfVxuXG4gICAgICBqID0gb2Zmc2V0IC0gMjtcbiAgICAgIGN1cnJlbnQgPSBkZWx0YSAqIHhbaiAtIDFdO1xuXG4gICAgICBmb3IgKG4gPSBsZW4gKyAzOyBuLS07IGogKz0gMikge1xuICAgICAgICBuZXh0ID0gZGVsdGEgKiB4W2ogKyAxXTtcbiAgICAgICAgeFtqXSA9IEsgKiB4W2pdIC0gY3VycmVudCAtIG5leHQ7XG5cbiAgICAgICAgaWYgKG4tLSkge1xuICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICBjdXJyZW50ID0gZGVsdGEgKiB4W2ogKyAxXTtcbiAgICAgICAgICB4W2pdID0gSyAqIHhbal0gLSBjdXJyZW50IC0gbmV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBqID0gb2Zmc2V0IC0gMTtcbiAgICAgIGN1cnJlbnQgPSBnYW1tYSAqIHhbaiAtIDFdO1xuXG4gICAgICBmb3IgKG4gPSBsZW4gKyAyOyBuLS07IGogKz0gMikge1xuICAgICAgICBuZXh0ID0gZ2FtbWEgKiB4W2ogKyAxXTtcbiAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcblxuICAgICAgICBpZiAobi0tKSB7XG4gICAgICAgICAgaiArPSAyO1xuICAgICAgICAgIGN1cnJlbnQgPSBnYW1tYSAqIHhbaiArIDFdO1xuICAgICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaiA9IG9mZnNldDtcbiAgICAgIGN1cnJlbnQgPSBiZXRhICogeFtqIC0gMV07XG5cbiAgICAgIGZvciAobiA9IGxlbiArIDE7IG4tLTsgaiArPSAyKSB7XG4gICAgICAgIG5leHQgPSBiZXRhICogeFtqICsgMV07XG4gICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG5cbiAgICAgICAgaWYgKG4tLSkge1xuICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICBjdXJyZW50ID0gYmV0YSAqIHhbaiArIDFdO1xuICAgICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxlbiAhPT0gMCkge1xuICAgICAgICBqID0gb2Zmc2V0ICsgMTtcbiAgICAgICAgY3VycmVudCA9IGFscGhhICogeFtqIC0gMV07XG5cbiAgICAgICAgZm9yIChuID0gbGVuOyBuLS07IGogKz0gMikge1xuICAgICAgICAgIG5leHQgPSBhbHBoYSAqIHhbaiArIDFdO1xuICAgICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG5cbiAgICAgICAgICBpZiAobi0tKSB7XG4gICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICBjdXJyZW50ID0gYWxwaGEgKiB4W2ogKyAxXTtcbiAgICAgICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gSXJyZXZlcnNpYmxlVHJhbnNmb3JtO1xuICB9KCk7XG5cbiAgdmFyIFJldmVyc2libGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiBSZXZlcnNpYmxlVHJhbnNmb3JtQ2xvc3VyZSgpIHtcbiAgICBmdW5jdGlvbiBSZXZlcnNpYmxlVHJhbnNmb3JtKCkge1xuICAgICAgVHJhbnNmb3JtLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgUmV2ZXJzaWJsZVRyYW5zZm9ybS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zZm9ybS5wcm90b3R5cGUpO1xuXG4gICAgUmV2ZXJzaWJsZVRyYW5zZm9ybS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gcmV2ZXJzaWJsZVRyYW5zZm9ybUZpbHRlcih4LCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgdmFyIGxlbiA9IGxlbmd0aCA+PiAxO1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMDtcbiAgICAgIHZhciBqLCBuO1xuXG4gICAgICBmb3IgKGogPSBvZmZzZXQsIG4gPSBsZW4gKyAxOyBuLS07IGogKz0gMikge1xuICAgICAgICB4W2pdIC09IHhbaiAtIDFdICsgeFtqICsgMV0gKyAyID4+IDI7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaiA9IG9mZnNldCArIDEsIG4gPSBsZW47IG4tLTsgaiArPSAyKSB7XG4gICAgICAgIHhbal0gKz0geFtqIC0gMV0gKyB4W2ogKyAxXSA+PiAxO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gUmV2ZXJzaWJsZVRyYW5zZm9ybTtcbiAgfSgpO1xuXG4gIHJldHVybiBKcHhJbWFnZTtcbn0oKTtcblxuZXhwb3J0cy5KcHhJbWFnZSA9IEpweEltYWdlO1xuXG4vKioqLyB9KSxcbi8qIDIyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNhbGN1bGF0ZVNIQTUxMiA9IGV4cG9ydHMuY2FsY3VsYXRlU0hBMzg0ID0gZXhwb3J0cy5jYWxjdWxhdGVTSEEyNTYgPSBleHBvcnRzLmNhbGN1bGF0ZU1ENSA9IGV4cG9ydHMuUERGMjAgPSBleHBvcnRzLlBERjE3ID0gZXhwb3J0cy5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5ID0gZXhwb3J0cy5BUkNGb3VyQ2lwaGVyID0gZXhwb3J0cy5BRVMyNTZDaXBoZXIgPSBleHBvcnRzLkFFUzEyOENpcGhlciA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIEFSQ0ZvdXJDaXBoZXIgPSBmdW5jdGlvbiBBUkNGb3VyQ2lwaGVyQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQVJDRm91ckNpcGhlcihrZXkpIHtcbiAgICB0aGlzLmEgPSAwO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgIHZhciBpLFxuICAgICAgICBqID0gMCxcbiAgICAgICAgdG1wLFxuICAgICAgICBrZXlMZW5ndGggPSBrZXkubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgICBzW2ldID0gaTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgIHRtcCA9IHNbaV07XG4gICAgICBqID0gaiArIHRtcCArIGtleVtpICUga2V5TGVuZ3RoXSAmIDB4ZmY7XG4gICAgICBzW2ldID0gc1tqXTtcbiAgICAgIHNbal0gPSB0bXA7XG4gICAgfVxuXG4gICAgdGhpcy5zID0gcztcbiAgfVxuXG4gIEFSQ0ZvdXJDaXBoZXIucHJvdG90eXBlID0ge1xuICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gQVJDRm91ckNpcGhlcl9lbmNyeXB0QmxvY2soZGF0YSkge1xuICAgICAgdmFyIGksXG4gICAgICAgICAgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgICAgIHRtcCxcbiAgICAgICAgICB0bXAyO1xuICAgICAgdmFyIGEgPSB0aGlzLmEsXG4gICAgICAgICAgYiA9IHRoaXMuYixcbiAgICAgICAgICBzID0gdGhpcy5zO1xuICAgICAgdmFyIG91dHB1dCA9IG5ldyBVaW50OEFycmF5KG4pO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGEgPSBhICsgMSAmIDB4ZmY7XG4gICAgICAgIHRtcCA9IHNbYV07XG4gICAgICAgIGIgPSBiICsgdG1wICYgMHhmZjtcbiAgICAgICAgdG1wMiA9IHNbYl07XG4gICAgICAgIHNbYV0gPSB0bXAyO1xuICAgICAgICBzW2JdID0gdG1wO1xuICAgICAgICBvdXRwdXRbaV0gPSBkYXRhW2ldIF4gc1t0bXAgKyB0bXAyICYgMHhmZl07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYSA9IGE7XG4gICAgICB0aGlzLmIgPSBiO1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG4gIH07XG4gIEFSQ0ZvdXJDaXBoZXIucHJvdG90eXBlLmRlY3J5cHRCbG9jayA9IEFSQ0ZvdXJDaXBoZXIucHJvdG90eXBlLmVuY3J5cHRCbG9jaztcbiAgcmV0dXJuIEFSQ0ZvdXJDaXBoZXI7XG59KCk7XG5cbmV4cG9ydHMuQVJDRm91ckNpcGhlciA9IEFSQ0ZvdXJDaXBoZXI7XG5cbnZhciBjYWxjdWxhdGVNRDUgPSBmdW5jdGlvbiBjYWxjdWxhdGVNRDVDbG9zdXJlKCkge1xuICB2YXIgciA9IG5ldyBVaW50OEFycmF5KFs3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA1LCA5LCAxNCwgMjAsIDUsIDksIDE0LCAyMCwgNSwgOSwgMTQsIDIwLCA1LCA5LCAxNCwgMjAsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDYsIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjFdKTtcbiAgdmFyIGsgPSBuZXcgSW50MzJBcnJheShbLTY4MDg3NjkzNiwgLTM4OTU2NDU4NiwgNjA2MTA1ODE5LCAtMTA0NDUyNTMzMCwgLTE3NjQxODg5NywgMTIwMDA4MDQyNiwgLTE0NzMyMzEzNDEsIC00NTcwNTk4MywgMTc3MDAzNTQxNiwgLTE5NTg0MTQ0MTcsIC00MjA2MywgLTE5OTA0MDQxNjIsIDE4MDQ2MDM2ODIsIC00MDM0MTEwMSwgLTE1MDIwMDIyOTAsIDEyMzY1MzUzMjksIC0xNjU3OTY1MTAsIC0xMDY5NTAxNjMyLCA2NDM3MTc3MTMsIC0zNzM4OTczMDIsIC03MDE1NTg2OTEsIDM4MDE2MDgzLCAtNjYwNDc4MzM1LCAtNDA1NTM3ODQ4LCA1Njg0NDY0MzgsIC0xMDE5ODAzNjkwLCAtMTg3MzYzOTYxLCAxMTYzNTMxNTAxLCAtMTQ0NDY4MTQ2NywgLTUxNDAzNzg0LCAxNzM1MzI4NDczLCAtMTkyNjYwNzczNCwgLTM3ODU1OCwgLTIwMjI1NzQ0NjMsIDE4MzkwMzA1NjIsIC0zNTMwOTU1NiwgLTE1MzA5OTIwNjAsIDEyNzI4OTMzNTMsIC0xNTU0OTc2MzIsIC0xMDk0NzMwNjQwLCA2ODEyNzkxNzQsIC0zNTg1MzcyMjIsIC03MjI1MjE5NzksIDc2MDI5MTg5LCAtNjQwMzY0NDg3LCAtNDIxODE1ODM1LCA1MzA3NDI1MjAsIC05OTUzMzg2NTEsIC0xOTg2MzA4NDQsIDExMjY4OTE0MTUsIC0xNDE2MzU0OTA1LCAtNTc0MzQwNTUsIDE3MDA0ODU1NzEsIC0xODk0OTg2NjA2LCAtMTA1MTUyMywgLTIwNTQ5MjI3OTksIDE4NzMzMTMzNTksIC0zMDYxMTc0NCwgLTE1NjAxOTgzODAsIDEzMDkxNTE2NDksIC0xNDU1MjMwNzAsIC0xMTIwMjEwMzc5LCA3MTg3ODcyNTksIC0zNDM0ODU1NTFdKTtcblxuICBmdW5jdGlvbiBoYXNoKGRhdGEsIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgdmFyIGgwID0gMTczMjU4NDE5MyxcbiAgICAgICAgaDEgPSAtMjcxNzMzODc5LFxuICAgICAgICBoMiA9IC0xNzMyNTg0MTk0LFxuICAgICAgICBoMyA9IDI3MTczMzg3ODtcbiAgICB2YXIgcGFkZGVkTGVuZ3RoID0gbGVuZ3RoICsgNzIgJiB+NjM7XG4gICAgdmFyIHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgdmFyIGksIGosIG47XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHBhZGRlZFtpXSA9IGRhdGFbb2Zmc2V0KytdO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICBuID0gcGFkZGVkTGVuZ3RoIC0gODtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgcGFkZGVkW2krK10gPSAwO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoIDw8IDMgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDUgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDEzICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAyMSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4+IDI5ICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICB2YXIgdyA9IG5ldyBJbnQzMkFycmF5KDE2KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBwYWRkZWRMZW5ndGg7KSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraiwgaSArPSA0KSB7XG4gICAgICAgIHdbal0gPSBwYWRkZWRbaV0gfCBwYWRkZWRbaSArIDFdIDw8IDggfCBwYWRkZWRbaSArIDJdIDw8IDE2IHwgcGFkZGVkW2kgKyAzXSA8PCAyNDtcbiAgICAgIH1cblxuICAgICAgdmFyIGEgPSBoMCxcbiAgICAgICAgICBiID0gaDEsXG4gICAgICAgICAgYyA9IGgyLFxuICAgICAgICAgIGQgPSBoMyxcbiAgICAgICAgICBmLFxuICAgICAgICAgIGc7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgKytqKSB7XG4gICAgICAgIGlmIChqIDwgMTYpIHtcbiAgICAgICAgICBmID0gYiAmIGMgfCB+YiAmIGQ7XG4gICAgICAgICAgZyA9IGo7XG4gICAgICAgIH0gZWxzZSBpZiAoaiA8IDMyKSB7XG4gICAgICAgICAgZiA9IGQgJiBiIHwgfmQgJiBjO1xuICAgICAgICAgIGcgPSA1ICogaiArIDEgJiAxNTtcbiAgICAgICAgfSBlbHNlIGlmIChqIDwgNDgpIHtcbiAgICAgICAgICBmID0gYiBeIGMgXiBkO1xuICAgICAgICAgIGcgPSAzICogaiArIDUgJiAxNTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmID0gYyBeIChiIHwgfmQpO1xuICAgICAgICAgIGcgPSA3ICogaiAmIDE1O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRtcCA9IGQsXG4gICAgICAgICAgICByb3RhdGVBcmcgPSBhICsgZiArIGtbal0gKyB3W2ddIHwgMCxcbiAgICAgICAgICAgIHJvdGF0ZSA9IHJbal07XG4gICAgICAgIGQgPSBjO1xuICAgICAgICBjID0gYjtcbiAgICAgICAgYiA9IGIgKyAocm90YXRlQXJnIDw8IHJvdGF0ZSB8IHJvdGF0ZUFyZyA+Pj4gMzIgLSByb3RhdGUpIHwgMDtcbiAgICAgICAgYSA9IHRtcDtcbiAgICAgIH1cblxuICAgICAgaDAgPSBoMCArIGEgfCAwO1xuICAgICAgaDEgPSBoMSArIGIgfCAwO1xuICAgICAgaDIgPSBoMiArIGMgfCAwO1xuICAgICAgaDMgPSBoMyArIGQgfCAwO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShbaDAgJiAweEZGLCBoMCA+PiA4ICYgMHhGRiwgaDAgPj4gMTYgJiAweEZGLCBoMCA+Pj4gMjQgJiAweEZGLCBoMSAmIDB4RkYsIGgxID4+IDggJiAweEZGLCBoMSA+PiAxNiAmIDB4RkYsIGgxID4+PiAyNCAmIDB4RkYsIGgyICYgMHhGRiwgaDIgPj4gOCAmIDB4RkYsIGgyID4+IDE2ICYgMHhGRiwgaDIgPj4+IDI0ICYgMHhGRiwgaDMgJiAweEZGLCBoMyA+PiA4ICYgMHhGRiwgaDMgPj4gMTYgJiAweEZGLCBoMyA+Pj4gMjQgJiAweEZGXSk7XG4gIH1cblxuICByZXR1cm4gaGFzaDtcbn0oKTtcblxuZXhwb3J0cy5jYWxjdWxhdGVNRDUgPSBjYWxjdWxhdGVNRDU7XG5cbnZhciBXb3JkNjQgPSBmdW5jdGlvbiBXb3JkNjRDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBXb3JkNjQoaGlnaEludGVnZXIsIGxvd0ludGVnZXIpIHtcbiAgICB0aGlzLmhpZ2ggPSBoaWdoSW50ZWdlciB8IDA7XG4gICAgdGhpcy5sb3cgPSBsb3dJbnRlZ2VyIHwgMDtcbiAgfVxuXG4gIFdvcmQ2NC5wcm90b3R5cGUgPSB7XG4gICAgYW5kOiBmdW5jdGlvbiBXb3JkNjRfYW5kKHdvcmQpIHtcbiAgICAgIHRoaXMuaGlnaCAmPSB3b3JkLmhpZ2g7XG4gICAgICB0aGlzLmxvdyAmPSB3b3JkLmxvdztcbiAgICB9LFxuICAgIHhvcjogZnVuY3Rpb24gV29yZDY0X3hvcih3b3JkKSB7XG4gICAgICB0aGlzLmhpZ2ggXj0gd29yZC5oaWdoO1xuICAgICAgdGhpcy5sb3cgXj0gd29yZC5sb3c7XG4gICAgfSxcbiAgICBvcjogZnVuY3Rpb24gV29yZDY0X29yKHdvcmQpIHtcbiAgICAgIHRoaXMuaGlnaCB8PSB3b3JkLmhpZ2g7XG4gICAgICB0aGlzLmxvdyB8PSB3b3JkLmxvdztcbiAgICB9LFxuICAgIHNoaWZ0UmlnaHQ6IGZ1bmN0aW9uIFdvcmQ2NF9zaGlmdFJpZ2h0KHBsYWNlcykge1xuICAgICAgaWYgKHBsYWNlcyA+PSAzMikge1xuICAgICAgICB0aGlzLmxvdyA9IHRoaXMuaGlnaCA+Pj4gcGxhY2VzIC0gMzIgfCAwO1xuICAgICAgICB0aGlzLmhpZ2ggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb3cgPSB0aGlzLmxvdyA+Pj4gcGxhY2VzIHwgdGhpcy5oaWdoIDw8IDMyIC0gcGxhY2VzO1xuICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLmhpZ2ggPj4+IHBsYWNlcyB8IDA7XG4gICAgICB9XG4gICAgfSxcbiAgICBzaGlmdExlZnQ6IGZ1bmN0aW9uIFdvcmQ2NF9zaGlmdExlZnQocGxhY2VzKSB7XG4gICAgICBpZiAocGxhY2VzID49IDMyKSB7XG4gICAgICAgIHRoaXMuaGlnaCA9IHRoaXMubG93IDw8IHBsYWNlcyAtIDMyO1xuICAgICAgICB0aGlzLmxvdyA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLmhpZ2ggPDwgcGxhY2VzIHwgdGhpcy5sb3cgPj4+IDMyIC0gcGxhY2VzO1xuICAgICAgICB0aGlzLmxvdyA9IHRoaXMubG93IDw8IHBsYWNlcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHJvdGF0ZVJpZ2h0OiBmdW5jdGlvbiBXb3JkNjRfcm90YXRlUmlnaHQocGxhY2VzKSB7XG4gICAgICB2YXIgbG93LCBoaWdoO1xuXG4gICAgICBpZiAocGxhY2VzICYgMzIpIHtcbiAgICAgICAgaGlnaCA9IHRoaXMubG93O1xuICAgICAgICBsb3cgPSB0aGlzLmhpZ2g7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb3cgPSB0aGlzLmxvdztcbiAgICAgICAgaGlnaCA9IHRoaXMuaGlnaDtcbiAgICAgIH1cblxuICAgICAgcGxhY2VzICY9IDMxO1xuICAgICAgdGhpcy5sb3cgPSBsb3cgPj4+IHBsYWNlcyB8IGhpZ2ggPDwgMzIgLSBwbGFjZXM7XG4gICAgICB0aGlzLmhpZ2ggPSBoaWdoID4+PiBwbGFjZXMgfCBsb3cgPDwgMzIgLSBwbGFjZXM7XG4gICAgfSxcbiAgICBub3Q6IGZ1bmN0aW9uIFdvcmQ2NF9ub3QoKSB7XG4gICAgICB0aGlzLmhpZ2ggPSB+dGhpcy5oaWdoO1xuICAgICAgdGhpcy5sb3cgPSB+dGhpcy5sb3c7XG4gICAgfSxcbiAgICBhZGQ6IGZ1bmN0aW9uIFdvcmQ2NF9hZGQod29yZCkge1xuICAgICAgdmFyIGxvd0FkZCA9ICh0aGlzLmxvdyA+Pj4gMCkgKyAod29yZC5sb3cgPj4+IDApO1xuICAgICAgdmFyIGhpZ2hBZGQgPSAodGhpcy5oaWdoID4+PiAwKSArICh3b3JkLmhpZ2ggPj4+IDApO1xuXG4gICAgICBpZiAobG93QWRkID4gMHhmZmZmZmZmZikge1xuICAgICAgICBoaWdoQWRkICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG93ID0gbG93QWRkIHwgMDtcbiAgICAgIHRoaXMuaGlnaCA9IGhpZ2hBZGQgfCAwO1xuICAgIH0sXG4gICAgY29weVRvOiBmdW5jdGlvbiBXb3JkNjRfY29weVRvKGJ5dGVzLCBvZmZzZXQpIHtcbiAgICAgIGJ5dGVzW29mZnNldF0gPSB0aGlzLmhpZ2ggPj4+IDI0ICYgMHhmZjtcbiAgICAgIGJ5dGVzW29mZnNldCArIDFdID0gdGhpcy5oaWdoID4+IDE2ICYgMHhmZjtcbiAgICAgIGJ5dGVzW29mZnNldCArIDJdID0gdGhpcy5oaWdoID4+IDggJiAweGZmO1xuICAgICAgYnl0ZXNbb2Zmc2V0ICsgM10gPSB0aGlzLmhpZ2ggJiAweGZmO1xuICAgICAgYnl0ZXNbb2Zmc2V0ICsgNF0gPSB0aGlzLmxvdyA+Pj4gMjQgJiAweGZmO1xuICAgICAgYnl0ZXNbb2Zmc2V0ICsgNV0gPSB0aGlzLmxvdyA+PiAxNiAmIDB4ZmY7XG4gICAgICBieXRlc1tvZmZzZXQgKyA2XSA9IHRoaXMubG93ID4+IDggJiAweGZmO1xuICAgICAgYnl0ZXNbb2Zmc2V0ICsgN10gPSB0aGlzLmxvdyAmIDB4ZmY7XG4gICAgfSxcbiAgICBhc3NpZ246IGZ1bmN0aW9uIFdvcmQ2NF9hc3NpZ24od29yZCkge1xuICAgICAgdGhpcy5oaWdoID0gd29yZC5oaWdoO1xuICAgICAgdGhpcy5sb3cgPSB3b3JkLmxvdztcbiAgICB9XG4gIH07XG4gIHJldHVybiBXb3JkNjQ7XG59KCk7XG5cbnZhciBjYWxjdWxhdGVTSEEyNTYgPSBmdW5jdGlvbiBjYWxjdWxhdGVTSEEyNTZDbG9zdXJlKCkge1xuICBmdW5jdGlvbiByb3RyKHgsIG4pIHtcbiAgICByZXR1cm4geCA+Pj4gbiB8IHggPDwgMzIgLSBuO1xuICB9XG5cbiAgZnVuY3Rpb24gY2goeCwgeSwgeikge1xuICAgIHJldHVybiB4ICYgeSBeIH54ICYgejtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1haih4LCB5LCB6KSB7XG4gICAgcmV0dXJuIHggJiB5IF4geCAmIHogXiB5ICYgejtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ21hKHgpIHtcbiAgICByZXR1cm4gcm90cih4LCAyKSBeIHJvdHIoeCwgMTMpIF4gcm90cih4LCAyMik7XG4gIH1cblxuICBmdW5jdGlvbiBzaWdtYVByaW1lKHgpIHtcbiAgICByZXR1cm4gcm90cih4LCA2KSBeIHJvdHIoeCwgMTEpIF4gcm90cih4LCAyNSk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXR0bGVTaWdtYSh4KSB7XG4gICAgcmV0dXJuIHJvdHIoeCwgNykgXiByb3RyKHgsIDE4KSBeIHggPj4+IDM7XG4gIH1cblxuICBmdW5jdGlvbiBsaXR0bGVTaWdtYVByaW1lKHgpIHtcbiAgICByZXR1cm4gcm90cih4LCAxNykgXiByb3RyKHgsIDE5KSBeIHggPj4+IDEwO1xuICB9XG5cbiAgdmFyIGsgPSBbMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSwgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSwgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMywgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCwgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYywgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSwgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNywgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NywgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMywgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSwgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMywgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCwgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSwgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMywgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCwgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMl07XG5cbiAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgIHZhciBoMCA9IDB4NmEwOWU2NjcsXG4gICAgICAgIGgxID0gMHhiYjY3YWU4NSxcbiAgICAgICAgaDIgPSAweDNjNmVmMzcyLFxuICAgICAgICBoMyA9IDB4YTU0ZmY1M2EsXG4gICAgICAgIGg0ID0gMHg1MTBlNTI3ZixcbiAgICAgICAgaDUgPSAweDliMDU2ODhjLFxuICAgICAgICBoNiA9IDB4MWY4M2Q5YWIsXG4gICAgICAgIGg3ID0gMHg1YmUwY2QxOTtcbiAgICB2YXIgcGFkZGVkTGVuZ3RoID0gTWF0aC5jZWlsKChsZW5ndGggKyA5KSAvIDY0KSAqIDY0O1xuICAgIHZhciBwYWRkZWQgPSBuZXcgVWludDhBcnJheShwYWRkZWRMZW5ndGgpO1xuICAgIHZhciBpLCBqLCBuO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBwYWRkZWRbaV0gPSBkYXRhW29mZnNldCsrXTtcbiAgICB9XG5cbiAgICBwYWRkZWRbaSsrXSA9IDB4ODA7XG4gICAgbiA9IHBhZGRlZExlbmd0aCAtIDg7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICB9XG5cbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+Pj4gMjkgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDIxICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAxMyAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gNSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPDwgMyAmIDB4ZmY7XG4gICAgdmFyIHcgPSBuZXcgVWludDMyQXJyYXkoNjQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhZGRlZExlbmd0aDspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgIHdbal0gPSBwYWRkZWRbaV0gPDwgMjQgfCBwYWRkZWRbaSArIDFdIDw8IDE2IHwgcGFkZGVkW2kgKyAyXSA8PCA4IHwgcGFkZGVkW2kgKyAzXTtcbiAgICAgICAgaSArPSA0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSAxNjsgaiA8IDY0OyArK2opIHtcbiAgICAgICAgd1tqXSA9IGxpdHRsZVNpZ21hUHJpbWUod1tqIC0gMl0pICsgd1tqIC0gN10gKyBsaXR0bGVTaWdtYSh3W2ogLSAxNV0pICsgd1tqIC0gMTZdIHwgMDtcbiAgICAgIH1cblxuICAgICAgdmFyIGEgPSBoMCxcbiAgICAgICAgICBiID0gaDEsXG4gICAgICAgICAgYyA9IGgyLFxuICAgICAgICAgIGQgPSBoMyxcbiAgICAgICAgICBlID0gaDQsXG4gICAgICAgICAgZiA9IGg1LFxuICAgICAgICAgIGcgPSBoNixcbiAgICAgICAgICBoID0gaDcsXG4gICAgICAgICAgdDEsXG4gICAgICAgICAgdDI7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgKytqKSB7XG4gICAgICAgIHQxID0gaCArIHNpZ21hUHJpbWUoZSkgKyBjaChlLCBmLCBnKSArIGtbal0gKyB3W2pdO1xuICAgICAgICB0MiA9IHNpZ21hKGEpICsgbWFqKGEsIGIsIGMpO1xuICAgICAgICBoID0gZztcbiAgICAgICAgZyA9IGY7XG4gICAgICAgIGYgPSBlO1xuICAgICAgICBlID0gZCArIHQxIHwgMDtcbiAgICAgICAgZCA9IGM7XG4gICAgICAgIGMgPSBiO1xuICAgICAgICBiID0gYTtcbiAgICAgICAgYSA9IHQxICsgdDIgfCAwO1xuICAgICAgfVxuXG4gICAgICBoMCA9IGgwICsgYSB8IDA7XG4gICAgICBoMSA9IGgxICsgYiB8IDA7XG4gICAgICBoMiA9IGgyICsgYyB8IDA7XG4gICAgICBoMyA9IGgzICsgZCB8IDA7XG4gICAgICBoNCA9IGg0ICsgZSB8IDA7XG4gICAgICBoNSA9IGg1ICsgZiB8IDA7XG4gICAgICBoNiA9IGg2ICsgZyB8IDA7XG4gICAgICBoNyA9IGg3ICsgaCB8IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCA+PiAyNCAmIDB4RkYsIGgwID4+IDE2ICYgMHhGRiwgaDAgPj4gOCAmIDB4RkYsIGgwICYgMHhGRiwgaDEgPj4gMjQgJiAweEZGLCBoMSA+PiAxNiAmIDB4RkYsIGgxID4+IDggJiAweEZGLCBoMSAmIDB4RkYsIGgyID4+IDI0ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgJiAweEZGLCBoMyA+PiAyNCAmIDB4RkYsIGgzID4+IDE2ICYgMHhGRiwgaDMgPj4gOCAmIDB4RkYsIGgzICYgMHhGRiwgaDQgPj4gMjQgJiAweEZGLCBoNCA+PiAxNiAmIDB4RkYsIGg0ID4+IDggJiAweEZGLCBoNCAmIDB4RkYsIGg1ID4+IDI0ICYgMHhGRiwgaDUgPj4gMTYgJiAweEZGLCBoNSA+PiA4ICYgMHhGRiwgaDUgJiAweEZGLCBoNiA+PiAyNCAmIDB4RkYsIGg2ID4+IDE2ICYgMHhGRiwgaDYgPj4gOCAmIDB4RkYsIGg2ICYgMHhGRiwgaDcgPj4gMjQgJiAweEZGLCBoNyA+PiAxNiAmIDB4RkYsIGg3ID4+IDggJiAweEZGLCBoNyAmIDB4RkZdKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoO1xufSgpO1xuXG5leHBvcnRzLmNhbGN1bGF0ZVNIQTI1NiA9IGNhbGN1bGF0ZVNIQTI1NjtcblxudmFyIGNhbGN1bGF0ZVNIQTUxMiA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVNIQTUxMkNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGNoKHJlc3VsdCwgeCwgeSwgeiwgdG1wKSB7XG4gICAgcmVzdWx0LmFzc2lnbih4KTtcbiAgICByZXN1bHQuYW5kKHkpO1xuICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgdG1wLm5vdCgpO1xuICAgIHRtcC5hbmQoeik7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFqKHJlc3VsdCwgeCwgeSwgeiwgdG1wKSB7XG4gICAgcmVzdWx0LmFzc2lnbih4KTtcbiAgICByZXN1bHQuYW5kKHkpO1xuICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgdG1wLmFuZCh6KTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gICAgdG1wLmFzc2lnbih5KTtcbiAgICB0bXAuYW5kKHopO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ21hKHJlc3VsdCwgeCwgdG1wKSB7XG4gICAgcmVzdWx0LmFzc2lnbih4KTtcbiAgICByZXN1bHQucm90YXRlUmlnaHQoMjgpO1xuICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgdG1wLnJvdGF0ZVJpZ2h0KDM0KTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAucm90YXRlUmlnaHQoMzkpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ21hUHJpbWUocmVzdWx0LCB4LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5yb3RhdGVSaWdodCgxNCk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAucm90YXRlUmlnaHQoMTgpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5yb3RhdGVSaWdodCg0MSk7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICB9XG5cbiAgZnVuY3Rpb24gbGl0dGxlU2lnbWEocmVzdWx0LCB4LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5yb3RhdGVSaWdodCgxKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5yb3RhdGVSaWdodCg4KTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAuc2hpZnRSaWdodCg3KTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXR0bGVTaWdtYVByaW1lKHJlc3VsdCwgeCwgdG1wKSB7XG4gICAgcmVzdWx0LmFzc2lnbih4KTtcbiAgICByZXN1bHQucm90YXRlUmlnaHQoMTkpO1xuICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgdG1wLnJvdGF0ZVJpZ2h0KDYxKTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAuc2hpZnRSaWdodCg2KTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gIH1cblxuICB2YXIgayA9IFtuZXcgV29yZDY0KDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIpLCBuZXcgV29yZDY0KDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QpLCBuZXcgV29yZDY0KDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYpLCBuZXcgV29yZDY0KDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMpLCBuZXcgV29yZDY0KDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgpLCBuZXcgV29yZDY0KDB4NTlmMTExZjEsIDB4YjYwNWQwMTkpLCBuZXcgV29yZDY0KDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIpLCBuZXcgV29yZDY0KDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgpLCBuZXcgV29yZDY0KDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIpLCBuZXcgV29yZDY0KDB4MTI4MzViMDEsIDB4NDU3MDZmYmUpLCBuZXcgV29yZDY0KDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMpLCBuZXcgV29yZDY0KDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIpLCBuZXcgV29yZDY0KDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYpLCBuZXcgV29yZDY0KDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEpLCBuZXcgV29yZDY0KDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUpLCBuZXcgV29yZDY0KDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQpLCBuZXcgV29yZDY0KDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIpLCBuZXcgV29yZDY0KDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMpLCBuZXcgV29yZDY0KDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUpLCBuZXcgV29yZDY0KDB4MjQwY2ExY2MsIDB4NzdhYzljNjUpLCBuZXcgV29yZDY0KDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUpLCBuZXcgV29yZDY0KDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMpLCBuZXcgV29yZDY0KDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQpLCBuZXcgV29yZDY0KDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUpLCBuZXcgV29yZDY0KDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIpLCBuZXcgV29yZDY0KDB4YTgzMWM2NmQsIDB4MmRiNDMyMTApLCBuZXcgV29yZDY0KDB4YjAwMzI3YzgsIDB4OThmYjIxM2YpLCBuZXcgV29yZDY0KDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQpLCBuZXcgV29yZDY0KDB4YzZlMDBiZjMsIDB4M2RhODhmYzIpLCBuZXcgV29yZDY0KDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUpLCBuZXcgV29yZDY0KDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYpLCBuZXcgV29yZDY0KDB4MTQyOTI5NjcsIDB4MGEwZTZlNzApLCBuZXcgV29yZDY0KDB4MjdiNzBhODUsIDB4NDZkMjJmZmMpLCBuZXcgV29yZDY0KDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYpLCBuZXcgV29yZDY0KDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQpLCBuZXcgV29yZDY0KDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYpLCBuZXcgV29yZDY0KDB4NjUwYTczNTQsIDB4OGJhZjYzZGUpLCBuZXcgV29yZDY0KDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgpLCBuZXcgV29yZDY0KDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYpLCBuZXcgV29yZDY0KDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IpLCBuZXcgV29yZDY0KDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQpLCBuZXcgV29yZDY0KDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEpLCBuZXcgV29yZDY0KDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEpLCBuZXcgV29yZDY0KDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzApLCBuZXcgV29yZDY0KDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgpLCBuZXcgV29yZDY0KDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTApLCBuZXcgV29yZDY0KDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEpLCBuZXcgV29yZDY0KDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgpLCBuZXcgV29yZDY0KDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgpLCBuZXcgV29yZDY0KDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMpLCBuZXcgV29yZDY0KDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTkpLCBuZXcgV29yZDY0KDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgpLCBuZXcgV29yZDY0KDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMpLCBuZXcgV29yZDY0KDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IpLCBuZXcgV29yZDY0KDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMpLCBuZXcgV29yZDY0KDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMpLCBuZXcgV29yZDY0KDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMpLCBuZXcgV29yZDY0KDB4NzhhNTYzNmYsIDB4NDMxNzJmNjApLCBuZXcgV29yZDY0KDB4ODRjODc4MTQsIDB4YTFmMGFiNzIpLCBuZXcgV29yZDY0KDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMpLCBuZXcgV29yZDY0KDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgpLCBuZXcgV29yZDY0KDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTkpLCBuZXcgV29yZDY0KDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUpLCBuZXcgV29yZDY0KDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIpLCBuZXcgV29yZDY0KDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMpLCBuZXcgV29yZDY0KDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcpLCBuZXcgV29yZDY0KDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUpLCBuZXcgV29yZDY0KDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgpLCBuZXcgV29yZDY0KDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEpLCBuZXcgV29yZDY0KDB4MGE2MzdkYzUsIDB4YTJjODk4YTYpLCBuZXcgV29yZDY0KDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUpLCBuZXcgV29yZDY0KDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIpLCBuZXcgV29yZDY0KDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQpLCBuZXcgV29yZDY0KDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMpLCBuZXcgV29yZDY0KDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMpLCBuZXcgV29yZDY0KDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMpLCBuZXcgV29yZDY0KDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYpLCBuZXcgV29yZDY0KDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEpLCBuZXcgV29yZDY0KDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMpLCBuZXcgV29yZDY0KDB4NmM0NDE5OGMsIDB4NGE0NzU4MTcpXTtcblxuICBmdW5jdGlvbiBoYXNoKGRhdGEsIG9mZnNldCwgbGVuZ3RoLCBtb2RlMzg0KSB7XG4gICAgbW9kZTM4NCA9ICEhbW9kZTM4NDtcbiAgICB2YXIgaDAsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGg3O1xuXG4gICAgaWYgKCFtb2RlMzg0KSB7XG4gICAgICBoMCA9IG5ldyBXb3JkNjQoMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCk7XG4gICAgICBoMSA9IG5ldyBXb3JkNjQoMHhiYjY3YWU4NSwgMHg4NGNhYTczYik7XG4gICAgICBoMiA9IG5ldyBXb3JkNjQoMHgzYzZlZjM3MiwgMHhmZTk0ZjgyYik7XG4gICAgICBoMyA9IG5ldyBXb3JkNjQoMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSk7XG4gICAgICBoNCA9IG5ldyBXb3JkNjQoMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSk7XG4gICAgICBoNSA9IG5ldyBXb3JkNjQoMHg5YjA1Njg4YywgMHgyYjNlNmMxZik7XG4gICAgICBoNiA9IG5ldyBXb3JkNjQoMHgxZjgzZDlhYiwgMHhmYjQxYmQ2Yik7XG4gICAgICBoNyA9IG5ldyBXb3JkNjQoMHg1YmUwY2QxOSwgMHgxMzdlMjE3OSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGgwID0gbmV3IFdvcmQ2NCgweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4KTtcbiAgICAgIGgxID0gbmV3IFdvcmQ2NCgweDYyOWEyOTJhLCAweDM2N2NkNTA3KTtcbiAgICAgIGgyID0gbmV3IFdvcmQ2NCgweDkxNTkwMTVhLCAweDMwNzBkZDE3KTtcbiAgICAgIGgzID0gbmV3IFdvcmQ2NCgweDE1MmZlY2Q4LCAweGY3MGU1OTM5KTtcbiAgICAgIGg0ID0gbmV3IFdvcmQ2NCgweDY3MzMyNjY3LCAweGZmYzAwYjMxKTtcbiAgICAgIGg1ID0gbmV3IFdvcmQ2NCgweDhlYjQ0YTg3LCAweDY4NTgxNTExKTtcbiAgICAgIGg2ID0gbmV3IFdvcmQ2NCgweGRiMGMyZTBkLCAweDY0Zjk4ZmE3KTtcbiAgICAgIGg3ID0gbmV3IFdvcmQ2NCgweDQ3YjU0ODFkLCAweGJlZmE0ZmE0KTtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGVkTGVuZ3RoID0gTWF0aC5jZWlsKChsZW5ndGggKyAxNykgLyAxMjgpICogMTI4O1xuICAgIHZhciBwYWRkZWQgPSBuZXcgVWludDhBcnJheShwYWRkZWRMZW5ndGgpO1xuICAgIHZhciBpLCBqLCBuO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBwYWRkZWRbaV0gPSBkYXRhW29mZnNldCsrXTtcbiAgICB9XG5cbiAgICBwYWRkZWRbaSsrXSA9IDB4ODA7XG4gICAgbiA9IHBhZGRlZExlbmd0aCAtIDE2O1xuXG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgfVxuXG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+Pj4gMjkgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDIxICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAxMyAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gNSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPDwgMyAmIDB4ZmY7XG4gICAgdmFyIHcgPSBuZXcgQXJyYXkoODApO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IDgwOyBpKyspIHtcbiAgICAgIHdbaV0gPSBuZXcgV29yZDY0KDAsIDApO1xuICAgIH1cblxuICAgIHZhciBhID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgYiA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgIGMgPSBuZXcgV29yZDY0KDAsIDApO1xuICAgIHZhciBkID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgZSA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgIGYgPSBuZXcgV29yZDY0KDAsIDApO1xuICAgIHZhciBnID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgaCA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgdmFyIHQxID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgdDIgPSBuZXcgV29yZDY0KDAsIDApO1xuICAgIHZhciB0bXAxID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgdG1wMiA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgIHRtcDM7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcGFkZGVkTGVuZ3RoOykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgd1tqXS5oaWdoID0gcGFkZGVkW2ldIDw8IDI0IHwgcGFkZGVkW2kgKyAxXSA8PCAxNiB8IHBhZGRlZFtpICsgMl0gPDwgOCB8IHBhZGRlZFtpICsgM107XG4gICAgICAgIHdbal0ubG93ID0gcGFkZGVkW2kgKyA0XSA8PCAyNCB8IHBhZGRlZFtpICsgNV0gPDwgMTYgfCBwYWRkZWRbaSArIDZdIDw8IDggfCBwYWRkZWRbaSArIDddO1xuICAgICAgICBpICs9IDg7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaiA9IDE2OyBqIDwgODA7ICsraikge1xuICAgICAgICB0bXAzID0gd1tqXTtcbiAgICAgICAgbGl0dGxlU2lnbWFQcmltZSh0bXAzLCB3W2ogLSAyXSwgdG1wMik7XG4gICAgICAgIHRtcDMuYWRkKHdbaiAtIDddKTtcbiAgICAgICAgbGl0dGxlU2lnbWEodG1wMSwgd1tqIC0gMTVdLCB0bXAyKTtcbiAgICAgICAgdG1wMy5hZGQodG1wMSk7XG4gICAgICAgIHRtcDMuYWRkKHdbaiAtIDE2XSk7XG4gICAgICB9XG5cbiAgICAgIGEuYXNzaWduKGgwKTtcbiAgICAgIGIuYXNzaWduKGgxKTtcbiAgICAgIGMuYXNzaWduKGgyKTtcbiAgICAgIGQuYXNzaWduKGgzKTtcbiAgICAgIGUuYXNzaWduKGg0KTtcbiAgICAgIGYuYXNzaWduKGg1KTtcbiAgICAgIGcuYXNzaWduKGg2KTtcbiAgICAgIGguYXNzaWduKGg3KTtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IDgwOyArK2opIHtcbiAgICAgICAgdDEuYXNzaWduKGgpO1xuICAgICAgICBzaWdtYVByaW1lKHRtcDEsIGUsIHRtcDIpO1xuICAgICAgICB0MS5hZGQodG1wMSk7XG4gICAgICAgIGNoKHRtcDEsIGUsIGYsIGcsIHRtcDIpO1xuICAgICAgICB0MS5hZGQodG1wMSk7XG4gICAgICAgIHQxLmFkZChrW2pdKTtcbiAgICAgICAgdDEuYWRkKHdbal0pO1xuICAgICAgICBzaWdtYSh0MiwgYSwgdG1wMik7XG4gICAgICAgIG1haih0bXAxLCBhLCBiLCBjLCB0bXAyKTtcbiAgICAgICAgdDIuYWRkKHRtcDEpO1xuICAgICAgICB0bXAzID0gaDtcbiAgICAgICAgaCA9IGc7XG4gICAgICAgIGcgPSBmO1xuICAgICAgICBmID0gZTtcbiAgICAgICAgZC5hZGQodDEpO1xuICAgICAgICBlID0gZDtcbiAgICAgICAgZCA9IGM7XG4gICAgICAgIGMgPSBiO1xuICAgICAgICBiID0gYTtcbiAgICAgICAgdG1wMy5hc3NpZ24odDEpO1xuICAgICAgICB0bXAzLmFkZCh0Mik7XG4gICAgICAgIGEgPSB0bXAzO1xuICAgICAgfVxuXG4gICAgICBoMC5hZGQoYSk7XG4gICAgICBoMS5hZGQoYik7XG4gICAgICBoMi5hZGQoYyk7XG4gICAgICBoMy5hZGQoZCk7XG4gICAgICBoNC5hZGQoZSk7XG4gICAgICBoNS5hZGQoZik7XG4gICAgICBoNi5hZGQoZyk7XG4gICAgICBoNy5hZGQoaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdDtcblxuICAgIGlmICghbW9kZTM4NCkge1xuICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICAgICAgaDAuY29weVRvKHJlc3VsdCwgMCk7XG4gICAgICBoMS5jb3B5VG8ocmVzdWx0LCA4KTtcbiAgICAgIGgyLmNvcHlUbyhyZXN1bHQsIDE2KTtcbiAgICAgIGgzLmNvcHlUbyhyZXN1bHQsIDI0KTtcbiAgICAgIGg0LmNvcHlUbyhyZXN1bHQsIDMyKTtcbiAgICAgIGg1LmNvcHlUbyhyZXN1bHQsIDQwKTtcbiAgICAgIGg2LmNvcHlUbyhyZXN1bHQsIDQ4KTtcbiAgICAgIGg3LmNvcHlUbyhyZXN1bHQsIDU2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoNDgpO1xuICAgICAgaDAuY29weVRvKHJlc3VsdCwgMCk7XG4gICAgICBoMS5jb3B5VG8ocmVzdWx0LCA4KTtcbiAgICAgIGgyLmNvcHlUbyhyZXN1bHQsIDE2KTtcbiAgICAgIGgzLmNvcHlUbyhyZXN1bHQsIDI0KTtcbiAgICAgIGg0LmNvcHlUbyhyZXN1bHQsIDMyKTtcbiAgICAgIGg1LmNvcHlUbyhyZXN1bHQsIDQwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGhhc2g7XG59KCk7XG5cbmV4cG9ydHMuY2FsY3VsYXRlU0hBNTEyID0gY2FsY3VsYXRlU0hBNTEyO1xuXG52YXIgY2FsY3VsYXRlU0hBMzg0ID0gZnVuY3Rpb24gY2FsY3VsYXRlU0hBMzg0Q2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBjYWxjdWxhdGVTSEE1MTIoZGF0YSwgb2Zmc2V0LCBsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIGhhc2g7XG59KCk7XG5cbmV4cG9ydHMuY2FsY3VsYXRlU0hBMzg0ID0gY2FsY3VsYXRlU0hBMzg0O1xuXG52YXIgTnVsbENpcGhlciA9IGZ1bmN0aW9uIE51bGxDaXBoZXJDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBOdWxsQ2lwaGVyKCkge31cblxuICBOdWxsQ2lwaGVyLnByb3RvdHlwZSA9IHtcbiAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIE51bGxDaXBoZXJfZGVjcnlwdEJsb2NrKGRhdGEpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIE51bGxDaXBoZXI7XG59KCk7XG5cbmNsYXNzIEFFU0Jhc2VDaXBoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQUVTQmFzZUNpcGhlcikge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX3MgPSBuZXcgVWludDhBcnJheShbMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNSwgMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3NiwgMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCwgMHhhZCwgMHhkNCwgMHhhMiwgMHhhZiwgMHg5YywgMHhhNCwgMHg3MiwgMHhjMCwgMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYywgMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSwgMHgwNCwgMHhjNywgMHgyMywgMHhjMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5YSwgMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NSwgMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCwgMHg1MiwgMHgzYiwgMHhkNiwgMHhiMywgMHgyOSwgMHhlMywgMHgyZiwgMHg4NCwgMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1YiwgMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZiwgMHhkMCwgMHhlZiwgMHhhYSwgMHhmYiwgMHg0MywgMHg0ZCwgMHgzMywgMHg4NSwgMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOCwgMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSwgMHhiYywgMHhiNiwgMHhkYSwgMHgyMSwgMHgxMCwgMHhmZiwgMHhmMywgMHhkMiwgMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNywgMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3MywgMHg2MCwgMHg4MSwgMHg0ZiwgMHhkYywgMHgyMiwgMHgyYSwgMHg5MCwgMHg4OCwgMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYiwgMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1YywgMHhjMiwgMHhkMywgMHhhYywgMHg2MiwgMHg5MSwgMHg5NSwgMHhlNCwgMHg3OSwgMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOSwgMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCwgMHhiYSwgMHg3OCwgMHgyNSwgMHgyZSwgMHgxYywgMHhhNiwgMHhiNCwgMHhjNiwgMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YSwgMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSwgMHg2MSwgMHgzNSwgMHg1NywgMHhiOSwgMHg4NiwgMHhjMSwgMHgxZCwgMHg5ZSwgMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NCwgMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZiwgMHg4YywgMHhhMSwgMHg4OSwgMHgwZCwgMHhiZiwgMHhlNiwgMHg0MiwgMHg2OCwgMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNl0pO1xuICAgIHRoaXMuX2ludl9zID0gbmV3IFVpbnQ4QXJyYXkoWzB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgsIDB4YmYsIDB4NDAsIDB4YTMsIDB4OWUsIDB4ODEsIDB4ZjMsIDB4ZDcsIDB4ZmIsIDB4N2MsIDB4ZTMsIDB4MzksIDB4ODIsIDB4OWIsIDB4MmYsIDB4ZmYsIDB4ODcsIDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IsIDB4NTQsIDB4N2IsIDB4OTQsIDB4MzIsIDB4YTYsIDB4YzIsIDB4MjMsIDB4M2QsIDB4ZWUsIDB4NGMsIDB4OTUsIDB4MGIsIDB4NDIsIDB4ZmEsIDB4YzMsIDB4NGUsIDB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIsIDB4NzYsIDB4NWIsIDB4YTIsIDB4NDksIDB4NmQsIDB4OGIsIDB4ZDEsIDB4MjUsIDB4NzIsIDB4ZjgsIDB4ZjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYsIDB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIsIDB4NmMsIDB4NzAsIDB4NDgsIDB4NTAsIDB4ZmQsIDB4ZWQsIDB4YjksIDB4ZGEsIDB4NWUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4YTcsIDB4OGQsIDB4OWQsIDB4ODQsIDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEsIDB4ZjcsIDB4ZTQsIDB4NTgsIDB4MDUsIDB4YjgsIDB4YjMsIDB4NDUsIDB4MDYsIDB4ZDAsIDB4MmMsIDB4MWUsIDB4OGYsIDB4Y2EsIDB4M2YsIDB4MGYsIDB4MDIsIDB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIsIDB4M2EsIDB4OTEsIDB4MTEsIDB4NDEsIDB4NGYsIDB4NjcsIDB4ZGMsIDB4ZWEsIDB4OTcsIDB4ZjIsIDB4Y2YsIDB4Y2UsIDB4ZjAsIDB4YjQsIDB4ZTYsIDB4NzMsIDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUsIDB4ZTIsIDB4ZjksIDB4MzcsIDB4ZTgsIDB4MWMsIDB4NzUsIDB4ZGYsIDB4NmUsIDB4NDcsIDB4ZjEsIDB4MWEsIDB4NzEsIDB4MWQsIDB4MjksIDB4YzUsIDB4ODksIDB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIsIDB4ZmMsIDB4NTYsIDB4M2UsIDB4NGIsIDB4YzYsIDB4ZDIsIDB4NzksIDB4MjAsIDB4OWEsIDB4ZGIsIDB4YzAsIDB4ZmUsIDB4NzgsIDB4Y2QsIDB4NWEsIDB4ZjQsIDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEsIDB4YjEsIDB4MTIsIDB4MTAsIDB4NTksIDB4MjcsIDB4ODAsIDB4ZWMsIDB4NWYsIDB4NjAsIDB4NTEsIDB4N2YsIDB4YTksIDB4MTksIDB4YjUsIDB4NGEsIDB4MGQsIDB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYsIDB4YTAsIDB4ZTAsIDB4M2IsIDB4NGQsIDB4YWUsIDB4MmEsIDB4ZjUsIDB4YjAsIDB4YzgsIDB4ZWIsIDB4YmIsIDB4M2MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEsIDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYsIDB4ZTEsIDB4NjksIDB4MTQsIDB4NjMsIDB4NTUsIDB4MjEsIDB4MGMsIDB4N2RdKTtcbiAgICB0aGlzLl9taXggPSBuZXcgVWludDMyQXJyYXkoWzB4MDAwMDAwMDAsIDB4MGUwOTBkMGIsIDB4MWMxMjFhMTYsIDB4MTIxYjE3MWQsIDB4MzgyNDM0MmMsIDB4MzYyZDM5MjcsIDB4MjQzNjJlM2EsIDB4MmEzZjIzMzEsIDB4NzA0ODY4NTgsIDB4N2U0MTY1NTMsIDB4NmM1YTcyNGUsIDB4NjI1MzdmNDUsIDB4NDg2YzVjNzQsIDB4NDY2NTUxN2YsIDB4NTQ3ZTQ2NjIsIDB4NWE3NzRiNjksIDB4ZTA5MGQwYjAsIDB4ZWU5OWRkYmIsIDB4ZmM4MmNhYTYsIDB4ZjI4YmM3YWQsIDB4ZDhiNGU0OWMsIDB4ZDZiZGU5OTcsIDB4YzRhNmZlOGEsIDB4Y2FhZmYzODEsIDB4OTBkOGI4ZTgsIDB4OWVkMWI1ZTMsIDB4OGNjYWEyZmUsIDB4ODJjM2FmZjUsIDB4YThmYzhjYzQsIDB4YTZmNTgxY2YsIDB4YjRlZTk2ZDIsIDB4YmFlNzliZDksIDB4ZGIzYmJiN2IsIDB4ZDUzMmI2NzAsIDB4YzcyOWExNmQsIDB4YzkyMGFjNjYsIDB4ZTMxZjhmNTcsIDB4ZWQxNjgyNWMsIDB4ZmYwZDk1NDEsIDB4ZjEwNDk4NGEsIDB4YWI3M2QzMjMsIDB4YTU3YWRlMjgsIDB4Yjc2MWM5MzUsIDB4Yjk2OGM0M2UsIDB4OTM1N2U3MGYsIDB4OWQ1ZWVhMDQsIDB4OGY0NWZkMTksIDB4ODE0Y2YwMTIsIDB4M2JhYjZiY2IsIDB4MzVhMjY2YzAsIDB4MjdiOTcxZGQsIDB4MjliMDdjZDYsIDB4MDM4ZjVmZTcsIDB4MGQ4NjUyZWMsIDB4MWY5ZDQ1ZjEsIDB4MTE5NDQ4ZmEsIDB4NGJlMzAzOTMsIDB4NDVlYTBlOTgsIDB4NTdmMTE5ODUsIDB4NTlmODE0OGUsIDB4NzNjNzM3YmYsIDB4N2RjZTNhYjQsIDB4NmZkNTJkYTksIDB4NjFkYzIwYTIsIDB4YWQ3NjZkZjYsIDB4YTM3ZjYwZmQsIDB4YjE2NDc3ZTAsIDB4YmY2ZDdhZWIsIDB4OTU1MjU5ZGEsIDB4OWI1YjU0ZDEsIDB4ODk0MDQzY2MsIDB4ODc0OTRlYzcsIDB4ZGQzZTA1YWUsIDB4ZDMzNzA4YTUsIDB4YzEyYzFmYjgsIDB4Y2YyNTEyYjMsIDB4ZTUxYTMxODIsIDB4ZWIxMzNjODksIDB4ZjkwODJiOTQsIDB4ZjcwMTI2OWYsIDB4NGRlNmJkNDYsIDB4NDNlZmIwNGQsIDB4NTFmNGE3NTAsIDB4NWZmZGFhNWIsIDB4NzVjMjg5NmEsIDB4N2JjYjg0NjEsIDB4NjlkMDkzN2MsIDB4NjdkOTllNzcsIDB4M2RhZWQ1MWUsIDB4MzNhN2Q4MTUsIDB4MjFiY2NmMDgsIDB4MmZiNWMyMDMsIDB4MDU4YWUxMzIsIDB4MGI4M2VjMzksIDB4MTk5OGZiMjQsIDB4MTc5MWY2MmYsIDB4NzY0ZGQ2OGQsIDB4Nzg0NGRiODYsIDB4NmE1ZmNjOWIsIDB4NjQ1NmMxOTAsIDB4NGU2OWUyYTEsIDB4NDA2MGVmYWEsIDB4NTI3YmY4YjcsIDB4NWM3MmY1YmMsIDB4MDYwNWJlZDUsIDB4MDgwY2IzZGUsIDB4MWExN2E0YzMsIDB4MTQxZWE5YzgsIDB4M2UyMThhZjksIDB4MzAyODg3ZjIsIDB4MjIzMzkwZWYsIDB4MmMzYTlkZTQsIDB4OTZkZDA2M2QsIDB4OThkNDBiMzYsIDB4OGFjZjFjMmIsIDB4ODRjNjExMjAsIDB4YWVmOTMyMTEsIDB4YTBmMDNmMWEsIDB4YjJlYjI4MDcsIDB4YmNlMjI1MGMsIDB4ZTY5NTZlNjUsIDB4ZTg5YzYzNmUsIDB4ZmE4Nzc0NzMsIDB4ZjQ4ZTc5NzgsIDB4ZGViMTVhNDksIDB4ZDBiODU3NDIsIDB4YzJhMzQwNWYsIDB4Y2NhYTRkNTQsIDB4NDFlY2RhZjcsIDB4NGZlNWQ3ZmMsIDB4NWRmZWMwZTEsIDB4NTNmN2NkZWEsIDB4NzljOGVlZGIsIDB4NzdjMWUzZDAsIDB4NjVkYWY0Y2QsIDB4NmJkM2Y5YzYsIDB4MzFhNGIyYWYsIDB4M2ZhZGJmYTQsIDB4MmRiNmE4YjksIDB4MjNiZmE1YjIsIDB4MDk4MDg2ODMsIDB4MDc4OThiODgsIDB4MTU5MjljOTUsIDB4MWI5YjkxOWUsIDB4YTE3YzBhNDcsIDB4YWY3NTA3NGMsIDB4YmQ2ZTEwNTEsIDB4YjM2NzFkNWEsIDB4OTk1ODNlNmIsIDB4OTc1MTMzNjAsIDB4ODU0YTI0N2QsIDB4OGI0MzI5NzYsIDB4ZDEzNDYyMWYsIDB4ZGYzZDZmMTQsIDB4Y2QyNjc4MDksIDB4YzMyZjc1MDIsIDB4ZTkxMDU2MzMsIDB4ZTcxOTViMzgsIDB4ZjUwMjRjMjUsIDB4ZmIwYjQxMmUsIDB4OWFkNzYxOGMsIDB4OTRkZTZjODcsIDB4ODZjNTdiOWEsIDB4ODhjYzc2OTEsIDB4YTJmMzU1YTAsIDB4YWNmYTU4YWIsIDB4YmVlMTRmYjYsIDB4YjBlODQyYmQsIDB4ZWE5ZjA5ZDQsIDB4ZTQ5NjA0ZGYsIDB4ZjY4ZDEzYzIsIDB4Zjg4NDFlYzksIDB4ZDJiYjNkZjgsIDB4ZGNiMjMwZjMsIDB4Y2VhOTI3ZWUsIDB4YzBhMDJhZTUsIDB4N2E0N2IxM2MsIDB4NzQ0ZWJjMzcsIDB4NjY1NWFiMmEsIDB4Njg1Y2E2MjEsIDB4NDI2Mzg1MTAsIDB4NGM2YTg4MWIsIDB4NWU3MTlmMDYsIDB4NTA3ODkyMGQsIDB4MGEwZmQ5NjQsIDB4MDQwNmQ0NmYsIDB4MTYxZGMzNzIsIDB4MTgxNGNlNzksIDB4MzIyYmVkNDgsIDB4M2MyMmUwNDMsIDB4MmUzOWY3NWUsIDB4MjAzMGZhNTUsIDB4ZWM5YWI3MDEsIDB4ZTI5M2JhMGEsIDB4ZjA4OGFkMTcsIDB4ZmU4MWEwMWMsIDB4ZDRiZTgzMmQsIDB4ZGFiNzhlMjYsIDB4YzhhYzk5M2IsIDB4YzZhNTk0MzAsIDB4OWNkMmRmNTksIDB4OTJkYmQyNTIsIDB4ODBjMGM1NGYsIDB4OGVjOWM4NDQsIDB4YTRmNmViNzUsIDB4YWFmZmU2N2UsIDB4YjhlNGYxNjMsIDB4YjZlZGZjNjgsIDB4MGMwYTY3YjEsIDB4MDIwMzZhYmEsIDB4MTAxODdkYTcsIDB4MWUxMTcwYWMsIDB4MzQyZTUzOWQsIDB4M2EyNzVlOTYsIDB4MjgzYzQ5OGIsIDB4MjYzNTQ0ODAsIDB4N2M0MjBmZTksIDB4NzI0YjAyZTIsIDB4NjA1MDE1ZmYsIDB4NmU1OTE4ZjQsIDB4NDQ2NjNiYzUsIDB4NGE2ZjM2Y2UsIDB4NTg3NDIxZDMsIDB4NTY3ZDJjZDgsIDB4MzdhMTBjN2EsIDB4MzlhODAxNzEsIDB4MmJiMzE2NmMsIDB4MjViYTFiNjcsIDB4MGY4NTM4NTYsIDB4MDE4YzM1NWQsIDB4MTM5NzIyNDAsIDB4MWQ5ZTJmNGIsIDB4NDdlOTY0MjIsIDB4NDllMDY5MjksIDB4NWJmYjdlMzQsIDB4NTVmMjczM2YsIDB4N2ZjZDUwMGUsIDB4NzFjNDVkMDUsIDB4NjNkZjRhMTgsIDB4NmRkNjQ3MTMsIDB4ZDczMWRjY2EsIDB4ZDkzOGQxYzEsIDB4Y2IyM2M2ZGMsIDB4YzUyYWNiZDcsIDB4ZWYxNWU4ZTYsIDB4ZTExY2U1ZWQsIDB4ZjMwN2YyZjAsIDB4ZmQwZWZmZmIsIDB4YTc3OWI0OTIsIDB4YTk3MGI5OTksIDB4YmI2YmFlODQsIDB4YjU2MmEzOGYsIDB4OWY1ZDgwYmUsIDB4OTE1NDhkYjUsIDB4ODM0ZjlhYTgsIDB4OGQ0Njk3YTNdKTtcbiAgICB0aGlzLl9taXhDb2wgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgaWYgKGkgPCAxMjgpIHtcbiAgICAgICAgdGhpcy5fbWl4Q29sW2ldID0gaSA8PCAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbWl4Q29sW2ldID0gaSA8PCAxIF4gMHgxYjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICB0aGlzLmJ1ZmZlclBvc2l0aW9uID0gMDtcbiAgfVxuXG4gIF9leHBhbmRLZXkoY2lwaGVyS2V5KSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzc1wiKTtcbiAgfVxuXG4gIF9kZWNyeXB0KGlucHV0LCBrZXkpIHtcbiAgICBsZXQgdCwgdSwgdjtcbiAgICBjb25zdCBzdGF0ZSA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICBzdGF0ZS5zZXQoaW5wdXQpO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGsgPSB0aGlzLl9rZXlTaXplOyBqIDwgMTY7ICsraiwgKytrKSB7XG4gICAgICBzdGF0ZVtqXSBePSBrZXlba107XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbiAtIDE7IGkgPj0gMTsgLS1pKSB7XG4gICAgICB0ID0gc3RhdGVbMTNdO1xuICAgICAgc3RhdGVbMTNdID0gc3RhdGVbOV07XG4gICAgICBzdGF0ZVs5XSA9IHN0YXRlWzVdO1xuICAgICAgc3RhdGVbNV0gPSBzdGF0ZVsxXTtcbiAgICAgIHN0YXRlWzFdID0gdDtcbiAgICAgIHQgPSBzdGF0ZVsxNF07XG4gICAgICB1ID0gc3RhdGVbMTBdO1xuICAgICAgc3RhdGVbMTRdID0gc3RhdGVbNl07XG4gICAgICBzdGF0ZVsxMF0gPSBzdGF0ZVsyXTtcbiAgICAgIHN0YXRlWzZdID0gdDtcbiAgICAgIHN0YXRlWzJdID0gdTtcbiAgICAgIHQgPSBzdGF0ZVsxNV07XG4gICAgICB1ID0gc3RhdGVbMTFdO1xuICAgICAgdiA9IHN0YXRlWzddO1xuICAgICAgc3RhdGVbMTVdID0gc3RhdGVbM107XG4gICAgICBzdGF0ZVsxMV0gPSB0O1xuICAgICAgc3RhdGVbN10gPSB1O1xuICAgICAgc3RhdGVbM10gPSB2O1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgc3RhdGVbal0gPSB0aGlzLl9pbnZfc1tzdGF0ZVtqXV07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSAwLCBrID0gaSAqIDE2OyBqIDwgMTY7ICsraiwgKytrKSB7XG4gICAgICAgIHN0YXRlW2pdIF49IGtleVtrXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgaiArPSA0KSB7XG4gICAgICAgIGNvbnN0IHMwID0gdGhpcy5fbWl4W3N0YXRlW2pdXTtcbiAgICAgICAgY29uc3QgczEgPSB0aGlzLl9taXhbc3RhdGVbaiArIDFdXTtcbiAgICAgICAgY29uc3QgczIgPSB0aGlzLl9taXhbc3RhdGVbaiArIDJdXTtcbiAgICAgICAgY29uc3QgczMgPSB0aGlzLl9taXhbc3RhdGVbaiArIDNdXTtcbiAgICAgICAgdCA9IHMwIF4gczEgPj4+IDggXiBzMSA8PCAyNCBeIHMyID4+PiAxNiBeIHMyIDw8IDE2IF4gczMgPj4+IDI0IF4gczMgPDwgODtcbiAgICAgICAgc3RhdGVbal0gPSB0ID4+PiAyNCAmIDB4ZmY7XG4gICAgICAgIHN0YXRlW2ogKyAxXSA9IHQgPj4gMTYgJiAweGZmO1xuICAgICAgICBzdGF0ZVtqICsgMl0gPSB0ID4+IDggJiAweGZmO1xuICAgICAgICBzdGF0ZVtqICsgM10gPSB0ICYgMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0ID0gc3RhdGVbMTNdO1xuICAgIHN0YXRlWzEzXSA9IHN0YXRlWzldO1xuICAgIHN0YXRlWzldID0gc3RhdGVbNV07XG4gICAgc3RhdGVbNV0gPSBzdGF0ZVsxXTtcbiAgICBzdGF0ZVsxXSA9IHQ7XG4gICAgdCA9IHN0YXRlWzE0XTtcbiAgICB1ID0gc3RhdGVbMTBdO1xuICAgIHN0YXRlWzE0XSA9IHN0YXRlWzZdO1xuICAgIHN0YXRlWzEwXSA9IHN0YXRlWzJdO1xuICAgIHN0YXRlWzZdID0gdDtcbiAgICBzdGF0ZVsyXSA9IHU7XG4gICAgdCA9IHN0YXRlWzE1XTtcbiAgICB1ID0gc3RhdGVbMTFdO1xuICAgIHYgPSBzdGF0ZVs3XTtcbiAgICBzdGF0ZVsxNV0gPSBzdGF0ZVszXTtcbiAgICBzdGF0ZVsxMV0gPSB0O1xuICAgIHN0YXRlWzddID0gdTtcbiAgICBzdGF0ZVszXSA9IHY7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHN0YXRlW2pdID0gdGhpcy5faW52X3Nbc3RhdGVbal1dO1xuICAgICAgc3RhdGVbal0gXj0ga2V5W2pdO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIF9lbmNyeXB0KGlucHV0LCBrZXkpIHtcbiAgICBjb25zdCBzID0gdGhpcy5fcztcbiAgICBsZXQgdCwgdSwgdjtcbiAgICBjb25zdCBzdGF0ZSA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICBzdGF0ZS5zZXQoaW5wdXQpO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICBzdGF0ZVtqXSBePSBrZXlbal07XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgIHN0YXRlW2pdID0gc1tzdGF0ZVtqXV07XG4gICAgICB9XG5cbiAgICAgIHYgPSBzdGF0ZVsxXTtcbiAgICAgIHN0YXRlWzFdID0gc3RhdGVbNV07XG4gICAgICBzdGF0ZVs1XSA9IHN0YXRlWzldO1xuICAgICAgc3RhdGVbOV0gPSBzdGF0ZVsxM107XG4gICAgICBzdGF0ZVsxM10gPSB2O1xuICAgICAgdiA9IHN0YXRlWzJdO1xuICAgICAgdSA9IHN0YXRlWzZdO1xuICAgICAgc3RhdGVbMl0gPSBzdGF0ZVsxMF07XG4gICAgICBzdGF0ZVs2XSA9IHN0YXRlWzE0XTtcbiAgICAgIHN0YXRlWzEwXSA9IHY7XG4gICAgICBzdGF0ZVsxNF0gPSB1O1xuICAgICAgdiA9IHN0YXRlWzNdO1xuICAgICAgdSA9IHN0YXRlWzddO1xuICAgICAgdCA9IHN0YXRlWzExXTtcbiAgICAgIHN0YXRlWzNdID0gc3RhdGVbMTVdO1xuICAgICAgc3RhdGVbN10gPSB2O1xuICAgICAgc3RhdGVbMTFdID0gdTtcbiAgICAgIHN0YXRlWzE1XSA9IHQ7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7IGogKz0gNCkge1xuICAgICAgICBjb25zdCBzMCA9IHN0YXRlW2ogKyAwXTtcbiAgICAgICAgY29uc3QgczEgPSBzdGF0ZVtqICsgMV07XG4gICAgICAgIGNvbnN0IHMyID0gc3RhdGVbaiArIDJdO1xuICAgICAgICBjb25zdCBzMyA9IHN0YXRlW2ogKyAzXTtcbiAgICAgICAgdCA9IHMwIF4gczEgXiBzMiBeIHMzO1xuICAgICAgICBzdGF0ZVtqICsgMF0gXj0gdCBeIHRoaXMuX21peENvbFtzMCBeIHMxXTtcbiAgICAgICAgc3RhdGVbaiArIDFdIF49IHQgXiB0aGlzLl9taXhDb2xbczEgXiBzMl07XG4gICAgICAgIHN0YXRlW2ogKyAyXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MyIF4gczNdO1xuICAgICAgICBzdGF0ZVtqICsgM10gXj0gdCBeIHRoaXMuX21peENvbFtzMyBeIHMwXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDAsIGsgPSBpICogMTY7IGogPCAxNjsgKytqLCArK2spIHtcbiAgICAgICAgc3RhdGVbal0gXj0ga2V5W2tdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgc3RhdGVbal0gPSBzW3N0YXRlW2pdXTtcbiAgICB9XG5cbiAgICB2ID0gc3RhdGVbMV07XG4gICAgc3RhdGVbMV0gPSBzdGF0ZVs1XTtcbiAgICBzdGF0ZVs1XSA9IHN0YXRlWzldO1xuICAgIHN0YXRlWzldID0gc3RhdGVbMTNdO1xuICAgIHN0YXRlWzEzXSA9IHY7XG4gICAgdiA9IHN0YXRlWzJdO1xuICAgIHUgPSBzdGF0ZVs2XTtcbiAgICBzdGF0ZVsyXSA9IHN0YXRlWzEwXTtcbiAgICBzdGF0ZVs2XSA9IHN0YXRlWzE0XTtcbiAgICBzdGF0ZVsxMF0gPSB2O1xuICAgIHN0YXRlWzE0XSA9IHU7XG4gICAgdiA9IHN0YXRlWzNdO1xuICAgIHUgPSBzdGF0ZVs3XTtcbiAgICB0ID0gc3RhdGVbMTFdO1xuICAgIHN0YXRlWzNdID0gc3RhdGVbMTVdO1xuICAgIHN0YXRlWzddID0gdjtcbiAgICBzdGF0ZVsxMV0gPSB1O1xuICAgIHN0YXRlWzE1XSA9IHQ7XG5cbiAgICBmb3IgKGxldCBqID0gMCwgayA9IHRoaXMuX2tleVNpemU7IGogPCAxNjsgKytqLCArK2spIHtcbiAgICAgIHN0YXRlW2pdIF49IGtleVtrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBfZGVjcnlwdEJsb2NrMihkYXRhLCBmaW5hbGl6ZSkge1xuICAgIGNvbnN0IHNvdXJjZUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgIGxldCBidWZmZXIgPSB0aGlzLmJ1ZmZlcixcbiAgICAgICAgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJQb3NpdGlvbjtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgaXYgPSB0aGlzLml2O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkge1xuICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aF0gPSBkYXRhW2ldO1xuICAgICAgKytidWZmZXJMZW5ndGg7XG5cbiAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxNikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGxhaW4gPSB0aGlzLl9kZWNyeXB0KGJ1ZmZlciwgdGhpcy5fa2V5KTtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgIHBsYWluW2pdIF49IGl2W2pdO1xuICAgICAgfVxuXG4gICAgICBpdiA9IGJ1ZmZlcjtcbiAgICAgIHJlc3VsdC5wdXNoKHBsYWluKTtcbiAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgIGJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgdGhpcy5pdiA9IGl2O1xuXG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICB9XG5cbiAgICBsZXQgb3V0cHV0TGVuZ3RoID0gMTYgKiByZXN1bHQubGVuZ3RoO1xuXG4gICAgaWYgKGZpbmFsaXplKSB7XG4gICAgICBjb25zdCBsYXN0QmxvY2sgPSByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xuICAgICAgbGV0IHBzTGVuID0gbGFzdEJsb2NrWzE1XTtcblxuICAgICAgaWYgKHBzTGVuIDw9IDE2KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAxNSwgaWkgPSAxNiAtIHBzTGVuOyBpID49IGlpOyAtLWkpIHtcbiAgICAgICAgICBpZiAobGFzdEJsb2NrW2ldICE9PSBwc0xlbikge1xuICAgICAgICAgICAgcHNMZW4gPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb3V0cHV0TGVuZ3RoIC09IHBzTGVuO1xuICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0gbGFzdEJsb2NrLnN1YmFycmF5KDAsIDE2IC0gcHNMZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5KG91dHB1dExlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDAsIGlpID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGlpOyArK2ksIGogKz0gMTYpIHtcbiAgICAgIG91dHB1dC5zZXQocmVzdWx0W2ldLCBqKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgZGVjcnlwdEJsb2NrKGRhdGEsIGZpbmFsaXplLCBpdiA9IG51bGwpIHtcbiAgICBjb25zdCBzb3VyY2VMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICBsZXQgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJQb3NpdGlvbjtcblxuICAgIGlmIChpdikge1xuICAgICAgdGhpcy5pdiA9IGl2O1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgYnVmZmVyTGVuZ3RoIDwgMTYgJiYgaSA8IHNvdXJjZUxlbmd0aDsgKytpLCArK2J1ZmZlckxlbmd0aCkge1xuICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoXSA9IGRhdGFbaV07XG4gICAgICB9XG5cbiAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxNikge1xuICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLml2ID0gYnVmZmVyO1xuICAgICAgZGF0YSA9IGRhdGEuc3ViYXJyYXkoMTYpO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICB0aGlzLmRlY3J5cHRCbG9jayA9IHRoaXMuX2RlY3J5cHRCbG9jazI7XG4gICAgcmV0dXJuIHRoaXMuZGVjcnlwdEJsb2NrKGRhdGEsIGZpbmFsaXplKTtcbiAgfVxuXG4gIGVuY3J5cHQoZGF0YSwgaXYpIHtcbiAgICBjb25zdCBzb3VyY2VMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICBsZXQgYnVmZmVyID0gdGhpcy5idWZmZXIsXG4gICAgICAgIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyUG9zaXRpb247XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBpZiAoIWl2KSB7XG4gICAgICBpdiA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKSB7XG4gICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoXSA9IGRhdGFbaV07XG4gICAgICArK2J1ZmZlckxlbmd0aDtcblxuICAgICAgaWYgKGJ1ZmZlckxlbmd0aCA8IDE2KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgYnVmZmVyW2pdIF49IGl2W2pdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaXBoZXIgPSB0aGlzLl9lbmNyeXB0KGJ1ZmZlciwgdGhpcy5fa2V5KTtcblxuICAgICAgaXYgPSBjaXBoZXI7XG4gICAgICByZXN1bHQucHVzaChjaXBoZXIpO1xuICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgYnVmZmVyTGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgICB0aGlzLml2ID0gaXY7XG5cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dExlbmd0aCA9IDE2ICogcmVzdWx0Lmxlbmd0aDtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSAwLCBpaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCBpaTsgKytpLCBqICs9IDE2KSB7XG4gICAgICBvdXRwdXQuc2V0KHJlc3VsdFtpXSwgaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG59XG5cbmNsYXNzIEFFUzEyOENpcGhlciBleHRlbmRzIEFFU0Jhc2VDaXBoZXIge1xuICBjb25zdHJ1Y3RvcihrZXkpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbiA9IDEwO1xuICAgIHRoaXMuX2tleVNpemUgPSAxNjA7XG4gICAgdGhpcy5fcmNvbiA9IG5ldyBVaW50OEFycmF5KFsweDhkLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2LCAweDZjLCAweGQ4LCAweGFiLCAweDRkLCAweDlhLCAweDJmLCAweDVlLCAweGJjLCAweDYzLCAweGM2LCAweDk3LCAweDM1LCAweDZhLCAweGQ0LCAweGIzLCAweDdkLCAweGZhLCAweGVmLCAweGM1LCAweDkxLCAweDM5LCAweDcyLCAweGU0LCAweGQzLCAweGJkLCAweDYxLCAweGMyLCAweDlmLCAweDI1LCAweDRhLCAweDk0LCAweDMzLCAweDY2LCAweGNjLCAweDgzLCAweDFkLCAweDNhLCAweDc0LCAweGU4LCAweGNiLCAweDhkLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2LCAweDZjLCAweGQ4LCAweGFiLCAweDRkLCAweDlhLCAweDJmLCAweDVlLCAweGJjLCAweDYzLCAweGM2LCAweDk3LCAweDM1LCAweDZhLCAweGQ0LCAweGIzLCAweDdkLCAweGZhLCAweGVmLCAweGM1LCAweDkxLCAweDM5LCAweDcyLCAweGU0LCAweGQzLCAweGJkLCAweDYxLCAweGMyLCAweDlmLCAweDI1LCAweDRhLCAweDk0LCAweDMzLCAweDY2LCAweGNjLCAweDgzLCAweDFkLCAweDNhLCAweDc0LCAweGU4LCAweGNiLCAweDhkLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2LCAweDZjLCAweGQ4LCAweGFiLCAweDRkLCAweDlhLCAweDJmLCAweDVlLCAweGJjLCAweDYzLCAweGM2LCAweDk3LCAweDM1LCAweDZhLCAweGQ0LCAweGIzLCAweDdkLCAweGZhLCAweGVmLCAweGM1LCAweDkxLCAweDM5LCAweDcyLCAweGU0LCAweGQzLCAweGJkLCAweDYxLCAweGMyLCAweDlmLCAweDI1LCAweDRhLCAweDk0LCAweDMzLCAweDY2LCAweGNjLCAweDgzLCAweDFkLCAweDNhLCAweDc0LCAweGU4LCAweGNiLCAweDhkLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2LCAweDZjLCAweGQ4LCAweGFiLCAweDRkLCAweDlhLCAweDJmLCAweDVlLCAweGJjLCAweDYzLCAweGM2LCAweDk3LCAweDM1LCAweDZhLCAweGQ0LCAweGIzLCAweDdkLCAweGZhLCAweGVmLCAweGM1LCAweDkxLCAweDM5LCAweDcyLCAweGU0LCAweGQzLCAweGJkLCAweDYxLCAweGMyLCAweDlmLCAweDI1LCAweDRhLCAweDk0LCAweDMzLCAweDY2LCAweGNjLCAweDgzLCAweDFkLCAweDNhLCAweDc0LCAweGU4LCAweGNiLCAweDhkLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2LCAweDZjLCAweGQ4LCAweGFiLCAweDRkLCAweDlhLCAweDJmLCAweDVlLCAweGJjLCAweDYzLCAweGM2LCAweDk3LCAweDM1LCAweDZhLCAweGQ0LCAweGIzLCAweDdkLCAweGZhLCAweGVmLCAweGM1LCAweDkxLCAweDM5LCAweDcyLCAweGU0LCAweGQzLCAweGJkLCAweDYxLCAweGMyLCAweDlmLCAweDI1LCAweDRhLCAweDk0LCAweDMzLCAweDY2LCAweGNjLCAweDgzLCAweDFkLCAweDNhLCAweDc0LCAweGU4LCAweGNiLCAweDhkXSk7XG4gICAgdGhpcy5fa2V5ID0gdGhpcy5fZXhwYW5kS2V5KGtleSk7XG4gIH1cblxuICBfZXhwYW5kS2V5KGNpcGhlcktleSkge1xuICAgIGNvbnN0IGIgPSAxNzY7XG4gICAgY29uc3QgcyA9IHRoaXMuX3M7XG4gICAgY29uc3QgcmNvbiA9IHRoaXMuX3Jjb247XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYik7XG4gICAgcmVzdWx0LnNldChjaXBoZXJLZXkpO1xuXG4gICAgZm9yIChsZXQgaiA9IDE2LCBpID0gMTsgaiA8IGI7ICsraSkge1xuICAgICAgbGV0IHQxID0gcmVzdWx0W2ogLSAzXTtcbiAgICAgIGxldCB0MiA9IHJlc3VsdFtqIC0gMl07XG4gICAgICBsZXQgdDMgPSByZXN1bHRbaiAtIDFdO1xuICAgICAgbGV0IHQ0ID0gcmVzdWx0W2ogLSA0XTtcbiAgICAgIHQxID0gc1t0MV07XG4gICAgICB0MiA9IHNbdDJdO1xuICAgICAgdDMgPSBzW3QzXTtcbiAgICAgIHQ0ID0gc1t0NF07XG4gICAgICB0MSA9IHQxIF4gcmNvbltpXTtcblxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCA0OyArK24pIHtcbiAgICAgICAgcmVzdWx0W2pdID0gdDEgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgICAgcmVzdWx0W2pdID0gdDIgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgICAgcmVzdWx0W2pdID0gdDMgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgICAgcmVzdWx0W2pdID0gdDQgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn1cblxuZXhwb3J0cy5BRVMxMjhDaXBoZXIgPSBBRVMxMjhDaXBoZXI7XG5cbmNsYXNzIEFFUzI1NkNpcGhlciBleHRlbmRzIEFFU0Jhc2VDaXBoZXIge1xuICBjb25zdHJ1Y3RvcihrZXkpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbiA9IDE0O1xuICAgIHRoaXMuX2tleVNpemUgPSAyMjQ7XG4gICAgdGhpcy5fa2V5ID0gdGhpcy5fZXhwYW5kS2V5KGtleSk7XG4gIH1cblxuICBfZXhwYW5kS2V5KGNpcGhlcktleSkge1xuICAgIGNvbnN0IGIgPSAyNDA7XG4gICAgY29uc3QgcyA9IHRoaXMuX3M7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYik7XG4gICAgcmVzdWx0LnNldChjaXBoZXJLZXkpO1xuICAgIGxldCByID0gMTtcbiAgICBsZXQgdDEsIHQyLCB0MywgdDQ7XG5cbiAgICBmb3IgKGxldCBqID0gMzIsIGkgPSAxOyBqIDwgYjsgKytpKSB7XG4gICAgICBpZiAoaiAlIDMyID09PSAxNikge1xuICAgICAgICB0MSA9IHNbdDFdO1xuICAgICAgICB0MiA9IHNbdDJdO1xuICAgICAgICB0MyA9IHNbdDNdO1xuICAgICAgICB0NCA9IHNbdDRdO1xuICAgICAgfSBlbHNlIGlmIChqICUgMzIgPT09IDApIHtcbiAgICAgICAgdDEgPSByZXN1bHRbaiAtIDNdO1xuICAgICAgICB0MiA9IHJlc3VsdFtqIC0gMl07XG4gICAgICAgIHQzID0gcmVzdWx0W2ogLSAxXTtcbiAgICAgICAgdDQgPSByZXN1bHRbaiAtIDRdO1xuICAgICAgICB0MSA9IHNbdDFdO1xuICAgICAgICB0MiA9IHNbdDJdO1xuICAgICAgICB0MyA9IHNbdDNdO1xuICAgICAgICB0NCA9IHNbdDRdO1xuICAgICAgICB0MSA9IHQxIF4gcjtcblxuICAgICAgICBpZiAoKHIgPDw9IDEpID49IDI1Nikge1xuICAgICAgICAgIHIgPSAociBeIDB4MWIpICYgMHhmZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IDQ7ICsrbikge1xuICAgICAgICByZXN1bHRbal0gPSB0MSBePSByZXN1bHRbaiAtIDMyXTtcbiAgICAgICAgaisrO1xuICAgICAgICByZXN1bHRbal0gPSB0MiBePSByZXN1bHRbaiAtIDMyXTtcbiAgICAgICAgaisrO1xuICAgICAgICByZXN1bHRbal0gPSB0MyBePSByZXN1bHRbaiAtIDMyXTtcbiAgICAgICAgaisrO1xuICAgICAgICByZXN1bHRbal0gPSB0NCBePSByZXN1bHRbaiAtIDMyXTtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxufVxuXG5leHBvcnRzLkFFUzI1NkNpcGhlciA9IEFFUzI1NkNpcGhlcjtcblxudmFyIFBERjE3ID0gZnVuY3Rpb24gUERGMTdDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBjb21wYXJlQnl0ZUFycmF5cyhhcnJheTEsIGFycmF5Mikge1xuICAgIGlmIChhcnJheTEubGVuZ3RoICE9PSBhcnJheTIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcnJheTFbaV0gIT09IGFycmF5MltpXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBQREYxNygpIHt9XG5cbiAgUERGMTcucHJvdG90eXBlID0ge1xuICAgIGNoZWNrT3duZXJQYXNzd29yZDogZnVuY3Rpb24gUERGMTdfY2hlY2tPd25lclBhc3N3b3JkKHBhc3N3b3JkLCBvd25lclZhbGlkYXRpb25TYWx0LCB1c2VyQnl0ZXMsIG93bmVyUGFzc3dvcmQpIHtcbiAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDU2KTtcbiAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICBoYXNoRGF0YS5zZXQob3duZXJWYWxpZGF0aW9uU2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgIGhhc2hEYXRhLnNldCh1c2VyQnl0ZXMsIHBhc3N3b3JkLmxlbmd0aCArIG93bmVyVmFsaWRhdGlvblNhbHQubGVuZ3RoKTtcbiAgICAgIHZhciByZXN1bHQgPSBjYWxjdWxhdGVTSEEyNTYoaGFzaERhdGEsIDAsIGhhc2hEYXRhLmxlbmd0aCk7XG4gICAgICByZXR1cm4gY29tcGFyZUJ5dGVBcnJheXMocmVzdWx0LCBvd25lclBhc3N3b3JkKTtcbiAgICB9LFxuICAgIGNoZWNrVXNlclBhc3N3b3JkOiBmdW5jdGlvbiBQREYxN19jaGVja1VzZXJQYXNzd29yZChwYXNzd29yZCwgdXNlclZhbGlkYXRpb25TYWx0LCB1c2VyUGFzc3dvcmQpIHtcbiAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDgpO1xuICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgIGhhc2hEYXRhLnNldCh1c2VyVmFsaWRhdGlvblNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICB2YXIgcmVzdWx0ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgICAgcmV0dXJuIGNvbXBhcmVCeXRlQXJyYXlzKHJlc3VsdCwgdXNlclBhc3N3b3JkKTtcbiAgICB9LFxuICAgIGdldE93bmVyS2V5OiBmdW5jdGlvbiBQREYxN19nZXRPd25lcktleShwYXNzd29yZCwgb3duZXJLZXlTYWx0LCB1c2VyQnl0ZXMsIG93bmVyRW5jcnlwdGlvbikge1xuICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpO1xuICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgIGhhc2hEYXRhLnNldChvd25lcktleVNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICBoYXNoRGF0YS5zZXQodXNlckJ5dGVzLCBwYXNzd29yZC5sZW5ndGggKyBvd25lcktleVNhbHQubGVuZ3RoKTtcbiAgICAgIHZhciBrZXkgPSBjYWxjdWxhdGVTSEEyNTYoaGFzaERhdGEsIDAsIGhhc2hEYXRhLmxlbmd0aCk7XG4gICAgICB2YXIgY2lwaGVyID0gbmV3IEFFUzI1NkNpcGhlcihrZXkpO1xuICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sob3duZXJFbmNyeXB0aW9uLCBmYWxzZSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICB9LFxuICAgIGdldFVzZXJLZXk6IGZ1bmN0aW9uIFBERjE3X2dldFVzZXJLZXkocGFzc3dvcmQsIHVzZXJLZXlTYWx0LCB1c2VyRW5jcnlwdGlvbikge1xuICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgOCk7XG4gICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgaGFzaERhdGEuc2V0KHVzZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgdmFyIGtleSA9IGNhbGN1bGF0ZVNIQTI1NihoYXNoRGF0YSwgMCwgaGFzaERhdGEubGVuZ3RoKTtcbiAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICByZXR1cm4gY2lwaGVyLmRlY3J5cHRCbG9jayh1c2VyRW5jcnlwdGlvbiwgZmFsc2UsIG5ldyBVaW50OEFycmF5KDE2KSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gUERGMTc7XG59KCk7XG5cbmV4cG9ydHMuUERGMTcgPSBQREYxNztcblxudmFyIFBERjIwID0gZnVuY3Rpb24gUERGMjBDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBjb25jYXRBcnJheXMoYXJyYXkxLCBhcnJheTIpIHtcbiAgICB2YXIgdCA9IG5ldyBVaW50OEFycmF5KGFycmF5MS5sZW5ndGggKyBhcnJheTIubGVuZ3RoKTtcbiAgICB0LnNldChhcnJheTEsIDApO1xuICAgIHQuc2V0KGFycmF5MiwgYXJyYXkxLmxlbmd0aCk7XG4gICAgcmV0dXJuIHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGlucHV0LCB1c2VyQnl0ZXMpIHtcbiAgICB2YXIgayA9IGNhbGN1bGF0ZVNIQTI1NihpbnB1dCwgMCwgaW5wdXQubGVuZ3RoKS5zdWJhcnJheSgwLCAzMik7XG4gICAgdmFyIGUgPSBbMF07XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCA2NCB8fCBlW2UubGVuZ3RoIC0gMV0gPiBpIC0gMzIpIHtcbiAgICAgIHZhciBhcnJheUxlbmd0aCA9IHBhc3N3b3JkLmxlbmd0aCArIGsubGVuZ3RoICsgdXNlckJ5dGVzLmxlbmd0aDtcbiAgICAgIHZhciBrMSA9IG5ldyBVaW50OEFycmF5KGFycmF5TGVuZ3RoICogNjQpO1xuICAgICAgdmFyIGFycmF5ID0gY29uY2F0QXJyYXlzKHBhc3N3b3JkLCBrKTtcbiAgICAgIGFycmF5ID0gY29uY2F0QXJyYXlzKGFycmF5LCB1c2VyQnl0ZXMpO1xuXG4gICAgICBmb3IgKHZhciBqID0gMCwgcG9zID0gMDsgaiA8IDY0OyBqKyssIHBvcyArPSBhcnJheUxlbmd0aCkge1xuICAgICAgICBrMS5zZXQoYXJyYXksIHBvcyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMTI4Q2lwaGVyKGsuc3ViYXJyYXkoMCwgMTYpKTtcbiAgICAgIGUgPSBjaXBoZXIuZW5jcnlwdChrMSwgay5zdWJhcnJheSgxNiwgMzIpKTtcbiAgICAgIHZhciByZW1haW5kZXIgPSAwO1xuXG4gICAgICBmb3IgKHZhciB6ID0gMDsgeiA8IDE2OyB6KyspIHtcbiAgICAgICAgcmVtYWluZGVyICo9IDI1NiAlIDM7XG4gICAgICAgIHJlbWFpbmRlciAlPSAzO1xuICAgICAgICByZW1haW5kZXIgKz0gKGVbel0gPj4+IDApICUgMztcbiAgICAgICAgcmVtYWluZGVyICU9IDM7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW1haW5kZXIgPT09IDApIHtcbiAgICAgICAgayA9IGNhbGN1bGF0ZVNIQTI1NihlLCAwLCBlLmxlbmd0aCk7XG4gICAgICB9IGVsc2UgaWYgKHJlbWFpbmRlciA9PT0gMSkge1xuICAgICAgICBrID0gY2FsY3VsYXRlU0hBMzg0KGUsIDAsIGUubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSBpZiAocmVtYWluZGVyID09PSAyKSB7XG4gICAgICAgIGsgPSBjYWxjdWxhdGVTSEE1MTIoZSwgMCwgZS5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGsuc3ViYXJyYXkoMCwgMzIpO1xuICB9XG5cbiAgZnVuY3Rpb24gUERGMjAoKSB7fVxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVCeXRlQXJyYXlzKGFycmF5MSwgYXJyYXkyKSB7XG4gICAgaWYgKGFycmF5MS5sZW5ndGggIT09IGFycmF5Mi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIFBERjIwLnByb3RvdHlwZSA9IHtcbiAgICBoYXNoOiBmdW5jdGlvbiBQREYyMF9oYXNoKHBhc3N3b3JkLCBjb25jYXRCeXRlcywgdXNlckJ5dGVzKSB7XG4gICAgICByZXR1cm4gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBjb25jYXRCeXRlcywgdXNlckJ5dGVzKTtcbiAgICB9LFxuICAgIGNoZWNrT3duZXJQYXNzd29yZDogZnVuY3Rpb24gUERGMjBfY2hlY2tPd25lclBhc3N3b3JkKHBhc3N3b3JkLCBvd25lclZhbGlkYXRpb25TYWx0LCB1c2VyQnl0ZXMsIG93bmVyUGFzc3dvcmQpIHtcbiAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDU2KTtcbiAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICBoYXNoRGF0YS5zZXQob3duZXJWYWxpZGF0aW9uU2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgIGhhc2hEYXRhLnNldCh1c2VyQnl0ZXMsIHBhc3N3b3JkLmxlbmd0aCArIG93bmVyVmFsaWRhdGlvblNhbHQubGVuZ3RoKTtcbiAgICAgIHZhciByZXN1bHQgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCB1c2VyQnl0ZXMpO1xuICAgICAgcmV0dXJuIGNvbXBhcmVCeXRlQXJyYXlzKHJlc3VsdCwgb3duZXJQYXNzd29yZCk7XG4gICAgfSxcbiAgICBjaGVja1VzZXJQYXNzd29yZDogZnVuY3Rpb24gUERGMjBfY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSB7XG4gICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA4KTtcbiAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICBoYXNoRGF0YS5zZXQodXNlclZhbGlkYXRpb25TYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgdmFyIHJlc3VsdCA9IGNhbGN1bGF0ZVBERjIwSGFzaChwYXNzd29yZCwgaGFzaERhdGEsIFtdKTtcbiAgICAgIHJldHVybiBjb21wYXJlQnl0ZUFycmF5cyhyZXN1bHQsIHVzZXJQYXNzd29yZCk7XG4gICAgfSxcbiAgICBnZXRPd25lcktleTogZnVuY3Rpb24gUERGMjBfZ2V0T3duZXJLZXkocGFzc3dvcmQsIG93bmVyS2V5U2FsdCwgdXNlckJ5dGVzLCBvd25lckVuY3J5cHRpb24pIHtcbiAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDU2KTtcbiAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICBoYXNoRGF0YS5zZXQob3duZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgaGFzaERhdGEuc2V0KHVzZXJCeXRlcywgcGFzc3dvcmQubGVuZ3RoICsgb3duZXJLZXlTYWx0Lmxlbmd0aCk7XG4gICAgICB2YXIga2V5ID0gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBoYXNoRGF0YSwgdXNlckJ5dGVzKTtcbiAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICByZXR1cm4gY2lwaGVyLmRlY3J5cHRCbG9jayhvd25lckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICAgIH0sXG4gICAgZ2V0VXNlcktleTogZnVuY3Rpb24gUERGMjBfZ2V0VXNlcktleShwYXNzd29yZCwgdXNlcktleVNhbHQsIHVzZXJFbmNyeXB0aW9uKSB7XG4gICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA4KTtcbiAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICBoYXNoRGF0YS5zZXQodXNlcktleVNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICB2YXIga2V5ID0gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBoYXNoRGF0YSwgW10pO1xuICAgICAgdmFyIGNpcGhlciA9IG5ldyBBRVMyNTZDaXBoZXIoa2V5KTtcbiAgICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdEJsb2NrKHVzZXJFbmNyeXB0aW9uLCBmYWxzZSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBQREYyMDtcbn0oKTtcblxuZXhwb3J0cy5QREYyMCA9IFBERjIwO1xuXG52YXIgQ2lwaGVyVHJhbnNmb3JtID0gZnVuY3Rpb24gQ2lwaGVyVHJhbnNmb3JtQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQ2lwaGVyVHJhbnNmb3JtKHN0cmluZ0NpcGhlckNvbnN0cnVjdG9yLCBzdHJlYW1DaXBoZXJDb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3IgPSBzdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtcbiAgICB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yID0gc3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I7XG4gIH1cblxuICBDaXBoZXJUcmFuc2Zvcm0ucHJvdG90eXBlID0ge1xuICAgIGNyZWF0ZVN0cmVhbTogZnVuY3Rpb24gQ2lwaGVyVHJhbnNmb3JtX2NyZWF0ZVN0cmVhbShzdHJlYW0sIGxlbmd0aCkge1xuICAgICAgdmFyIGNpcGhlciA9IG5ldyB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yKCk7XG4gICAgICByZXR1cm4gbmV3IF9zdHJlYW0uRGVjcnlwdFN0cmVhbShzdHJlYW0sIGxlbmd0aCwgZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRGVjcnlwdFN0cmVhbShkYXRhLCBmaW5hbGl6ZSkge1xuICAgICAgICByZXR1cm4gY2lwaGVyLmRlY3J5cHRCbG9jayhkYXRhLCBmaW5hbGl6ZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGRlY3J5cHRTdHJpbmc6IGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybV9kZWNyeXB0U3RyaW5nKHMpIHtcbiAgICAgIHZhciBjaXBoZXIgPSBuZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcigpO1xuICAgICAgdmFyIGRhdGEgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7XG4gICAgICBkYXRhID0gY2lwaGVyLmRlY3J5cHRCbG9jayhkYXRhLCB0cnVlKTtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoZGF0YSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gQ2lwaGVyVHJhbnNmb3JtO1xufSgpO1xuXG52YXIgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSA9IGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUZhY3RvcnlDbG9zdXJlKCkge1xuICB2YXIgZGVmYXVsdFBhc3N3b3JkQnl0ZXMgPSBuZXcgVWludDhBcnJheShbMHgyOCwgMHhCRiwgMHg0RSwgMHg1RSwgMHg0RSwgMHg3NSwgMHg4QSwgMHg0MSwgMHg2NCwgMHgwMCwgMHg0RSwgMHg1NiwgMHhGRiwgMHhGQSwgMHgwMSwgMHgwOCwgMHgyRSwgMHgyRSwgMHgwMCwgMHhCNiwgMHhEMCwgMHg2OCwgMHgzRSwgMHg4MCwgMHgyRiwgMHgwQywgMHhBOSwgMHhGRSwgMHg2NCwgMHg1MywgMHg2OSwgMHg3QV0pO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVuY3J5cHRpb25LZXkyMChyZXZpc2lvbiwgcGFzc3dvcmQsIG93bmVyUGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIG93bmVyS2V5U2FsdCwgdUJ5dGVzLCB1c2VyUGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlcktleVNhbHQsIG93bmVyRW5jcnlwdGlvbiwgdXNlckVuY3J5cHRpb24sIHBlcm1zKSB7XG4gICAgaWYgKHBhc3N3b3JkKSB7XG4gICAgICB2YXIgcGFzc3dvcmRMZW5ndGggPSBNYXRoLm1pbigxMjcsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICBwYXNzd29yZCA9IHBhc3N3b3JkLnN1YmFycmF5KDAsIHBhc3N3b3JkTGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFzc3dvcmQgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgcGRmQWxnb3JpdGhtO1xuXG4gICAgaWYgKHJldmlzaW9uID09PSA2KSB7XG4gICAgICBwZGZBbGdvcml0aG0gPSBuZXcgUERGMjAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGRmQWxnb3JpdGhtID0gbmV3IFBERjE3KCk7XG4gICAgfVxuXG4gICAgaWYgKHBkZkFsZ29yaXRobS5jaGVja1VzZXJQYXNzd29yZChwYXNzd29yZCwgdXNlclZhbGlkYXRpb25TYWx0LCB1c2VyUGFzc3dvcmQpKSB7XG4gICAgICByZXR1cm4gcGRmQWxnb3JpdGhtLmdldFVzZXJLZXkocGFzc3dvcmQsIHVzZXJLZXlTYWx0LCB1c2VyRW5jcnlwdGlvbik7XG4gICAgfSBlbHNlIGlmIChwYXNzd29yZC5sZW5ndGggJiYgcGRmQWxnb3JpdGhtLmNoZWNrT3duZXJQYXNzd29yZChwYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgdUJ5dGVzLCBvd25lclBhc3N3b3JkKSkge1xuICAgICAgcmV0dXJuIHBkZkFsZ29yaXRobS5nZXRPd25lcktleShwYXNzd29yZCwgb3duZXJLZXlTYWx0LCB1Qnl0ZXMsIG93bmVyRW5jcnlwdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlS2V5RGF0YShmaWxlSWQsIHBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmQsIGZsYWdzLCByZXZpc2lvbiwga2V5TGVuZ3RoLCBlbmNyeXB0TWV0YWRhdGEpIHtcbiAgICB2YXIgaGFzaERhdGFTaXplID0gNDAgKyBvd25lclBhc3N3b3JkLmxlbmd0aCArIGZpbGVJZC5sZW5ndGg7XG4gICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkoaGFzaERhdGFTaXplKSxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIGosXG4gICAgICAgIG47XG5cbiAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgIG4gPSBNYXRoLm1pbigzMiwgcGFzc3dvcmQubGVuZ3RoKTtcblxuICAgICAgZm9yICg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaGFzaERhdGFbaV0gPSBwYXNzd29yZFtpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBqID0gMDtcblxuICAgIHdoaWxlIChpIDwgMzIpIHtcbiAgICAgIGhhc2hEYXRhW2krK10gPSBkZWZhdWx0UGFzc3dvcmRCeXRlc1tqKytdO1xuICAgIH1cblxuICAgIGZvciAoaiA9IDAsIG4gPSBvd25lclBhc3N3b3JkLmxlbmd0aDsgaiA8IG47ICsraikge1xuICAgICAgaGFzaERhdGFbaSsrXSA9IG93bmVyUGFzc3dvcmRbal07XG4gICAgfVxuXG4gICAgaGFzaERhdGFbaSsrXSA9IGZsYWdzICYgMHhmZjtcbiAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgPj4gOCAmIDB4ZmY7XG4gICAgaGFzaERhdGFbaSsrXSA9IGZsYWdzID4+IDE2ICYgMHhmZjtcbiAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgPj4+IDI0ICYgMHhmZjtcblxuICAgIGZvciAoaiA9IDAsIG4gPSBmaWxlSWQubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICBoYXNoRGF0YVtpKytdID0gZmlsZUlkW2pdO1xuICAgIH1cblxuICAgIGlmIChyZXZpc2lvbiA+PSA0ICYmICFlbmNyeXB0TWV0YWRhdGEpIHtcbiAgICAgIGhhc2hEYXRhW2krK10gPSAweGZmO1xuICAgICAgaGFzaERhdGFbaSsrXSA9IDB4ZmY7XG4gICAgICBoYXNoRGF0YVtpKytdID0gMHhmZjtcbiAgICAgIGhhc2hEYXRhW2krK10gPSAweGZmO1xuICAgIH1cblxuICAgIHZhciBoYXNoID0gY2FsY3VsYXRlTUQ1KGhhc2hEYXRhLCAwLCBpKTtcbiAgICB2YXIga2V5TGVuZ3RoSW5CeXRlcyA9IGtleUxlbmd0aCA+PiAzO1xuXG4gICAgaWYgKHJldmlzaW9uID49IDMpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCA1MDsgKytqKSB7XG4gICAgICAgIGhhc2ggPSBjYWxjdWxhdGVNRDUoaGFzaCwgMCwga2V5TGVuZ3RoSW5CeXRlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVuY3J5cHRpb25LZXkgPSBoYXNoLnN1YmFycmF5KDAsIGtleUxlbmd0aEluQnl0ZXMpO1xuICAgIHZhciBjaXBoZXIsIGNoZWNrRGF0YTtcblxuICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkge1xuICAgICAgICBoYXNoRGF0YVtpXSA9IGRlZmF1bHRQYXNzd29yZEJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSAwLCBuID0gZmlsZUlkLmxlbmd0aDsgaiA8IG47ICsraikge1xuICAgICAgICBoYXNoRGF0YVtpKytdID0gZmlsZUlkW2pdO1xuICAgICAgfVxuXG4gICAgICBjaXBoZXIgPSBuZXcgQVJDRm91ckNpcGhlcihlbmNyeXB0aW9uS2V5KTtcbiAgICAgIGNoZWNrRGF0YSA9IGNpcGhlci5lbmNyeXB0QmxvY2soY2FsY3VsYXRlTUQ1KGhhc2hEYXRhLCAwLCBpKSk7XG4gICAgICBuID0gZW5jcnlwdGlvbktleS5sZW5ndGg7XG4gICAgICB2YXIgZGVyaXZlZEtleSA9IG5ldyBVaW50OEFycmF5KG4pLFxuICAgICAgICAgIGs7XG5cbiAgICAgIGZvciAoaiA9IDE7IGogPD0gMTk7ICsraikge1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbjsgKytrKSB7XG4gICAgICAgICAgZGVyaXZlZEtleVtrXSA9IGVuY3J5cHRpb25LZXlba10gXiBqO1xuICAgICAgICB9XG5cbiAgICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoZGVyaXZlZEtleSk7XG4gICAgICAgIGNoZWNrRGF0YSA9IGNpcGhlci5lbmNyeXB0QmxvY2soY2hlY2tEYXRhKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gMCwgbiA9IGNoZWNrRGF0YS5sZW5ndGg7IGogPCBuOyArK2opIHtcbiAgICAgICAgaWYgKHVzZXJQYXNzd29yZFtqXSAhPT0gY2hlY2tEYXRhW2pdKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoZW5jcnlwdGlvbktleSk7XG4gICAgICBjaGVja0RhdGEgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKGRlZmF1bHRQYXNzd29yZEJ5dGVzKTtcblxuICAgICAgZm9yIChqID0gMCwgbiA9IGNoZWNrRGF0YS5sZW5ndGg7IGogPCBuOyArK2opIHtcbiAgICAgICAgaWYgKHVzZXJQYXNzd29yZFtqXSAhPT0gY2hlY2tEYXRhW2pdKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW5jcnlwdGlvbktleTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZVVzZXJQYXNzd29yZChwYXNzd29yZCwgb3duZXJQYXNzd29yZCwgcmV2aXNpb24sIGtleUxlbmd0aCkge1xuICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KDMyKSxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIGosXG4gICAgICAgIG47XG4gICAgbiA9IE1hdGgubWluKDMyLCBwYXNzd29yZC5sZW5ndGgpO1xuXG4gICAgZm9yICg7IGkgPCBuOyArK2kpIHtcbiAgICAgIGhhc2hEYXRhW2ldID0gcGFzc3dvcmRbaV07XG4gICAgfVxuXG4gICAgaiA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IDMyKSB7XG4gICAgICBoYXNoRGF0YVtpKytdID0gZGVmYXVsdFBhc3N3b3JkQnl0ZXNbaisrXTtcbiAgICB9XG5cbiAgICB2YXIgaGFzaCA9IGNhbGN1bGF0ZU1ENShoYXNoRGF0YSwgMCwgaSk7XG4gICAgdmFyIGtleUxlbmd0aEluQnl0ZXMgPSBrZXlMZW5ndGggPj4gMztcblxuICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgNTA7ICsraikge1xuICAgICAgICBoYXNoID0gY2FsY3VsYXRlTUQ1KGhhc2gsIDAsIGhhc2gubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2lwaGVyLCB1c2VyUGFzc3dvcmQ7XG5cbiAgICBpZiAocmV2aXNpb24gPj0gMykge1xuICAgICAgdXNlclBhc3N3b3JkID0gb3duZXJQYXNzd29yZDtcbiAgICAgIHZhciBkZXJpdmVkS2V5ID0gbmV3IFVpbnQ4QXJyYXkoa2V5TGVuZ3RoSW5CeXRlcyksXG4gICAgICAgICAgaztcblxuICAgICAgZm9yIChqID0gMTk7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBrZXlMZW5ndGhJbkJ5dGVzOyArK2spIHtcbiAgICAgICAgICBkZXJpdmVkS2V5W2tdID0gaGFzaFtrXSBeIGo7XG4gICAgICAgIH1cblxuICAgICAgICBjaXBoZXIgPSBuZXcgQVJDRm91ckNpcGhlcihkZXJpdmVkS2V5KTtcbiAgICAgICAgdXNlclBhc3N3b3JkID0gY2lwaGVyLmVuY3J5cHRCbG9jayh1c2VyUGFzc3dvcmQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjaXBoZXIgPSBuZXcgQVJDRm91ckNpcGhlcihoYXNoLnN1YmFycmF5KDAsIGtleUxlbmd0aEluQnl0ZXMpKTtcbiAgICAgIHVzZXJQYXNzd29yZCA9IGNpcGhlci5lbmNyeXB0QmxvY2sob3duZXJQYXNzd29yZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXJQYXNzd29yZDtcbiAgfVxuXG4gIHZhciBpZGVudGl0eU5hbWUgPSBfcHJpbWl0aXZlcy5OYW1lLmdldChcIklkZW50aXR5XCIpO1xuXG4gIGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUZhY3RvcnkoZGljdCwgZmlsZUlkLCBwYXNzd29yZCkge1xuICAgIHZhciBmaWx0ZXIgPSBkaWN0LmdldChcIkZpbHRlclwiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyLCBcIlN0YW5kYXJkXCIpKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kXCIpO1xuICAgIH1cblxuICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgdmFyIGFsZ29yaXRobSA9IGRpY3QuZ2V0KFwiVlwiKTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhbGdvcml0aG0pIHx8IGFsZ29yaXRobSAhPT0gMSAmJiBhbGdvcml0aG0gIT09IDIgJiYgYWxnb3JpdGhtICE9PSA0ICYmIGFsZ29yaXRobSAhPT0gNSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG1cIik7XG4gICAgfVxuXG4gICAgdGhpcy5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgdmFyIGtleUxlbmd0aCA9IGRpY3QuZ2V0KFwiTGVuZ3RoXCIpO1xuXG4gICAgaWYgKCFrZXlMZW5ndGgpIHtcbiAgICAgIGlmIChhbGdvcml0aG0gPD0gMykge1xuICAgICAgICBrZXlMZW5ndGggPSA0MDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjZkRpY3QgPSBkaWN0LmdldChcIkNGXCIpO1xuICAgICAgICB2YXIgc3RyZWFtQ3J5cHRvTmFtZSA9IGRpY3QuZ2V0KFwiU3RtRlwiKTtcblxuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoY2ZEaWN0KSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShzdHJlYW1DcnlwdG9OYW1lKSkge1xuICAgICAgICAgIGNmRGljdC5zdXBwcmVzc0VuY3J5cHRpb24gPSB0cnVlO1xuICAgICAgICAgIHZhciBoYW5kbGVyRGljdCA9IGNmRGljdC5nZXQoc3RyZWFtQ3J5cHRvTmFtZS5uYW1lKTtcbiAgICAgICAgICBrZXlMZW5ndGggPSBoYW5kbGVyRGljdCAmJiBoYW5kbGVyRGljdC5nZXQoXCJMZW5ndGhcIikgfHwgMTI4O1xuXG4gICAgICAgICAgaWYgKGtleUxlbmd0aCA8IDQwKSB7XG4gICAgICAgICAgICBrZXlMZW5ndGggPDw9IDM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGtleUxlbmd0aCkgfHwga2V5TGVuZ3RoIDwgNDAgfHwga2V5TGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoXCIpO1xuICAgIH1cblxuICAgIHZhciBvd25lclBhc3N3b3JkID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiT1wiKSkuc3ViYXJyYXkoMCwgMzIpO1xuICAgIHZhciB1c2VyUGFzc3dvcmQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJVXCIpKS5zdWJhcnJheSgwLCAzMik7XG4gICAgdmFyIGZsYWdzID0gZGljdC5nZXQoXCJQXCIpO1xuICAgIHZhciByZXZpc2lvbiA9IGRpY3QuZ2V0KFwiUlwiKTtcbiAgICB2YXIgZW5jcnlwdE1ldGFkYXRhID0gKGFsZ29yaXRobSA9PT0gNCB8fCBhbGdvcml0aG0gPT09IDUpICYmIGRpY3QuZ2V0KFwiRW5jcnlwdE1ldGFkYXRhXCIpICE9PSBmYWxzZTtcbiAgICB0aGlzLmVuY3J5cHRNZXRhZGF0YSA9IGVuY3J5cHRNZXRhZGF0YTtcbiAgICB2YXIgZmlsZUlkQnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZmlsZUlkKTtcbiAgICB2YXIgcGFzc3dvcmRCeXRlcztcblxuICAgIGlmIChwYXNzd29yZCkge1xuICAgICAgaWYgKHJldmlzaW9uID09PSA2KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFzc3dvcmQgPSAoMCwgX3V0aWwudXRmOFN0cmluZ1RvU3RyaW5nKShwYXNzd29yZCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTogXCIgKyBcIlVuYWJsZSB0byBjb252ZXJ0IFVURjggZW5jb2RlZCBwYXNzd29yZC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGFzc3dvcmRCeXRlcyA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGVuY3J5cHRpb25LZXk7XG5cbiAgICBpZiAoYWxnb3JpdGhtICE9PSA1KSB7XG4gICAgICBlbmNyeXB0aW9uS2V5ID0gcHJlcGFyZUtleURhdGEoZmlsZUlkQnl0ZXMsIHBhc3N3b3JkQnl0ZXMsIG93bmVyUGFzc3dvcmQsIHVzZXJQYXNzd29yZCwgZmxhZ3MsIHJldmlzaW9uLCBrZXlMZW5ndGgsIGVuY3J5cHRNZXRhZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvd25lclZhbGlkYXRpb25TYWx0ID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiT1wiKSkuc3ViYXJyYXkoMzIsIDQwKTtcbiAgICAgIHZhciBvd25lcktleVNhbHQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJPXCIpKS5zdWJhcnJheSg0MCwgNDgpO1xuICAgICAgdmFyIHVCeXRlcyA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIlVcIikpLnN1YmFycmF5KDAsIDQ4KTtcbiAgICAgIHZhciB1c2VyVmFsaWRhdGlvblNhbHQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJVXCIpKS5zdWJhcnJheSgzMiwgNDApO1xuICAgICAgdmFyIHVzZXJLZXlTYWx0ID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiVVwiKSkuc3ViYXJyYXkoNDAsIDQ4KTtcbiAgICAgIHZhciBvd25lckVuY3J5cHRpb24gPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJPRVwiKSk7XG4gICAgICB2YXIgdXNlckVuY3J5cHRpb24gPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJVRVwiKSk7XG4gICAgICB2YXIgcGVybXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJQZXJtc1wiKSk7XG4gICAgICBlbmNyeXB0aW9uS2V5ID0gY3JlYXRlRW5jcnlwdGlvbktleTIwKHJldmlzaW9uLCBwYXNzd29yZEJ5dGVzLCBvd25lclBhc3N3b3JkLCBvd25lclZhbGlkYXRpb25TYWx0LCBvd25lcktleVNhbHQsIHVCeXRlcywgdXNlclBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJLZXlTYWx0LCBvd25lckVuY3J5cHRpb24sIHVzZXJFbmNyeXB0aW9uLCBwZXJtcyk7XG4gICAgfVxuXG4gICAgaWYgKCFlbmNyeXB0aW9uS2V5ICYmICFwYXNzd29yZCkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKFwiTm8gcGFzc3dvcmQgZ2l2ZW5cIiwgX3V0aWwuUGFzc3dvcmRSZXNwb25zZXMuTkVFRF9QQVNTV09SRCk7XG4gICAgfSBlbHNlIGlmICghZW5jcnlwdGlvbktleSAmJiBwYXNzd29yZCkge1xuICAgICAgdmFyIGRlY29kZWRQYXNzd29yZCA9IGRlY29kZVVzZXJQYXNzd29yZChwYXNzd29yZEJ5dGVzLCBvd25lclBhc3N3b3JkLCByZXZpc2lvbiwga2V5TGVuZ3RoKTtcbiAgICAgIGVuY3J5cHRpb25LZXkgPSBwcmVwYXJlS2V5RGF0YShmaWxlSWRCeXRlcywgZGVjb2RlZFBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmQsIGZsYWdzLCByZXZpc2lvbiwga2V5TGVuZ3RoLCBlbmNyeXB0TWV0YWRhdGEpO1xuICAgIH1cblxuICAgIGlmICghZW5jcnlwdGlvbktleSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKFwiSW5jb3JyZWN0IFBhc3N3b3JkXCIsIF91dGlsLlBhc3N3b3JkUmVzcG9uc2VzLklOQ09SUkVDVF9QQVNTV09SRCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0gZW5jcnlwdGlvbktleTtcblxuICAgIGlmIChhbGdvcml0aG0gPj0gNCkge1xuICAgICAgdmFyIGNmID0gZGljdC5nZXQoXCJDRlwiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGNmKSkge1xuICAgICAgICBjZi5zdXBwcmVzc0VuY3J5cHRpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNmID0gY2Y7XG4gICAgICB0aGlzLnN0bWYgPSBkaWN0LmdldChcIlN0bUZcIikgfHwgaWRlbnRpdHlOYW1lO1xuICAgICAgdGhpcy5zdHJmID0gZGljdC5nZXQoXCJTdHJGXCIpIHx8IGlkZW50aXR5TmFtZTtcbiAgICAgIHRoaXMuZWZmID0gZGljdC5nZXQoXCJFRkZcIikgfHwgdGhpcy5zdG1mO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkT2JqZWN0S2V5KG51bSwgZ2VuLCBlbmNyeXB0aW9uS2V5LCBpc0Flcykge1xuICAgIHZhciBrZXkgPSBuZXcgVWludDhBcnJheShlbmNyeXB0aW9uS2V5Lmxlbmd0aCArIDkpLFxuICAgICAgICBpLFxuICAgICAgICBuO1xuXG4gICAgZm9yIChpID0gMCwgbiA9IGVuY3J5cHRpb25LZXkubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBrZXlbaV0gPSBlbmNyeXB0aW9uS2V5W2ldO1xuICAgIH1cblxuICAgIGtleVtpKytdID0gbnVtICYgMHhmZjtcbiAgICBrZXlbaSsrXSA9IG51bSA+PiA4ICYgMHhmZjtcbiAgICBrZXlbaSsrXSA9IG51bSA+PiAxNiAmIDB4ZmY7XG4gICAga2V5W2krK10gPSBnZW4gJiAweGZmO1xuICAgIGtleVtpKytdID0gZ2VuID4+IDggJiAweGZmO1xuXG4gICAgaWYgKGlzQWVzKSB7XG4gICAgICBrZXlbaSsrXSA9IDB4NzM7XG4gICAgICBrZXlbaSsrXSA9IDB4NDE7XG4gICAgICBrZXlbaSsrXSA9IDB4NmM7XG4gICAgICBrZXlbaSsrXSA9IDB4NTQ7XG4gICAgfVxuXG4gICAgdmFyIGhhc2ggPSBjYWxjdWxhdGVNRDUoa2V5LCAwLCBpKTtcbiAgICByZXR1cm4gaGFzaC5zdWJhcnJheSgwLCBNYXRoLm1pbihlbmNyeXB0aW9uS2V5Lmxlbmd0aCArIDUsIDE2KSk7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZENpcGhlckNvbnN0cnVjdG9yKGNmLCBuYW1lLCBudW0sIGdlbiwga2V5KSB7XG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBjcnlwdCBmaWx0ZXIgbmFtZS5cIik7XG4gICAgfVxuXG4gICAgdmFyIGNyeXB0RmlsdGVyID0gY2YuZ2V0KG5hbWUubmFtZSk7XG4gICAgdmFyIGNmbTtcblxuICAgIGlmIChjcnlwdEZpbHRlciAhPT0gbnVsbCAmJiBjcnlwdEZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjZm0gPSBjcnlwdEZpbHRlci5nZXQoXCJDRk1cIik7XG4gICAgfVxuXG4gICAgaWYgKCFjZm0gfHwgY2ZtLm5hbWUgPT09IFwiTm9uZVwiKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JOb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IE51bGxDaXBoZXIoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGNmbS5uYW1lID09PSBcIlYyXCIpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1GYWN0b3J5QnVpbGRDaXBoZXJDb25zdHJ1Y3RvclYyKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFSQ0ZvdXJDaXBoZXIoYnVpbGRPYmplY3RLZXkobnVtLCBnZW4sIGtleSwgZmFsc2UpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGNmbS5uYW1lID09PSBcIkFFU1YyXCIpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1GYWN0b3J5QnVpbGRDaXBoZXJDb25zdHJ1Y3RvckFFU1YyKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFFUzEyOENpcGhlcihidWlsZE9iamVjdEtleShudW0sIGdlbiwga2V5LCB0cnVlKSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjZm0ubmFtZSA9PT0gXCJBRVNWM1wiKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JBRVNWMygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIoa2V5KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biBjcnlwdG8gbWV0aG9kXCIpO1xuICB9XG5cbiAgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeS5wcm90b3R5cGUgPSB7XG4gICAgY3JlYXRlQ2lwaGVyVHJhbnNmb3JtOiBmdW5jdGlvbiBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5X2NyZWF0ZUNpcGhlclRyYW5zZm9ybShudW0sIGdlbikge1xuICAgICAgaWYgKHRoaXMuYWxnb3JpdGhtID09PSA0IHx8IHRoaXMuYWxnb3JpdGhtID09PSA1KSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IodGhpcy5jZiwgdGhpcy5zdG1mLCBudW0sIGdlbiwgdGhpcy5lbmNyeXB0aW9uS2V5KSwgYnVpbGRDaXBoZXJDb25zdHJ1Y3Rvcih0aGlzLmNmLCB0aGlzLnN0cmYsIG51bSwgZ2VuLCB0aGlzLmVuY3J5cHRpb25LZXkpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGtleSA9IGJ1aWxkT2JqZWN0S2V5KG51bSwgZ2VuLCB0aGlzLmVuY3J5cHRpb25LZXksIGZhbHNlKTtcblxuICAgICAgdmFyIGNpcGhlckNvbnN0cnVjdG9yID0gZnVuY3Rpb24gYnVpbGRDaXBoZXJDaXBoZXJDb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGtleSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybShjaXBoZXJDb25zdHJ1Y3RvciwgY2lwaGVyQ29uc3RydWN0b3IpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIENpcGhlclRyYW5zZm9ybUZhY3Rvcnk7XG59KCk7XG5cbmV4cG9ydHMuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSA9IENpcGhlclRyYW5zZm9ybUZhY3Rvcnk7XG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29sb3JTcGFjZSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxuZnVuY3Rpb24gcmVzaXplUmdiSW1hZ2Uoc3JjLCBkZXN0LCB3MSwgaDEsIHcyLCBoMiwgYWxwaGEwMSkge1xuICBjb25zdCBDT01QT05FTlRTID0gMztcbiAgYWxwaGEwMSA9IGFscGhhMDEgIT09IDEgPyAwIDogYWxwaGEwMTtcbiAgY29uc3QgeFJhdGlvID0gdzEgLyB3MjtcbiAgY29uc3QgeVJhdGlvID0gaDEgLyBoMjtcbiAgbGV0IG5ld0luZGV4ID0gMCxcbiAgICAgIG9sZEluZGV4O1xuICBjb25zdCB4U2NhbGVkID0gbmV3IFVpbnQxNkFycmF5KHcyKTtcbiAgY29uc3QgdzFTY2FubGluZSA9IHcxICogQ09NUE9ORU5UUztcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHcyOyBpKyspIHtcbiAgICB4U2NhbGVkW2ldID0gTWF0aC5mbG9vcihpICogeFJhdGlvKSAqIENPTVBPTkVOVFM7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGgyOyBpKyspIHtcbiAgICBjb25zdCBweSA9IE1hdGguZmxvb3IoaSAqIHlSYXRpbykgKiB3MVNjYW5saW5lO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB3MjsgaisrKSB7XG4gICAgICBvbGRJbmRleCA9IHB5ICsgeFNjYWxlZFtqXTtcbiAgICAgIGRlc3RbbmV3SW5kZXgrK10gPSBzcmNbb2xkSW5kZXgrK107XG4gICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4KytdO1xuICAgICAgZGVzdFtuZXdJbmRleCsrXSA9IHNyY1tvbGRJbmRleCsrXTtcbiAgICAgIG5ld0luZGV4ICs9IGFscGhhMDE7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIENvbG9yU3BhY2Uge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBudW1Db21wcykge1xuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBDb2xvclNwYWNlKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQ29sb3JTcGFjZS5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLm51bUNvbXBzID0gbnVtQ29tcHM7XG4gIH1cblxuICBnZXRSZ2Ioc3JjLCBzcmNPZmZzZXQpIHtcbiAgICBjb25zdCByZ2IgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7XG4gICAgdGhpcy5nZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCByZ2IsIDApO1xuICAgIHJldHVybiByZ2I7XG4gIH1cblxuICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldFJnYkl0ZW1cIik7XG4gIH1cblxuICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldFJnYkJ1ZmZlclwiKTtcbiAgfVxuXG4gIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRPdXRwdXRMZW5ndGhcIik7XG4gIH1cblxuICBpc1Bhc3N0aHJvdWdoKGJpdHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc0RlZmF1bHREZWNvZGUoZGVjb2RlTWFwLCBicGMpIHtcbiAgICByZXR1cm4gQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUoZGVjb2RlTWFwLCB0aGlzLm51bUNvbXBzKTtcbiAgfVxuXG4gIGZpbGxSZ2IoZGVzdCwgb3JpZ2luYWxXaWR0aCwgb3JpZ2luYWxIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIGFjdHVhbEhlaWdodCwgYnBjLCBjb21wcywgYWxwaGEwMSkge1xuICAgIGNvbnN0IGNvdW50ID0gb3JpZ2luYWxXaWR0aCAqIG9yaWdpbmFsSGVpZ2h0O1xuICAgIGxldCByZ2JCdWYgPSBudWxsO1xuICAgIGNvbnN0IG51bUNvbXBvbmVudENvbG9ycyA9IDEgPDwgYnBjO1xuICAgIGNvbnN0IG5lZWRzUmVzaXppbmcgPSBvcmlnaW5hbEhlaWdodCAhPT0gaGVpZ2h0IHx8IG9yaWdpbmFsV2lkdGggIT09IHdpZHRoO1xuXG4gICAgaWYgKHRoaXMuaXNQYXNzdGhyb3VnaChicGMpKSB7XG4gICAgICByZ2JCdWYgPSBjb21wcztcbiAgICB9IGVsc2UgaWYgKHRoaXMubnVtQ29tcHMgPT09IDEgJiYgY291bnQgPiBudW1Db21wb25lbnRDb2xvcnMgJiYgdGhpcy5uYW1lICE9PSBcIkRldmljZUdyYXlcIiAmJiB0aGlzLm5hbWUgIT09IFwiRGV2aWNlUkdCXCIpIHtcbiAgICAgIGNvbnN0IGFsbENvbG9ycyA9IGJwYyA8PSA4ID8gbmV3IFVpbnQ4QXJyYXkobnVtQ29tcG9uZW50Q29sb3JzKSA6IG5ldyBVaW50MTZBcnJheShudW1Db21wb25lbnRDb2xvcnMpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNvbXBvbmVudENvbG9yczsgaSsrKSB7XG4gICAgICAgIGFsbENvbG9yc1tpXSA9IGk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbG9yTWFwID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KG51bUNvbXBvbmVudENvbG9ycyAqIDMpO1xuICAgICAgdGhpcy5nZXRSZ2JCdWZmZXIoYWxsQ29sb3JzLCAwLCBudW1Db21wb25lbnRDb2xvcnMsIGNvbG9yTWFwLCAwLCBicGMsIDApO1xuXG4gICAgICBpZiAoIW5lZWRzUmVzaXppbmcpIHtcbiAgICAgICAgbGV0IGRlc3RQb3MgPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGNvbXBzW2ldICogMztcbiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBjb2xvck1hcFtrZXldO1xuICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGNvbG9yTWFwW2tleSArIDFdO1xuICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGNvbG9yTWFwW2tleSArIDJdO1xuICAgICAgICAgIGRlc3RQb3MgKz0gYWxwaGEwMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmdiQnVmID0gbmV3IFVpbnQ4QXJyYXkoY291bnQgKiAzKTtcbiAgICAgICAgbGV0IHJnYlBvcyA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29tcHNbaV0gKiAzO1xuICAgICAgICAgIHJnYkJ1ZltyZ2JQb3MrK10gPSBjb2xvck1hcFtrZXldO1xuICAgICAgICAgIHJnYkJ1ZltyZ2JQb3MrK10gPSBjb2xvck1hcFtrZXkgKyAxXTtcbiAgICAgICAgICByZ2JCdWZbcmdiUG9zKytdID0gY29sb3JNYXBba2V5ICsgMl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFuZWVkc1Jlc2l6aW5nKSB7XG4gICAgICAgIHRoaXMuZ2V0UmdiQnVmZmVyKGNvbXBzLCAwLCB3aWR0aCAqIGFjdHVhbEhlaWdodCwgZGVzdCwgMCwgYnBjLCBhbHBoYTAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJnYkJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheShjb3VudCAqIDMpO1xuICAgICAgICB0aGlzLmdldFJnYkJ1ZmZlcihjb21wcywgMCwgY291bnQsIHJnYkJ1ZiwgMCwgYnBjLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmdiQnVmKSB7XG4gICAgICBpZiAobmVlZHNSZXNpemluZykge1xuICAgICAgICByZXNpemVSZ2JJbWFnZShyZ2JCdWYsIGRlc3QsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBhbHBoYTAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBkZXN0UG9zID0gMCxcbiAgICAgICAgICAgIHJnYlBvcyA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gd2lkdGggKiBhY3R1YWxIZWlnaHQ7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gcmdiQnVmW3JnYlBvcysrXTtcbiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSByZ2JCdWZbcmdiUG9zKytdO1xuICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHJnYkJ1ZltyZ2JQb3MrK107XG4gICAgICAgICAgZGVzdFBvcyArPSBhbHBoYTAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHVzZXNaZXJvVG9PbmVSYW5nZSgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ1c2VzWmVyb1RvT25lUmFuZ2VcIiwgdHJ1ZSk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2UoY3MsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KSB7XG4gICAgY29uc3QgSVIgPSB0aGlzLnBhcnNlVG9JUihjcywgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgIHJldHVybiB0aGlzLmZyb21JUihJUik7XG4gIH1cblxuICBzdGF0aWMgZnJvbUlSKElSKSB7XG4gICAgY29uc3QgbmFtZSA9IEFycmF5LmlzQXJyYXkoSVIpID8gSVJbMF0gOiBJUjtcbiAgICBsZXQgd2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWE7XG5cbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgXCJEZXZpY2VHcmF5Q1NcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O1xuXG4gICAgICBjYXNlIFwiRGV2aWNlUmdiQ1NcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7XG5cbiAgICAgIGNhc2UgXCJEZXZpY2VDbXlrQ1NcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO1xuXG4gICAgICBjYXNlIFwiQ2FsR3JheUNTXCI6XG4gICAgICAgIHdoaXRlUG9pbnQgPSBJUlsxXTtcbiAgICAgICAgYmxhY2tQb2ludCA9IElSWzJdO1xuICAgICAgICBnYW1tYSA9IElSWzNdO1xuICAgICAgICByZXR1cm4gbmV3IENhbEdyYXlDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSk7XG5cbiAgICAgIGNhc2UgXCJDYWxSR0JDU1wiOlxuICAgICAgICB3aGl0ZVBvaW50ID0gSVJbMV07XG4gICAgICAgIGJsYWNrUG9pbnQgPSBJUlsyXTtcbiAgICAgICAgZ2FtbWEgPSBJUlszXTtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gSVJbNF07XG4gICAgICAgIHJldHVybiBuZXcgQ2FsUkdCQ1Mod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWEsIG1hdHJpeCk7XG5cbiAgICAgIGNhc2UgXCJQYXR0ZXJuQ1NcIjpcbiAgICAgICAgbGV0IGJhc2VQYXR0ZXJuQ1MgPSBJUlsxXTtcblxuICAgICAgICBpZiAoYmFzZVBhdHRlcm5DUykge1xuICAgICAgICAgIGJhc2VQYXR0ZXJuQ1MgPSB0aGlzLmZyb21JUihiYXNlUGF0dGVybkNTKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUGF0dGVybkNTKGJhc2VQYXR0ZXJuQ1MpO1xuXG4gICAgICBjYXNlIFwiSW5kZXhlZENTXCI6XG4gICAgICAgIGNvbnN0IGJhc2VJbmRleGVkQ1MgPSBJUlsxXTtcbiAgICAgICAgY29uc3QgaGlWYWwgPSBJUlsyXTtcbiAgICAgICAgY29uc3QgbG9va3VwID0gSVJbM107XG4gICAgICAgIHJldHVybiBuZXcgSW5kZXhlZENTKHRoaXMuZnJvbUlSKGJhc2VJbmRleGVkQ1MpLCBoaVZhbCwgbG9va3VwKTtcblxuICAgICAgY2FzZSBcIkFsdGVybmF0ZUNTXCI6XG4gICAgICAgIGNvbnN0IG51bUNvbXBzID0gSVJbMV07XG4gICAgICAgIGNvbnN0IGFsdCA9IElSWzJdO1xuICAgICAgICBjb25zdCB0aW50Rm4gPSBJUlszXTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlcm5hdGVDUyhudW1Db21wcywgdGhpcy5mcm9tSVIoYWx0KSwgdGludEZuKTtcblxuICAgICAgY2FzZSBcIkxhYkNTXCI6XG4gICAgICAgIHdoaXRlUG9pbnQgPSBJUlsxXTtcbiAgICAgICAgYmxhY2tQb2ludCA9IElSWzJdO1xuICAgICAgICBjb25zdCByYW5nZSA9IElSWzNdO1xuICAgICAgICByZXR1cm4gbmV3IExhYkNTKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIHJhbmdlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmtub3duIGNvbG9yc3BhY2UgbmFtZTogJHtuYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVRvSVIoY3MsIHhyZWYsIHJlcyA9IG51bGwsIHBkZkZ1bmN0aW9uRmFjdG9yeSkge1xuICAgIGNzID0geHJlZi5mZXRjaElmUmVmKGNzKTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShjcykpIHtcbiAgICAgIHN3aXRjaCAoY3MubmFtZSkge1xuICAgICAgICBjYXNlIFwiRGV2aWNlR3JheVwiOlxuICAgICAgICBjYXNlIFwiR1wiOlxuICAgICAgICAgIHJldHVybiBcIkRldmljZUdyYXlDU1wiO1xuXG4gICAgICAgIGNhc2UgXCJEZXZpY2VSR0JcIjpcbiAgICAgICAgY2FzZSBcIlJHQlwiOlxuICAgICAgICAgIHJldHVybiBcIkRldmljZVJnYkNTXCI7XG5cbiAgICAgICAgY2FzZSBcIkRldmljZUNNWUtcIjpcbiAgICAgICAgY2FzZSBcIkNNWUtcIjpcbiAgICAgICAgICByZXR1cm4gXCJEZXZpY2VDbXlrQ1NcIjtcblxuICAgICAgICBjYXNlIFwiUGF0dGVyblwiOlxuICAgICAgICAgIHJldHVybiBbXCJQYXR0ZXJuQ1NcIiwgbnVsbF07XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocmVzKSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JTcGFjZXMgPSByZXMuZ2V0KFwiQ29sb3JTcGFjZVwiKTtcblxuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGNvbG9yU3BhY2VzKSkge1xuICAgICAgICAgICAgICBjb25zdCByZXNDUyA9IGNvbG9yU3BhY2VzLmdldChjcy5uYW1lKTtcblxuICAgICAgICAgICAgICBpZiAocmVzQ1MpIHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocmVzQ1MpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRvSVIocmVzQ1MsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjcyA9IHJlc0NTO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGB1bnJlY29nbml6ZWQgY29sb3JzcGFjZSAke2NzLm5hbWV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY3MpKSB7XG4gICAgICBjb25zdCBtb2RlID0geHJlZi5mZXRjaElmUmVmKGNzWzBdKS5uYW1lO1xuICAgICAgbGV0IG51bUNvbXBzLCBwYXJhbXMsIGFsdCwgd2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWE7XG5cbiAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIFwiRGV2aWNlR3JheVwiOlxuICAgICAgICBjYXNlIFwiR1wiOlxuICAgICAgICAgIHJldHVybiBcIkRldmljZUdyYXlDU1wiO1xuXG4gICAgICAgIGNhc2UgXCJEZXZpY2VSR0JcIjpcbiAgICAgICAgY2FzZSBcIlJHQlwiOlxuICAgICAgICAgIHJldHVybiBcIkRldmljZVJnYkNTXCI7XG5cbiAgICAgICAgY2FzZSBcIkRldmljZUNNWUtcIjpcbiAgICAgICAgY2FzZSBcIkNNWUtcIjpcbiAgICAgICAgICByZXR1cm4gXCJEZXZpY2VDbXlrQ1NcIjtcblxuICAgICAgICBjYXNlIFwiQ2FsR3JheVwiOlxuICAgICAgICAgIHBhcmFtcyA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheShcIldoaXRlUG9pbnRcIik7XG4gICAgICAgICAgYmxhY2tQb2ludCA9IHBhcmFtcy5nZXRBcnJheShcIkJsYWNrUG9pbnRcIik7XG4gICAgICAgICAgZ2FtbWEgPSBwYXJhbXMuZ2V0KFwiR2FtbWFcIik7XG4gICAgICAgICAgcmV0dXJuIFtcIkNhbEdyYXlDU1wiLCB3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYV07XG5cbiAgICAgICAgY2FzZSBcIkNhbFJHQlwiOlxuICAgICAgICAgIHBhcmFtcyA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheShcIldoaXRlUG9pbnRcIik7XG4gICAgICAgICAgYmxhY2tQb2ludCA9IHBhcmFtcy5nZXRBcnJheShcIkJsYWNrUG9pbnRcIik7XG4gICAgICAgICAgZ2FtbWEgPSBwYXJhbXMuZ2V0QXJyYXkoXCJHYW1tYVwiKTtcbiAgICAgICAgICBjb25zdCBtYXRyaXggPSBwYXJhbXMuZ2V0QXJyYXkoXCJNYXRyaXhcIik7XG4gICAgICAgICAgcmV0dXJuIFtcIkNhbFJHQkNTXCIsIHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hLCBtYXRyaXhdO1xuXG4gICAgICAgIGNhc2UgXCJJQ0NCYXNlZFwiOlxuICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgY29uc3QgZGljdCA9IHN0cmVhbS5kaWN0O1xuICAgICAgICAgIG51bUNvbXBzID0gZGljdC5nZXQoXCJOXCIpO1xuICAgICAgICAgIGFsdCA9IGRpY3QuZ2V0KFwiQWx0ZXJuYXRlXCIpO1xuXG4gICAgICAgICAgaWYgKGFsdCkge1xuICAgICAgICAgICAgY29uc3QgYWx0SVIgPSB0aGlzLnBhcnNlVG9JUihhbHQsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgIGNvbnN0IGFsdENTID0gdGhpcy5mcm9tSVIoYWx0SVIsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICAgICAgICAgIGlmIChhbHRDUy5udW1Db21wcyA9PT0gbnVtQ29tcHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFsdElSO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJJQ0NCYXNlZCBjb2xvciBzcGFjZTogSWdub3JpbmcgaW5jb3JyZWN0IC9BbHRlcm5hdGUgZW50cnkuXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChudW1Db21wcyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRGV2aWNlR3JheUNTXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChudW1Db21wcyA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuIFwiRGV2aWNlUmdiQ1NcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKG51bUNvbXBzID09PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJEZXZpY2VDbXlrQ1NcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiUGF0dGVyblwiOlxuICAgICAgICAgIGxldCBiYXNlUGF0dGVybkNTID0gY3NbMV0gfHwgbnVsbDtcblxuICAgICAgICAgIGlmIChiYXNlUGF0dGVybkNTKSB7XG4gICAgICAgICAgICBiYXNlUGF0dGVybkNTID0gdGhpcy5wYXJzZVRvSVIoYmFzZVBhdHRlcm5DUywgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBbXCJQYXR0ZXJuQ1NcIiwgYmFzZVBhdHRlcm5DU107XG5cbiAgICAgICAgY2FzZSBcIkluZGV4ZWRcIjpcbiAgICAgICAgY2FzZSBcIklcIjpcbiAgICAgICAgICBjb25zdCBiYXNlSW5kZXhlZENTID0gdGhpcy5wYXJzZVRvSVIoY3NbMV0sIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICBjb25zdCBoaVZhbCA9IHhyZWYuZmV0Y2hJZlJlZihjc1syXSkgKyAxO1xuICAgICAgICAgIGxldCBsb29rdXAgPSB4cmVmLmZldGNoSWZSZWYoY3NbM10pO1xuXG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkobG9va3VwKSkge1xuICAgICAgICAgICAgbG9va3VwID0gbG9va3VwLmdldEJ5dGVzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFtcIkluZGV4ZWRDU1wiLCBiYXNlSW5kZXhlZENTLCBoaVZhbCwgbG9va3VwXTtcblxuICAgICAgICBjYXNlIFwiU2VwYXJhdGlvblwiOlxuICAgICAgICBjYXNlIFwiRGV2aWNlTlwiOlxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB4cmVmLmZldGNoSWZSZWYoY3NbMV0pO1xuICAgICAgICAgIG51bUNvbXBzID0gQXJyYXkuaXNBcnJheShuYW1lKSA/IG5hbWUubGVuZ3RoIDogMTtcbiAgICAgICAgICBhbHQgPSB0aGlzLnBhcnNlVG9JUihjc1syXSwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgIGNvbnN0IHRpbnRGbiA9IHBkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUoeHJlZi5mZXRjaElmUmVmKGNzWzNdKSk7XG4gICAgICAgICAgcmV0dXJuIFtcIkFsdGVybmF0ZUNTXCIsIG51bUNvbXBzLCBhbHQsIHRpbnRGbl07XG5cbiAgICAgICAgY2FzZSBcIkxhYlwiOlxuICAgICAgICAgIHBhcmFtcyA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheShcIldoaXRlUG9pbnRcIik7XG4gICAgICAgICAgYmxhY2tQb2ludCA9IHBhcmFtcy5nZXRBcnJheShcIkJsYWNrUG9pbnRcIik7XG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBwYXJhbXMuZ2V0QXJyYXkoXCJSYW5nZVwiKTtcbiAgICAgICAgICByZXR1cm4gW1wiTGFiQ1NcIiwgd2hpdGVQb2ludCwgYmxhY2tQb2ludCwgcmFuZ2VdO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGB1bmltcGxlbWVudGVkIGNvbG9yIHNwYWNlIG9iamVjdCBcIiR7bW9kZX1cImApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgdW5yZWNvZ25pemVkIGNvbG9yIHNwYWNlIG9iamVjdDogXCIke2NzfVwiYCk7XG4gIH1cblxuICBzdGF0aWMgaXNEZWZhdWx0RGVjb2RlKGRlY29kZSwgbnVtQ29tcHMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGVjb2RlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG51bUNvbXBzICogMiAhPT0gZGVjb2RlLmxlbmd0aCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVGhlIGRlY29kZSBtYXAgaXMgbm90IHRoZSBjb3JyZWN0IGxlbmd0aFwiKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRlY29kZS5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICBpZiAoZGVjb2RlW2ldICE9PSAwIHx8IGRlY29kZVtpICsgMV0gIT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaW5nbGV0b25zKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInNpbmdsZXRvbnNcIiwge1xuICAgICAgZ2V0IGdyYXkoKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImdyYXlcIiwgbmV3IERldmljZUdyYXlDUygpKTtcbiAgICAgIH0sXG5cbiAgICAgIGdldCByZ2IoKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInJnYlwiLCBuZXcgRGV2aWNlUmdiQ1MoKSk7XG4gICAgICB9LFxuXG4gICAgICBnZXQgY215aygpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiY215a1wiLCBuZXcgRGV2aWNlQ215a0NTKCkpO1xuICAgICAgfVxuXG4gICAgfSk7XG4gIH1cblxufVxuXG5leHBvcnRzLkNvbG9yU3BhY2UgPSBDb2xvclNwYWNlO1xuXG5jbGFzcyBBbHRlcm5hdGVDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICBjb25zdHJ1Y3RvcihudW1Db21wcywgYmFzZSwgdGludEZuKSB7XG4gICAgc3VwZXIoXCJBbHRlcm5hdGVcIiwgbnVtQ29tcHMpO1xuICAgIHRoaXMuYmFzZSA9IGJhc2U7XG4gICAgdGhpcy50aW50Rm4gPSB0aW50Rm47XG4gICAgdGhpcy50bXBCdWYgPSBuZXcgRmxvYXQzMkFycmF5KGJhc2UubnVtQ29tcHMpO1xuICB9XG5cbiAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgIGNvbnN0IHRtcEJ1ZiA9IHRoaXMudG1wQnVmO1xuICAgIHRoaXMudGludEZuKHNyYywgc3JjT2Zmc2V0LCB0bXBCdWYsIDApO1xuICAgIHRoaXMuYmFzZS5nZXRSZ2JJdGVtKHRtcEJ1ZiwgMCwgZGVzdCwgZGVzdE9mZnNldCk7XG4gIH1cblxuICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgY29uc3QgdGludEZuID0gdGhpcy50aW50Rm47XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuYmFzZTtcbiAgICBjb25zdCBzY2FsZSA9IDEgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICBjb25zdCBiYXNlTnVtQ29tcHMgPSBiYXNlLm51bUNvbXBzO1xuICAgIGNvbnN0IHVzZXNaZXJvVG9PbmVSYW5nZSA9IGJhc2UudXNlc1plcm9Ub09uZVJhbmdlO1xuICAgIGNvbnN0IGlzUGFzc3Rocm91Z2ggPSAoYmFzZS5pc1Bhc3N0aHJvdWdoKDgpIHx8ICF1c2VzWmVyb1RvT25lUmFuZ2UpICYmIGFscGhhMDEgPT09IDA7XG4gICAgbGV0IHBvcyA9IGlzUGFzc3Rocm91Z2ggPyBkZXN0T2Zmc2V0IDogMDtcbiAgICBjb25zdCBiYXNlQnVmID0gaXNQYXNzdGhyb3VnaCA/IGRlc3QgOiBuZXcgVWludDhDbGFtcGVkQXJyYXkoYmFzZU51bUNvbXBzICogY291bnQpO1xuICAgIGNvbnN0IG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcbiAgICBjb25zdCBzY2FsZWQgPSBuZXcgRmxvYXQzMkFycmF5KG51bUNvbXBzKTtcbiAgICBjb25zdCB0aW50ZWQgPSBuZXcgRmxvYXQzMkFycmF5KGJhc2VOdW1Db21wcyk7XG4gICAgbGV0IGksIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IG51bUNvbXBzOyBqKyspIHtcbiAgICAgICAgc2NhbGVkW2pdID0gc3JjW3NyY09mZnNldCsrXSAqIHNjYWxlO1xuICAgICAgfVxuXG4gICAgICB0aW50Rm4oc2NhbGVkLCAwLCB0aW50ZWQsIDApO1xuXG4gICAgICBpZiAodXNlc1plcm9Ub09uZVJhbmdlKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBiYXNlTnVtQ29tcHM7IGorKykge1xuICAgICAgICAgIGJhc2VCdWZbcG9zKytdID0gdGludGVkW2pdICogMjU1O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlLmdldFJnYkl0ZW0odGludGVkLCAwLCBiYXNlQnVmLCBwb3MpO1xuICAgICAgICBwb3MgKz0gYmFzZU51bUNvbXBzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNQYXNzdGhyb3VnaCkge1xuICAgICAgYmFzZS5nZXRSZ2JCdWZmZXIoYmFzZUJ1ZiwgMCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIDgsIGFscGhhMDEpO1xuICAgIH1cbiAgfVxuXG4gIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgIHJldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoICogdGhpcy5iYXNlLm51bUNvbXBzIC8gdGhpcy5udW1Db21wcywgYWxwaGEwMSk7XG4gIH1cblxufVxuXG5jbGFzcyBQYXR0ZXJuQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgY29uc3RydWN0b3IoYmFzZUNTKSB7XG4gICAgc3VwZXIoXCJQYXR0ZXJuXCIsIG51bGwpO1xuICAgIHRoaXMuYmFzZSA9IGJhc2VDUztcbiAgfVxuXG4gIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJTaG91bGQgbm90IGNhbGwgUGF0dGVybkNTLmlzRGVmYXVsdERlY29kZVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEluZGV4ZWRDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICBjb25zdHJ1Y3RvcihiYXNlLCBoaWdoVmFsLCBsb29rdXApIHtcbiAgICBzdXBlcihcIkluZGV4ZWRcIiwgMSk7XG4gICAgdGhpcy5iYXNlID0gYmFzZTtcbiAgICB0aGlzLmhpZ2hWYWwgPSBoaWdoVmFsO1xuICAgIGNvbnN0IGJhc2VOdW1Db21wcyA9IGJhc2UubnVtQ29tcHM7XG4gICAgY29uc3QgbGVuZ3RoID0gYmFzZU51bUNvbXBzICogaGlnaFZhbDtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGxvb2t1cCkpIHtcbiAgICAgIHRoaXMubG9va3VwID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICAgIGNvbnN0IGJ5dGVzID0gbG9va3VwLmdldEJ5dGVzKGxlbmd0aCk7XG4gICAgICB0aGlzLmxvb2t1cC5zZXQoYnl0ZXMpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKShsb29rdXApKSB7XG4gICAgICB0aGlzLmxvb2t1cCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5sb29rdXBbaV0gPSBsb29rdXAuY2hhckNvZGVBdChpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxvb2t1cCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIHRoaXMubG9va3VwID0gbG9va3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICR7bG9va3VwfWApO1xuICAgIH1cbiAgfVxuXG4gIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMuYmFzZS5udW1Db21wcztcbiAgICBjb25zdCBzdGFydCA9IHNyY1tzcmNPZmZzZXRdICogbnVtQ29tcHM7XG4gICAgdGhpcy5iYXNlLmdldFJnYkJ1ZmZlcih0aGlzLmxvb2t1cCwgc3RhcnQsIDEsIGRlc3QsIGRlc3RPZmZzZXQsIDgsIDApO1xuICB9XG5cbiAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmJhc2U7XG4gICAgY29uc3QgbnVtQ29tcHMgPSBiYXNlLm51bUNvbXBzO1xuICAgIGNvbnN0IG91dHB1dERlbHRhID0gYmFzZS5nZXRPdXRwdXRMZW5ndGgobnVtQ29tcHMsIGFscGhhMDEpO1xuICAgIGNvbnN0IGxvb2t1cCA9IHRoaXMubG9va3VwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICBjb25zdCBsb29rdXBQb3MgPSBzcmNbc3JjT2Zmc2V0KytdICogbnVtQ29tcHM7XG4gICAgICBiYXNlLmdldFJnYkJ1ZmZlcihsb29rdXAsIGxvb2t1cFBvcywgMSwgZGVzdCwgZGVzdE9mZnNldCwgOCwgYWxwaGEwMSk7XG4gICAgICBkZXN0T2Zmc2V0ICs9IG91dHB1dERlbHRhO1xuICAgIH1cbiAgfVxuXG4gIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgIHJldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoICogdGhpcy5iYXNlLm51bUNvbXBzLCBhbHBoYTAxKTtcbiAgfVxuXG4gIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkZWNvZGVNYXApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb2RlTWFwLmxlbmd0aCAhPT0gMikge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiRGVjb2RlIG1hcCBsZW5ndGggaXMgbm90IGNvcnJlY3RcIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYnBjKSB8fCBicGMgPCAxKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJCaXRzIHBlciBjb21wb25lbnQgaXMgbm90IGNvcnJlY3RcIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVjb2RlTWFwWzBdID09PSAwICYmIGRlY29kZU1hcFsxXSA9PT0gKDEgPDwgYnBjKSAtIDE7XG4gIH1cblxufVxuXG5jbGFzcyBEZXZpY2VHcmF5Q1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJEZXZpY2VHcmF5XCIsIDEpO1xuICB9XG5cbiAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgIGNvbnN0IGMgPSBzcmNbc3JjT2Zmc2V0XSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IGM7XG4gIH1cblxuICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgY29uc3Qgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICBsZXQgaiA9IHNyY09mZnNldCxcbiAgICAgICAgcSA9IGRlc3RPZmZzZXQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGNvbnN0IGMgPSBzY2FsZSAqIHNyY1tqKytdO1xuICAgICAgZGVzdFtxKytdID0gYztcbiAgICAgIGRlc3RbcSsrXSA9IGM7XG4gICAgICBkZXN0W3ErK10gPSBjO1xuICAgICAgcSArPSBhbHBoYTAxO1xuICAgIH1cbiAgfVxuXG4gIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgIHJldHVybiBpbnB1dExlbmd0aCAqICgzICsgYWxwaGEwMSk7XG4gIH1cblxufVxuXG5jbGFzcyBEZXZpY2VSZ2JDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkRldmljZVJHQlwiLCAzKTtcbiAgfVxuXG4gIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gc3JjW3NyY09mZnNldF0gKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBzcmNbc3JjT2Zmc2V0ICsgMV0gKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMl0gPSBzcmNbc3JjT2Zmc2V0ICsgMl0gKiAyNTU7XG4gIH1cblxuICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgaWYgKGJpdHMgPT09IDggJiYgYWxwaGEwMSA9PT0gMCkge1xuICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY09mZnNldCwgc3JjT2Zmc2V0ICsgY291bnQgKiAzKSwgZGVzdE9mZnNldCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICBsZXQgaiA9IHNyY09mZnNldCxcbiAgICAgICAgcSA9IGRlc3RPZmZzZXQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGRlc3RbcSsrXSA9IHNjYWxlICogc3JjW2orK107XG4gICAgICBkZXN0W3ErK10gPSBzY2FsZSAqIHNyY1tqKytdO1xuICAgICAgZGVzdFtxKytdID0gc2NhbGUgKiBzcmNbaisrXTtcbiAgICAgIHEgKz0gYWxwaGEwMTtcbiAgICB9XG4gIH1cblxuICBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gIH1cblxuICBpc1Bhc3N0aHJvdWdoKGJpdHMpIHtcbiAgICByZXR1cm4gYml0cyA9PT0gODtcbiAgfVxuXG59XG5cbmNvbnN0IERldmljZUNteWtDUyA9IGZ1bmN0aW9uIERldmljZUNteWtDU0Nsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGNvbnZlcnRUb1JnYihzcmMsIHNyY09mZnNldCwgc3JjU2NhbGUsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICBjb25zdCBjID0gc3JjW3NyY09mZnNldF0gKiBzcmNTY2FsZTtcbiAgICBjb25zdCBtID0gc3JjW3NyY09mZnNldCArIDFdICogc3JjU2NhbGU7XG4gICAgY29uc3QgeSA9IHNyY1tzcmNPZmZzZXQgKyAyXSAqIHNyY1NjYWxlO1xuICAgIGNvbnN0IGsgPSBzcmNbc3JjT2Zmc2V0ICsgM10gKiBzcmNTY2FsZTtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gMjU1ICsgYyAqICgtNC4zODczMzIzODQ2MDk5ODggKiBjICsgNTQuNDg2MTUxOTQxODkxNzYgKiBtICsgMTguODIyOTA1MDIxNjUzMDIgKiB5ICsgMjEyLjI1NjYyNDUxNjM5NTg1ICogayArIC0yODUuMjMzMTAyNjEzNzAwNCkgKyBtICogKDEuNzE0OTc2MzQ3NzM2MjEzNCAqIG0gLSA1LjYwOTY3MzY5MDQwNDczMTUgKiB5ICsgLTE3Ljg3Mzg3MDg2MTQxNTQ0NCAqIGsgLSA1LjQ5NzAwNjQyNzE5NjM2NikgKyB5ICogKC0yLjUyMTczNDAxMzE2ODMwMzMgKiB5IC0gMjEuMjQ4OTIzMzM3MzUzMDczICogayArIDE3LjUxMTkyNzA4NDE4MTMpICsgayAqICgtMjEuODYxMjIxNDc0NjM2MDUgKiBrIC0gMTg5LjQ4MTgwODM1OTIyNzQ3KTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IDI1NSArIGMgKiAoOC44NDEwNDE0MjIwMzYxNDkgKiBjICsgNjAuMTE4MDI3MDQ1NTk3MzY2ICogbSArIDYuODcxNDI1NTkyMDQ5MDA3ICogeSArIDMxLjE1OTEwMDEzMDA1NTkyMiAqIGsgKyAtNzkuMjk3MDg0NDgxNjU0OCkgKyBtICogKC0xNS4zMTAzNjEzMDY5Njc4MTcgKiBtICsgMTcuNTc1MjUxMjYxMTA5NDgyICogeSArIDEzMS4zNTI1MDkxMjQ5Mzk3NiAqIGsgLSAxOTAuOTQ1MzMwMjU4ODk1MSkgKyB5ICogKDQuNDQ0MzM5MTAyODUyNzM5ICogeSArIDkuODYzMjg2MTQ5MzQwNSAqIGsgLSAyNC44Njc0MTU4MjU1NTg3OCkgKyBrICogKC0yMC43MzczMjU0NzExODEwMzQgKiBrIC0gMTg3LjgwNDUzNzA5NzE5NTc4KTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IDI1NSArIGMgKiAoMC44ODQyNTIyNDMwMDAzMjk2ICogYyArIDguMDc4Njc3NTAzMTEyOTI4ICogbSArIDMwLjg5OTc4MzA5NzAzNzI5ICogeSAtIDAuMjM4ODMyMzg2ODkxNzg5MzQgKiBrICsgLTE0LjE4MzU3Njc5OTY3MzI4NikgKyBtICogKDEwLjQ5NTkzMjczNDMyMDcyICogbSArIDYzLjAyMzc4NDk0NzU0MDUyICogeSArIDUwLjYwNjk1NzY1NjM2MDczNCAqIGsgLSAxMTIuMjM4ODQyNTM3MTkyNDgpICsgeSAqICgwLjAzMjk2MDQxMTE0ODczMjE3ICogeSArIDExNS42MDM4NDQ0OTY0NjY0MSAqIGsgKyAtMTkzLjU4MjA5MzU2ODYxNTA1KSArIGsgKiAoLTIyLjMzODE2ODA3MzA5ODg2ICogayAtIDE4MC4xMjYxMzk3NDcwODM2Nyk7XG4gIH1cblxuICBjbGFzcyBEZXZpY2VDbXlrQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKFwiRGV2aWNlQ01ZS1wiLCA0KTtcbiAgICB9XG5cbiAgICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb252ZXJ0VG9SZ2Ioc3JjLCBzcmNPZmZzZXQsIDEsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgIH1cblxuICAgIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gMSAvICgoMSA8PCBiaXRzKSAtIDEpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29udmVydFRvUmdiKHNyYywgc3JjT2Zmc2V0LCBzY2FsZSwgZGVzdCwgZGVzdE9mZnNldCk7XG4gICAgICAgIHNyY09mZnNldCArPSA0O1xuICAgICAgICBkZXN0T2Zmc2V0ICs9IDMgKyBhbHBoYTAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoIC8gNCAqICgzICsgYWxwaGEwMSkgfCAwO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIERldmljZUNteWtDUztcbn0oKTtcblxuY29uc3QgQ2FsR3JheUNTID0gZnVuY3Rpb24gQ2FsR3JheUNTQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gY29udmVydFRvUmdiKGNzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpIHtcbiAgICBjb25zdCBBID0gc3JjW3NyY09mZnNldF0gKiBzY2FsZTtcbiAgICBjb25zdCBBRyA9IEEgKiogY3MuRztcbiAgICBjb25zdCBMID0gY3MuWVcgKiBBRztcbiAgICBjb25zdCB2YWwgPSBNYXRoLm1heCgyOTUuOCAqIEwgKiogMC4zMzMzMzMzMzMzMzMzMzMzMzMgLSA0MC44LCAwKTtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gdmFsO1xuICAgIGRlc3RbZGVzdE9mZnNldCArIDFdID0gdmFsO1xuICAgIGRlc3RbZGVzdE9mZnNldCArIDJdID0gdmFsO1xuICB9XG5cbiAgY2xhc3MgQ2FsR3JheUNTIGV4dGVuZHMgQ29sb3JTcGFjZSB7XG4gICAgY29uc3RydWN0b3Iod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWEpIHtcbiAgICAgIHN1cGVyKFwiQ2FsR3JheVwiLCAxKTtcblxuICAgICAgaWYgKCF3aGl0ZVBvaW50KSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxHcmF5XCIpO1xuICAgICAgfVxuXG4gICAgICBibGFja1BvaW50ID0gYmxhY2tQb2ludCB8fCBbMCwgMCwgMF07XG4gICAgICBnYW1tYSA9IGdhbW1hIHx8IDE7XG4gICAgICB0aGlzLlhXID0gd2hpdGVQb2ludFswXTtcbiAgICAgIHRoaXMuWVcgPSB3aGl0ZVBvaW50WzFdO1xuICAgICAgdGhpcy5aVyA9IHdoaXRlUG9pbnRbMl07XG4gICAgICB0aGlzLlhCID0gYmxhY2tQb2ludFswXTtcbiAgICAgIHRoaXMuWUIgPSBibGFja1BvaW50WzFdO1xuICAgICAgdGhpcy5aQiA9IGJsYWNrUG9pbnRbMl07XG4gICAgICB0aGlzLkcgPSBnYW1tYTtcblxuICAgICAgaWYgKHRoaXMuWFcgPCAwIHx8IHRoaXMuWlcgPCAwIHx8IHRoaXMuWVcgIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgJHt0aGlzLm5hbWV9YCArIFwiLCBubyBmYWxsYmFjayBhdmFpbGFibGVcIik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlhCIDwgMCB8fCB0aGlzLllCIDwgMCB8fCB0aGlzLlpCIDwgMCkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTtcbiAgICAgICAgdGhpcy5YQiA9IHRoaXMuWUIgPSB0aGlzLlpCID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuWEIgIT09IDAgfHwgdGhpcy5ZQiAhPT0gMCB8fCB0aGlzLlpCICE9PSAwKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgJHt0aGlzLm5hbWV9LCBCbGFja1BvaW50OiBYQjogJHt0aGlzLlhCfSwgWUI6ICR7dGhpcy5ZQn0sIGAgKyBgWkI6ICR7dGhpcy5aQn0sIG9ubHkgZGVmYXVsdCB2YWx1ZXMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuRyA8IDEpIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKGBJbnZhbGlkIEdhbW1hOiAke3RoaXMuR30gZm9yICR7dGhpcy5uYW1lfSwgYCArIFwiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuXCIpO1xuICAgICAgICB0aGlzLkcgPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgMSk7XG4gICAgfVxuXG4gICAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgICAgY29uc3Qgc2NhbGUgPSAxIC8gKCgxIDw8IGJpdHMpIC0gMSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIHNjYWxlKTtcbiAgICAgICAgc3JjT2Zmc2V0ICs9IDE7XG4gICAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIENhbEdyYXlDUztcbn0oKTtcblxuY29uc3QgQ2FsUkdCQ1MgPSBmdW5jdGlvbiBDYWxSR0JDU0Nsb3N1cmUoKSB7XG4gIGNvbnN0IEJSQURGT1JEX1NDQUxFX01BVFJJWCA9IG5ldyBGbG9hdDMyQXJyYXkoWzAuODk1MSwgMC4yNjY0LCAtMC4xNjE0LCAtMC43NTAyLCAxLjcxMzUsIDAuMDM2NywgMC4wMzg5LCAtMC4wNjg1LCAxLjAyOTZdKTtcbiAgY29uc3QgQlJBREZPUkRfU0NBTEVfSU5WRVJTRV9NQVRSSVggPSBuZXcgRmxvYXQzMkFycmF5KFswLjk4Njk5MjksIC0wLjE0NzA1NDMsIDAuMTU5OTYyNywgMC40MzIzMDUzLCAwLjUxODM2MDMsIDAuMDQ5MjkxMiwgLTAuMDA4NTI4NywgMC4wNDAwNDI4LCAwLjk2ODQ4NjddKTtcbiAgY29uc3QgU1JHQl9ENjVfWFlaX1RPX1JHQl9NQVRSSVggPSBuZXcgRmxvYXQzMkFycmF5KFszLjI0MDQ1NDIsIC0xLjUzNzEzODUsIC0wLjQ5ODUzMTQsIC0wLjk2OTI2NjAsIDEuODc2MDEwOCwgMC4wNDE1NTYwLCAwLjA1NTY0MzQsIC0wLjIwNDAyNTksIDEuMDU3MjI1Ml0pO1xuICBjb25zdCBGTEFUX1dISVRFUE9JTlRfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMSwgMSwgMV0pO1xuICBjb25zdCB0ZW1wTm9ybWFsaXplTWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheSgzKTtcbiAgY29uc3QgdGVtcENvbnZlcnRNYXRyaXgxID0gbmV3IEZsb2F0MzJBcnJheSgzKTtcbiAgY29uc3QgdGVtcENvbnZlcnRNYXRyaXgyID0gbmV3IEZsb2F0MzJBcnJheSgzKTtcbiAgY29uc3QgREVDT0RFX0xfQ09OU1RBTlQgPSAoKDggKyAxNikgLyAxMTYpICoqIDMgLyA4LjA7XG5cbiAgZnVuY3Rpb24gbWF0cml4UHJvZHVjdChhLCBiLCByZXN1bHQpIHtcbiAgICByZXN1bHRbMF0gPSBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XG4gICAgcmVzdWx0WzFdID0gYVszXSAqIGJbMF0gKyBhWzRdICogYlsxXSArIGFbNV0gKiBiWzJdO1xuICAgIHJlc3VsdFsyXSA9IGFbNl0gKiBiWzBdICsgYVs3XSAqIGJbMV0gKyBhWzhdICogYlsyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRUb0ZsYXQoc291cmNlV2hpdGVQb2ludCwgTE1TLCByZXN1bHQpIHtcbiAgICByZXN1bHRbMF0gPSBMTVNbMF0gKiAxIC8gc291cmNlV2hpdGVQb2ludFswXTtcbiAgICByZXN1bHRbMV0gPSBMTVNbMV0gKiAxIC8gc291cmNlV2hpdGVQb2ludFsxXTtcbiAgICByZXN1bHRbMl0gPSBMTVNbMl0gKiAxIC8gc291cmNlV2hpdGVQb2ludFsyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRUb0Q2NShzb3VyY2VXaGl0ZVBvaW50LCBMTVMsIHJlc3VsdCkge1xuICAgIGNvbnN0IEQ2NVggPSAwLjk1MDQ3O1xuICAgIGNvbnN0IEQ2NVkgPSAxO1xuICAgIGNvbnN0IEQ2NVogPSAxLjA4ODgzO1xuICAgIHJlc3VsdFswXSA9IExNU1swXSAqIEQ2NVggLyBzb3VyY2VXaGl0ZVBvaW50WzBdO1xuICAgIHJlc3VsdFsxXSA9IExNU1sxXSAqIEQ2NVkgLyBzb3VyY2VXaGl0ZVBvaW50WzFdO1xuICAgIHJlc3VsdFsyXSA9IExNU1syXSAqIEQ2NVogLyBzb3VyY2VXaGl0ZVBvaW50WzJdO1xuICB9XG5cbiAgZnVuY3Rpb24gc1JHQlRyYW5zZmVyRnVuY3Rpb24oY29sb3IpIHtcbiAgICBpZiAoY29sb3IgPD0gMC4wMDMxMzA4KSB7XG4gICAgICByZXR1cm4gYWRqdXN0VG9SYW5nZSgwLCAxLCAxMi45MiAqIGNvbG9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRqdXN0VG9SYW5nZSgwLCAxLCAoMSArIDAuMDU1KSAqIGNvbG9yICoqICgxIC8gMi40KSAtIDAuMDU1KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkanVzdFRvUmFuZ2UobWluLCBtYXgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlTChMKSB7XG4gICAgaWYgKEwgPCAwKSB7XG4gICAgICByZXR1cm4gLWRlY29kZUwoLUwpO1xuICAgIH1cblxuICAgIGlmIChMID4gOC4wKSB7XG4gICAgICByZXR1cm4gKChMICsgMTYpIC8gMTE2KSAqKiAzO1xuICAgIH1cblxuICAgIHJldHVybiBMICogREVDT0RFX0xfQ09OU1RBTlQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wZW5zYXRlQmxhY2tQb2ludChzb3VyY2VCbGFja1BvaW50LCBYWVpfRmxhdCwgcmVzdWx0KSB7XG4gICAgaWYgKHNvdXJjZUJsYWNrUG9pbnRbMF0gPT09IDAgJiYgc291cmNlQmxhY2tQb2ludFsxXSA9PT0gMCAmJiBzb3VyY2VCbGFja1BvaW50WzJdID09PSAwKSB7XG4gICAgICByZXN1bHRbMF0gPSBYWVpfRmxhdFswXTtcbiAgICAgIHJlc3VsdFsxXSA9IFhZWl9GbGF0WzFdO1xuICAgICAgcmVzdWx0WzJdID0gWFlaX0ZsYXRbMl07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgemVyb0RlY29kZUwgPSBkZWNvZGVMKDApO1xuICAgIGNvbnN0IFhfRFNUID0gemVyb0RlY29kZUw7XG4gICAgY29uc3QgWF9TUkMgPSBkZWNvZGVMKHNvdXJjZUJsYWNrUG9pbnRbMF0pO1xuICAgIGNvbnN0IFlfRFNUID0gemVyb0RlY29kZUw7XG4gICAgY29uc3QgWV9TUkMgPSBkZWNvZGVMKHNvdXJjZUJsYWNrUG9pbnRbMV0pO1xuICAgIGNvbnN0IFpfRFNUID0gemVyb0RlY29kZUw7XG4gICAgY29uc3QgWl9TUkMgPSBkZWNvZGVMKHNvdXJjZUJsYWNrUG9pbnRbMl0pO1xuICAgIGNvbnN0IFhfU2NhbGUgPSAoMSAtIFhfRFNUKSAvICgxIC0gWF9TUkMpO1xuICAgIGNvbnN0IFhfT2Zmc2V0ID0gMSAtIFhfU2NhbGU7XG4gICAgY29uc3QgWV9TY2FsZSA9ICgxIC0gWV9EU1QpIC8gKDEgLSBZX1NSQyk7XG4gICAgY29uc3QgWV9PZmZzZXQgPSAxIC0gWV9TY2FsZTtcbiAgICBjb25zdCBaX1NjYWxlID0gKDEgLSBaX0RTVCkgLyAoMSAtIFpfU1JDKTtcbiAgICBjb25zdCBaX09mZnNldCA9IDEgLSBaX1NjYWxlO1xuICAgIHJlc3VsdFswXSA9IFhZWl9GbGF0WzBdICogWF9TY2FsZSArIFhfT2Zmc2V0O1xuICAgIHJlc3VsdFsxXSA9IFhZWl9GbGF0WzFdICogWV9TY2FsZSArIFlfT2Zmc2V0O1xuICAgIHJlc3VsdFsyXSA9IFhZWl9GbGF0WzJdICogWl9TY2FsZSArIFpfT2Zmc2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplV2hpdGVQb2ludFRvRmxhdChzb3VyY2VXaGl0ZVBvaW50LCBYWVpfSW4sIHJlc3VsdCkge1xuICAgIGlmIChzb3VyY2VXaGl0ZVBvaW50WzBdID09PSAxICYmIHNvdXJjZVdoaXRlUG9pbnRbMl0gPT09IDEpIHtcbiAgICAgIHJlc3VsdFswXSA9IFhZWl9JblswXTtcbiAgICAgIHJlc3VsdFsxXSA9IFhZWl9JblsxXTtcbiAgICAgIHJlc3VsdFsyXSA9IFhZWl9JblsyXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBMTVMgPSByZXN1bHQ7XG4gICAgbWF0cml4UHJvZHVjdChCUkFERk9SRF9TQ0FMRV9NQVRSSVgsIFhZWl9JbiwgTE1TKTtcbiAgICBjb25zdCBMTVNfRmxhdCA9IHRlbXBOb3JtYWxpemVNYXRyaXg7XG4gICAgY29udmVydFRvRmxhdChzb3VyY2VXaGl0ZVBvaW50LCBMTVMsIExNU19GbGF0KTtcbiAgICBtYXRyaXhQcm9kdWN0KEJSQURGT1JEX1NDQUxFX0lOVkVSU0VfTUFUUklYLCBMTVNfRmxhdCwgcmVzdWx0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVdoaXRlUG9pbnRUb0Q2NShzb3VyY2VXaGl0ZVBvaW50LCBYWVpfSW4sIHJlc3VsdCkge1xuICAgIGNvbnN0IExNUyA9IHJlc3VsdDtcbiAgICBtYXRyaXhQcm9kdWN0KEJSQURGT1JEX1NDQUxFX01BVFJJWCwgWFlaX0luLCBMTVMpO1xuICAgIGNvbnN0IExNU19ENjUgPSB0ZW1wTm9ybWFsaXplTWF0cml4O1xuICAgIGNvbnZlcnRUb0Q2NShzb3VyY2VXaGl0ZVBvaW50LCBMTVMsIExNU19ENjUpO1xuICAgIG1hdHJpeFByb2R1Y3QoQlJBREZPUkRfU0NBTEVfSU5WRVJTRV9NQVRSSVgsIExNU19ENjUsIHJlc3VsdCk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VG9SZ2IoY3MsIHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCBzY2FsZSkge1xuICAgIGNvbnN0IEEgPSBhZGp1c3RUb1JhbmdlKDAsIDEsIHNyY1tzcmNPZmZzZXRdICogc2NhbGUpO1xuICAgIGNvbnN0IEIgPSBhZGp1c3RUb1JhbmdlKDAsIDEsIHNyY1tzcmNPZmZzZXQgKyAxXSAqIHNjYWxlKTtcbiAgICBjb25zdCBDID0gYWRqdXN0VG9SYW5nZSgwLCAxLCBzcmNbc3JjT2Zmc2V0ICsgMl0gKiBzY2FsZSk7XG4gICAgY29uc3QgQUdSID0gQSAqKiBjcy5HUjtcbiAgICBjb25zdCBCR0cgPSBCICoqIGNzLkdHO1xuICAgIGNvbnN0IENHQiA9IEMgKiogY3MuR0I7XG4gICAgY29uc3QgWCA9IGNzLk1YQSAqIEFHUiArIGNzLk1YQiAqIEJHRyArIGNzLk1YQyAqIENHQjtcbiAgICBjb25zdCBZID0gY3MuTVlBICogQUdSICsgY3MuTVlCICogQkdHICsgY3MuTVlDICogQ0dCO1xuICAgIGNvbnN0IFogPSBjcy5NWkEgKiBBR1IgKyBjcy5NWkIgKiBCR0cgKyBjcy5NWkMgKiBDR0I7XG4gICAgY29uc3QgWFlaID0gdGVtcENvbnZlcnRNYXRyaXgxO1xuICAgIFhZWlswXSA9IFg7XG4gICAgWFlaWzFdID0gWTtcbiAgICBYWVpbMl0gPSBaO1xuICAgIGNvbnN0IFhZWl9GbGF0ID0gdGVtcENvbnZlcnRNYXRyaXgyO1xuICAgIG5vcm1hbGl6ZVdoaXRlUG9pbnRUb0ZsYXQoY3Mud2hpdGVQb2ludCwgWFlaLCBYWVpfRmxhdCk7XG4gICAgY29uc3QgWFlaX0JsYWNrID0gdGVtcENvbnZlcnRNYXRyaXgxO1xuICAgIGNvbXBlbnNhdGVCbGFja1BvaW50KGNzLmJsYWNrUG9pbnQsIFhZWl9GbGF0LCBYWVpfQmxhY2spO1xuICAgIGNvbnN0IFhZWl9ENjUgPSB0ZW1wQ29udmVydE1hdHJpeDI7XG4gICAgbm9ybWFsaXplV2hpdGVQb2ludFRvRDY1KEZMQVRfV0hJVEVQT0lOVF9NQVRSSVgsIFhZWl9CbGFjaywgWFlaX0Q2NSk7XG4gICAgY29uc3QgU1JHQiA9IHRlbXBDb252ZXJ0TWF0cml4MTtcbiAgICBtYXRyaXhQcm9kdWN0KFNSR0JfRDY1X1hZWl9UT19SR0JfTUFUUklYLCBYWVpfRDY1LCBTUkdCKTtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gc1JHQlRyYW5zZmVyRnVuY3Rpb24oU1JHQlswXSkgKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBzUkdCVHJhbnNmZXJGdW5jdGlvbihTUkdCWzFdKSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHNSR0JUcmFuc2ZlckZ1bmN0aW9uKFNSR0JbMl0pICogMjU1O1xuICB9XG5cbiAgY2xhc3MgQ2FsUkdCQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgICBjb25zdHJ1Y3Rvcih3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSwgbWF0cml4KSB7XG4gICAgICBzdXBlcihcIkNhbFJHQlwiLCAzKTtcblxuICAgICAgaWYgKCF3aGl0ZVBvaW50KSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0JcIik7XG4gICAgICB9XG5cbiAgICAgIGJsYWNrUG9pbnQgPSBibGFja1BvaW50IHx8IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gICAgICBnYW1tYSA9IGdhbW1hIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDFdKTtcbiAgICAgIG1hdHJpeCA9IG1hdHJpeCB8fCBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxXSk7XG4gICAgICBjb25zdCBYVyA9IHdoaXRlUG9pbnRbMF07XG4gICAgICBjb25zdCBZVyA9IHdoaXRlUG9pbnRbMV07XG4gICAgICBjb25zdCBaVyA9IHdoaXRlUG9pbnRbMl07XG4gICAgICB0aGlzLndoaXRlUG9pbnQgPSB3aGl0ZVBvaW50O1xuICAgICAgY29uc3QgWEIgPSBibGFja1BvaW50WzBdO1xuICAgICAgY29uc3QgWUIgPSBibGFja1BvaW50WzFdO1xuICAgICAgY29uc3QgWkIgPSBibGFja1BvaW50WzJdO1xuICAgICAgdGhpcy5ibGFja1BvaW50ID0gYmxhY2tQb2ludDtcbiAgICAgIHRoaXMuR1IgPSBnYW1tYVswXTtcbiAgICAgIHRoaXMuR0cgPSBnYW1tYVsxXTtcbiAgICAgIHRoaXMuR0IgPSBnYW1tYVsyXTtcbiAgICAgIHRoaXMuTVhBID0gbWF0cml4WzBdO1xuICAgICAgdGhpcy5NWUEgPSBtYXRyaXhbMV07XG4gICAgICB0aGlzLk1aQSA9IG1hdHJpeFsyXTtcbiAgICAgIHRoaXMuTVhCID0gbWF0cml4WzNdO1xuICAgICAgdGhpcy5NWUIgPSBtYXRyaXhbNF07XG4gICAgICB0aGlzLk1aQiA9IG1hdHJpeFs1XTtcbiAgICAgIHRoaXMuTVhDID0gbWF0cml4WzZdO1xuICAgICAgdGhpcy5NWUMgPSBtYXRyaXhbN107XG4gICAgICB0aGlzLk1aQyA9IG1hdHJpeFs4XTtcblxuICAgICAgaWYgKFhXIDwgMCB8fCBaVyA8IDAgfHwgWVcgIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgJHt0aGlzLm5hbWV9YCArIFwiLCBubyBmYWxsYmFjayBhdmFpbGFibGVcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChYQiA8IDAgfHwgWUIgPCAwIHx8IFpCIDwgMCkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9IFske1hCfSwgJHtZQn0sICR7WkJ9XSwgYCArIFwiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuXCIpO1xuICAgICAgICB0aGlzLmJsYWNrUG9pbnQgPSBuZXcgRmxvYXQzMkFycmF5KDMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5HUiA8IDAgfHwgdGhpcy5HRyA8IDAgfHwgdGhpcy5HQiA8IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKGBJbnZhbGlkIEdhbW1hIFske3RoaXMuR1J9LCAke3RoaXMuR0d9LCAke3RoaXMuR0J9XSBmb3IgYCArIGAke3RoaXMubmFtZX0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO1xuICAgICAgICB0aGlzLkdSID0gdGhpcy5HRyA9IHRoaXMuR0IgPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgMSk7XG4gICAgfVxuXG4gICAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgICAgY29uc3Qgc2NhbGUgPSAxIC8gKCgxIDw8IGJpdHMpIC0gMSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIHNjYWxlKTtcbiAgICAgICAgc3JjT2Zmc2V0ICs9IDM7XG4gICAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gQ2FsUkdCQ1M7XG59KCk7XG5cbmNvbnN0IExhYkNTID0gZnVuY3Rpb24gTGFiQ1NDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBmbl9nKHgpIHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgaWYgKHggPj0gNiAvIDI5KSB7XG4gICAgICByZXN1bHQgPSB4ICogeCAqIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IDEwOCAvIDg0MSAqICh4IC0gNCAvIDI5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlKHZhbHVlLCBoaWdoMSwgbG93MiwgaGlnaDIpIHtcbiAgICByZXR1cm4gbG93MiArIHZhbHVlICogKGhpZ2gyIC0gbG93MikgLyBoaWdoMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRUb1JnYihjcywgc3JjLCBzcmNPZmZzZXQsIG1heFZhbCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgIGxldCBMcyA9IHNyY1tzcmNPZmZzZXRdO1xuICAgIGxldCBhcyA9IHNyY1tzcmNPZmZzZXQgKyAxXTtcbiAgICBsZXQgYnMgPSBzcmNbc3JjT2Zmc2V0ICsgMl07XG5cbiAgICBpZiAobWF4VmFsICE9PSBmYWxzZSkge1xuICAgICAgTHMgPSBkZWNvZGUoTHMsIG1heFZhbCwgMCwgMTAwKTtcbiAgICAgIGFzID0gZGVjb2RlKGFzLCBtYXhWYWwsIGNzLmFtaW4sIGNzLmFtYXgpO1xuICAgICAgYnMgPSBkZWNvZGUoYnMsIG1heFZhbCwgY3MuYm1pbiwgY3MuYm1heCk7XG4gICAgfVxuXG4gICAgaWYgKGFzID4gY3MuYW1heCkge1xuICAgICAgYXMgPSBjcy5hbWF4O1xuICAgIH0gZWxzZSBpZiAoYXMgPCBjcy5hbWluKSB7XG4gICAgICBhcyA9IGNzLmFtaW47XG4gICAgfVxuXG4gICAgaWYgKGJzID4gY3MuYm1heCkge1xuICAgICAgYnMgPSBjcy5ibWF4O1xuICAgIH0gZWxzZSBpZiAoYnMgPCBjcy5ibWluKSB7XG4gICAgICBicyA9IGNzLmJtaW47XG4gICAgfVxuXG4gICAgY29uc3QgTSA9IChMcyArIDE2KSAvIDExNjtcbiAgICBjb25zdCBMID0gTSArIGFzIC8gNTAwO1xuICAgIGNvbnN0IE4gPSBNIC0gYnMgLyAyMDA7XG4gICAgY29uc3QgWCA9IGNzLlhXICogZm5fZyhMKTtcbiAgICBjb25zdCBZID0gY3MuWVcgKiBmbl9nKE0pO1xuICAgIGNvbnN0IFogPSBjcy5aVyAqIGZuX2coTik7XG4gICAgbGV0IHIsIGcsIGI7XG5cbiAgICBpZiAoY3MuWlcgPCAxKSB7XG4gICAgICByID0gWCAqIDMuMTMzOSArIFkgKiAtMS42MTcgKyBaICogLTAuNDkwNjtcbiAgICAgIGcgPSBYICogLTAuOTc4NSArIFkgKiAxLjkxNiArIFogKiAwLjAzMzM7XG4gICAgICBiID0gWCAqIDAuMDcyICsgWSAqIC0wLjIyOSArIFogKiAxLjQwNTc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSBYICogMy4yNDA2ICsgWSAqIC0xLjUzNzIgKyBaICogLTAuNDk4NjtcbiAgICAgIGcgPSBYICogLTAuOTY4OSArIFkgKiAxLjg3NTggKyBaICogMC4wNDE1O1xuICAgICAgYiA9IFggKiAwLjA1NTcgKyBZICogLTAuMjA0ICsgWiAqIDEuMDU3O1xuICAgIH1cblxuICAgIGRlc3RbZGVzdE9mZnNldF0gPSBNYXRoLnNxcnQocikgKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBNYXRoLnNxcnQoZykgKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMl0gPSBNYXRoLnNxcnQoYikgKiAyNTU7XG4gIH1cblxuICBjbGFzcyBMYWJDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICAgIGNvbnN0cnVjdG9yKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIHJhbmdlKSB7XG4gICAgICBzdXBlcihcIkxhYlwiLCAzKTtcblxuICAgICAgaWYgKCF3aGl0ZVBvaW50KSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBMYWJcIik7XG4gICAgICB9XG5cbiAgICAgIGJsYWNrUG9pbnQgPSBibGFja1BvaW50IHx8IFswLCAwLCAwXTtcbiAgICAgIHJhbmdlID0gcmFuZ2UgfHwgWy0xMDAsIDEwMCwgLTEwMCwgMTAwXTtcbiAgICAgIHRoaXMuWFcgPSB3aGl0ZVBvaW50WzBdO1xuICAgICAgdGhpcy5ZVyA9IHdoaXRlUG9pbnRbMV07XG4gICAgICB0aGlzLlpXID0gd2hpdGVQb2ludFsyXTtcbiAgICAgIHRoaXMuYW1pbiA9IHJhbmdlWzBdO1xuICAgICAgdGhpcy5hbWF4ID0gcmFuZ2VbMV07XG4gICAgICB0aGlzLmJtaW4gPSByYW5nZVsyXTtcbiAgICAgIHRoaXMuYm1heCA9IHJhbmdlWzNdO1xuICAgICAgdGhpcy5YQiA9IGJsYWNrUG9pbnRbMF07XG4gICAgICB0aGlzLllCID0gYmxhY2tQb2ludFsxXTtcbiAgICAgIHRoaXMuWkIgPSBibGFja1BvaW50WzJdO1xuXG4gICAgICBpZiAodGhpcy5YVyA8IDAgfHwgdGhpcy5aVyA8IDAgfHwgdGhpcy5ZVyAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5YQiA8IDAgfHwgdGhpcy5ZQiA8IDAgfHwgdGhpcy5aQiA8IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiSW52YWxpZCBCbGFja1BvaW50LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdFwiKTtcbiAgICAgICAgdGhpcy5YQiA9IHRoaXMuWUIgPSB0aGlzLlpCID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYW1pbiA+IHRoaXMuYW1heCB8fCB0aGlzLmJtaW4gPiB0aGlzLmJtYXgpIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiSW52YWxpZCBSYW5nZSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzXCIpO1xuICAgICAgICB0aGlzLmFtaW4gPSAtMTAwO1xuICAgICAgICB0aGlzLmFtYXggPSAxMDA7XG4gICAgICAgIHRoaXMuYm1pbiA9IC0xMDA7XG4gICAgICAgIHRoaXMuYm1heCA9IDEwMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIGZhbHNlLCBkZXN0LCBkZXN0T2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICBjb25zdCBtYXhWYWwgPSAoMSA8PCBiaXRzKSAtIDE7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIG1heFZhbCwgZGVzdCwgZGVzdE9mZnNldCk7XG4gICAgICAgIHNyY09mZnNldCArPSAzO1xuICAgICAgICBkZXN0T2Zmc2V0ICs9IDMgKyBhbHBoYTAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKSAvIDMgfCAwO1xuICAgIH1cblxuICAgIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0IHVzZXNaZXJvVG9PbmVSYW5nZSgpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInVzZXNaZXJvVG9PbmVSYW5nZVwiLCBmYWxzZSk7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gTGFiQ1M7XG59KCk7XG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuR2xvYmFsSW1hZ2VDYWNoZSA9IGV4cG9ydHMuTG9jYWxJbWFnZUNhY2hlID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG5jbGFzcyBMb2NhbEltYWdlQ2FjaGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9uYW1lUmVmTWFwID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2ltYWdlTWFwID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2ltYWdlQ2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgfVxuXG4gIGdldEJ5TmFtZShuYW1lKSB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5fbmFtZVJlZk1hcC5nZXQobmFtZSk7XG5cbiAgICBpZiAocmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCeVJlZihyZWYpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pbWFnZU1hcC5nZXQobmFtZSkgfHwgbnVsbDtcbiAgfVxuXG4gIGdldEJ5UmVmKHJlZikge1xuICAgIHJldHVybiB0aGlzLl9pbWFnZUNhY2hlLmdldChyZWYpIHx8IG51bGw7XG4gIH1cblxuICBzZXQobmFtZSwgcmVmID0gbnVsbCwgZGF0YSkge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbEltYWdlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgXCJuYW1lXCIgYXJndW1lbnQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHJlZikge1xuICAgICAgaWYgKHRoaXMuX2ltYWdlQ2FjaGUuaGFzKHJlZikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9uYW1lUmVmTWFwLnNldChuYW1lLCByZWYpO1xuXG4gICAgICB0aGlzLl9pbWFnZUNhY2hlLnB1dChyZWYsIGRhdGEpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2ltYWdlTWFwLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2ltYWdlTWFwLnNldChuYW1lLCBkYXRhKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTG9jYWxJbWFnZUNhY2hlID0gTG9jYWxJbWFnZUNhY2hlO1xuXG5jbGFzcyBHbG9iYWxJbWFnZUNhY2hlIHtcbiAgc3RhdGljIGdldCBOVU1fUEFHRVNfVEhSRVNIT0xEKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIk5VTV9QQUdFU19USFJFU0hPTERcIiwgMik7XG4gIH1cblxuICBzdGF0aWMgZ2V0IE1BWF9JTUFHRVNfVE9fQ0FDSEUoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiTUFYX0lNQUdFU19UT19DQUNIRVwiLCAxMCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9yZWZDYWNoZSA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXRDYWNoZSgpO1xuICAgIHRoaXMuX2ltYWdlQ2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgfVxuXG4gIHNob3VsZENhY2hlKHJlZiwgcGFnZUluZGV4KSB7XG4gICAgY29uc3QgcGFnZUluZGV4U2V0ID0gdGhpcy5fcmVmQ2FjaGUuZ2V0KHJlZik7XG5cbiAgICBjb25zdCBudW1QYWdlcyA9IHBhZ2VJbmRleFNldCA/IHBhZ2VJbmRleFNldC5zaXplICsgKHBhZ2VJbmRleFNldC5oYXMocGFnZUluZGV4KSA/IDAgOiAxKSA6IDE7XG5cbiAgICBpZiAobnVtUGFnZXMgPCBHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKHJlZikgJiYgdGhpcy5faW1hZ2VDYWNoZS5zaXplID49IEdsb2JhbEltYWdlQ2FjaGUuTUFYX0lNQUdFU19UT19DQUNIRSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkUGFnZUluZGV4KHJlZiwgcGFnZUluZGV4KSB7XG4gICAgbGV0IHBhZ2VJbmRleFNldCA9IHRoaXMuX3JlZkNhY2hlLmdldChyZWYpO1xuXG4gICAgaWYgKCFwYWdlSW5kZXhTZXQpIHtcbiAgICAgIHBhZ2VJbmRleFNldCA9IG5ldyBTZXQoKTtcblxuICAgICAgdGhpcy5fcmVmQ2FjaGUucHV0KHJlZiwgcGFnZUluZGV4U2V0KTtcbiAgICB9XG5cbiAgICBwYWdlSW5kZXhTZXQuYWRkKHBhZ2VJbmRleCk7XG4gIH1cblxuICBnZXREYXRhKHJlZiwgcGFnZUluZGV4KSB7XG4gICAgaWYgKCF0aGlzLl9yZWZDYWNoZS5oYXMocmVmKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUluZGV4U2V0ID0gdGhpcy5fcmVmQ2FjaGUuZ2V0KHJlZik7XG5cbiAgICBpZiAocGFnZUluZGV4U2V0LnNpemUgPCBHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcGFnZUluZGV4U2V0LmFkZChwYWdlSW5kZXgpO1xuICAgIHJldHVybiB0aGlzLl9pbWFnZUNhY2hlLmdldChyZWYpO1xuICB9XG5cbiAgc2V0RGF0YShyZWYsIGRhdGEpIHtcbiAgICBpZiAoIXRoaXMuX3JlZkNhY2hlLmhhcyhyZWYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGV4cGVjdGVkIFwiYWRkUGFnZUluZGV4XCIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbWFnZUNhY2hlLnNpemUgPj0gR2xvYmFsSW1hZ2VDYWNoZS5NQVhfSU1BR0VTX1RPX0NBQ0hFKSB7XG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJHbG9iYWxJbWFnZUNhY2hlLnNldERhdGEgLSBpZ25vcmluZyBpbWFnZSBhYm92ZSBNQVhfSU1BR0VTX1RPX0NBQ0hFLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbWFnZUNhY2hlLnB1dChyZWYsIGRhdGEpO1xuICB9XG5cbiAgY2xlYXIob25seURhdGEgPSBmYWxzZSkge1xuICAgIGlmICghb25seURhdGEpIHtcbiAgICAgIHRoaXMuX3JlZkNhY2hlLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VDYWNoZS5jbGVhcigpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5HbG9iYWxJbWFnZUNhY2hlID0gR2xvYmFsSW1hZ2VDYWNoZTtcblxuLyoqKi8gfSksXG4vKiAyNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRRdWFkUG9pbnRzID0gZ2V0UXVhZFBvaW50cztcbmV4cG9ydHMuTWFya3VwQW5ub3RhdGlvbiA9IGV4cG9ydHMuQW5ub3RhdGlvbkZhY3RvcnkgPSBleHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZSA9IGV4cG9ydHMuQW5ub3RhdGlvbiA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9vYmogPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb2xvcnNwYWNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyMyk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfb3BlcmF0b3JfbGlzdCA9IF9fd19wZGZqc19yZXF1aXJlX18oMjYpO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTIpO1xuXG5jbGFzcyBBbm5vdGF0aW9uRmFjdG9yeSB7XG4gIHN0YXRpYyBjcmVhdGUoeHJlZiwgcmVmLCBwZGZNYW5hZ2VyLCBpZEZhY3RvcnkpIHtcbiAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmUodGhpcywgXCJfY3JlYXRlXCIsIFt4cmVmLCByZWYsIHBkZk1hbmFnZXIsIGlkRmFjdG9yeV0pO1xuICB9XG5cbiAgc3RhdGljIF9jcmVhdGUoeHJlZiwgcmVmLCBwZGZNYW5hZ2VyLCBpZEZhY3RvcnkpIHtcbiAgICBjb25zdCBkaWN0ID0geHJlZi5mZXRjaElmUmVmKHJlZik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGRpY3QpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gKDAsIF9wcmltaXRpdmVzLmlzUmVmKShyZWYpID8gcmVmLnRvU3RyaW5nKCkgOiBgYW5ub3RfJHtpZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gO1xuICAgIGxldCBzdWJ0eXBlID0gZGljdC5nZXQoXCJTdWJ0eXBlXCIpO1xuICAgIHN1YnR5cGUgPSAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShzdWJ0eXBlKSA/IHN1YnR5cGUubmFtZSA6IG51bGw7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgIHhyZWYsXG4gICAgICBkaWN0LFxuICAgICAgc3VidHlwZSxcbiAgICAgIGlkLFxuICAgICAgcGRmTWFuYWdlclxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgIGNhc2UgXCJMaW5rXCI6XG4gICAgICAgIHJldHVybiBuZXcgTGlua0Fubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJUZXh0XCI6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJXaWRnZXRcIjpcbiAgICAgICAgbGV0IGZpZWxkVHlwZSA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgZGljdCxcbiAgICAgICAgICBrZXk6IFwiRlRcIlxuICAgICAgICB9KTtcbiAgICAgICAgZmllbGRUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmllbGRUeXBlKSA/IGZpZWxkVHlwZS5uYW1lIDogbnVsbDtcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJUeFwiOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0V2lkZ2V0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgIGNhc2UgXCJCdG5cIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgIGNhc2UgXCJDaFwiOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmltcGxlbWVudGVkIHdpZGdldCBmaWVsZCB0eXBlIFwiJyArIGZpZWxkVHlwZSArICdcIiwgJyArIFwiZmFsbGluZyBiYWNrIHRvIGJhc2UgZmllbGQgdHlwZS5cIik7XG4gICAgICAgIHJldHVybiBuZXcgV2lkZ2V0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlBvcHVwXCI6XG4gICAgICAgIHJldHVybiBuZXcgUG9wdXBBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiRnJlZVRleHRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBGcmVlVGV4dEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJMaW5lXCI6XG4gICAgICAgIHJldHVybiBuZXcgTGluZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJTcXVhcmVcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBTcXVhcmVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiQ2lyY2xlXCI6XG4gICAgICAgIHJldHVybiBuZXcgQ2lyY2xlQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlBvbHlMaW5lXCI6XG4gICAgICAgIHJldHVybiBuZXcgUG9seWxpbmVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgICAgICByZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiQ2FyZXRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBDYXJldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJJbmtcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBJbmtBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiSGlnaGxpZ2h0XCI6XG4gICAgICAgIHJldHVybiBuZXcgSGlnaGxpZ2h0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlVuZGVybGluZVwiOlxuICAgICAgICByZXR1cm4gbmV3IFVuZGVybGluZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJTcXVpZ2dseVwiOlxuICAgICAgICByZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlN0cmlrZU91dFwiOlxuICAgICAgICByZXR1cm4gbmV3IFN0cmlrZU91dEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJTdGFtcFwiOlxuICAgICAgICByZXR1cm4gbmV3IFN0YW1wQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIkZpbGVBdHRhY2htZW50XCI6XG4gICAgICAgIHJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoIXN1YnR5cGUpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJBbm5vdGF0aW9uIGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIC9TdWJ0eXBlLlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlIFwiJyArIHN1YnR5cGUgKyAnXCIsICcgKyBcImZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuQW5ub3RhdGlvbkZhY3RvcnkgPSBBbm5vdGF0aW9uRmFjdG9yeTtcblxuZnVuY3Rpb24gZ2V0UXVhZFBvaW50cyhkaWN0LCByZWN0KSB7XG4gIGlmICghZGljdC5oYXMoXCJRdWFkUG9pbnRzXCIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBxdWFkUG9pbnRzID0gZGljdC5nZXRBcnJheShcIlF1YWRQb2ludHNcIik7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHF1YWRQb2ludHMpIHx8IHF1YWRQb2ludHMubGVuZ3RoICUgOCA+IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHF1YWRQb2ludHNMaXN0cyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHF1YWRQb2ludHMubGVuZ3RoIC8gODsgaSA8IGlpOyBpKyspIHtcbiAgICBxdWFkUG9pbnRzTGlzdHMucHVzaChbXSk7XG5cbiAgICBmb3IgKGxldCBqID0gaSAqIDgsIGpqID0gaSAqIDggKyA4OyBqIDwgamo7IGogKz0gMikge1xuICAgICAgY29uc3QgeCA9IHF1YWRQb2ludHNbal07XG4gICAgICBjb25zdCB5ID0gcXVhZFBvaW50c1tqICsgMV07XG5cbiAgICAgIGlmICh4IDwgcmVjdFswXSB8fCB4ID4gcmVjdFsyXSB8fCB5IDwgcmVjdFsxXSB8fCB5ID4gcmVjdFszXSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcXVhZFBvaW50c0xpc3RzW2ldLnB1c2goe1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhZFBvaW50c0xpc3RzO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2Zvcm1NYXRyaXgocmVjdCwgYmJveCwgbWF0cml4KSB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSA9IF91dGlsLlV0aWwuZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3goYmJveCwgbWF0cml4KTtcblxuICBpZiAobWluWCA9PT0gbWF4WCB8fCBtaW5ZID09PSBtYXhZKSB7XG4gICAgcmV0dXJuIFsxLCAwLCAwLCAxLCByZWN0WzBdLCByZWN0WzFdXTtcbiAgfVxuXG4gIGNvbnN0IHhSYXRpbyA9IChyZWN0WzJdIC0gcmVjdFswXSkgLyAobWF4WCAtIG1pblgpO1xuICBjb25zdCB5UmF0aW8gPSAocmVjdFszXSAtIHJlY3RbMV0pIC8gKG1heFkgLSBtaW5ZKTtcbiAgcmV0dXJuIFt4UmF0aW8sIDAsIDAsIHlSYXRpbywgcmVjdFswXSAtIG1pblggKiB4UmF0aW8sIHJlY3RbMV0gLSBtaW5ZICogeVJhdGlvXTtcbn1cblxuY2xhc3MgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgIGNvbnN0IGRpY3QgPSBwYXJhbXMuZGljdDtcbiAgICB0aGlzLnNldENvbnRlbnRzKGRpY3QuZ2V0KFwiQ29udGVudHNcIikpO1xuICAgIHRoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShkaWN0LmdldChcIk1cIikpO1xuICAgIHRoaXMuc2V0RmxhZ3MoZGljdC5nZXQoXCJGXCIpKTtcbiAgICB0aGlzLnNldFJlY3RhbmdsZShkaWN0LmdldEFycmF5KFwiUmVjdFwiKSk7XG4gICAgdGhpcy5zZXRDb2xvcihkaWN0LmdldEFycmF5KFwiQ1wiKSk7XG4gICAgdGhpcy5zZXRCb3JkZXJTdHlsZShkaWN0KTtcbiAgICB0aGlzLnNldEFwcGVhcmFuY2UoZGljdCk7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgYW5ub3RhdGlvbkZsYWdzOiB0aGlzLmZsYWdzLFxuICAgICAgYm9yZGVyU3R5bGU6IHRoaXMuYm9yZGVyU3R5bGUsXG4gICAgICBjb2xvcjogdGhpcy5jb2xvcixcbiAgICAgIGNvbnRlbnRzOiB0aGlzLmNvbnRlbnRzLFxuICAgICAgaGFzQXBwZWFyYW5jZTogISF0aGlzLmFwcGVhcmFuY2UsXG4gICAgICBpZDogcGFyYW1zLmlkLFxuICAgICAgbW9kaWZpY2F0aW9uRGF0ZTogdGhpcy5tb2RpZmljYXRpb25EYXRlLFxuICAgICAgcmVjdDogdGhpcy5yZWN0YW5nbGUsXG4gICAgICBzdWJ0eXBlOiBwYXJhbXMuc3VidHlwZVxuICAgIH07XG4gIH1cblxuICBfaGFzRmxhZyhmbGFncywgZmxhZykge1xuICAgIHJldHVybiAhIShmbGFncyAmIGZsYWcpO1xuICB9XG5cbiAgX2lzVmlld2FibGUoZmxhZ3MpIHtcbiAgICByZXR1cm4gIXRoaXMuX2hhc0ZsYWcoZmxhZ3MsIF91dGlsLkFubm90YXRpb25GbGFnLklOVklTSUJMRSkgJiYgIXRoaXMuX2hhc0ZsYWcoZmxhZ3MsIF91dGlsLkFubm90YXRpb25GbGFnLkhJRERFTikgJiYgIXRoaXMuX2hhc0ZsYWcoZmxhZ3MsIF91dGlsLkFubm90YXRpb25GbGFnLk5PVklFVyk7XG4gIH1cblxuICBfaXNQcmludGFibGUoZmxhZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuUFJJTlQpICYmICF0aGlzLl9oYXNGbGFnKGZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpICYmICF0aGlzLl9oYXNGbGFnKGZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5ISURERU4pO1xuICB9XG5cbiAgZ2V0IHZpZXdhYmxlKCkge1xuICAgIGlmICh0aGlzLmZsYWdzID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faXNWaWV3YWJsZSh0aGlzLmZsYWdzKTtcbiAgfVxuXG4gIGdldCBwcmludGFibGUoKSB7XG4gICAgaWYgKHRoaXMuZmxhZ3MgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faXNQcmludGFibGUodGhpcy5mbGFncyk7XG4gIH1cblxuICBzZXRDb250ZW50cyhjb250ZW50cykge1xuICAgIHRoaXMuY29udGVudHMgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGNvbnRlbnRzIHx8IFwiXCIpO1xuICB9XG5cbiAgc2V0TW9kaWZpY2F0aW9uRGF0ZShtb2RpZmljYXRpb25EYXRlKSB7XG4gICAgdGhpcy5tb2RpZmljYXRpb25EYXRlID0gKDAsIF91dGlsLmlzU3RyaW5nKShtb2RpZmljYXRpb25EYXRlKSA/IG1vZGlmaWNhdGlvbkRhdGUgOiBudWxsO1xuICB9XG5cbiAgc2V0RmxhZ3MoZmxhZ3MpIHtcbiAgICB0aGlzLmZsYWdzID0gTnVtYmVyLmlzSW50ZWdlcihmbGFncykgJiYgZmxhZ3MgPiAwID8gZmxhZ3MgOiAwO1xuICB9XG5cbiAgaGFzRmxhZyhmbGFnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncywgZmxhZyk7XG4gIH1cblxuICBzZXRSZWN0YW5nbGUocmVjdGFuZ2xlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjdGFuZ2xlKSAmJiByZWN0YW5nbGUubGVuZ3RoID09PSA0KSB7XG4gICAgICB0aGlzLnJlY3RhbmdsZSA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChyZWN0YW5nbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlY3RhbmdsZSA9IFswLCAwLCAwLCAwXTtcbiAgICB9XG4gIH1cblxuICBzZXRDb2xvcihjb2xvcikge1xuICAgIGNvbnN0IHJnYkNvbG9yID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbG9yKSkge1xuICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY29sb3IubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxOlxuICAgICAgICBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2JJdGVtKGNvbG9yLCAwLCByZ2JDb2xvciwgMCk7XG5cbiAgICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzOlxuICAgICAgICBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oY29sb3IsIDAsIHJnYkNvbG9yLCAwKTtcblxuICAgICAgICB0aGlzLmNvbG9yID0gcmdiQ29sb3I7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0oY29sb3IsIDAsIHJnYkNvbG9yLCAwKTtcblxuICAgICAgICB0aGlzLmNvbG9yID0gcmdiQ29sb3I7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNvbG9yID0gcmdiQ29sb3I7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldEJvcmRlclN0eWxlKGJvcmRlclN0eWxlKSB7XG4gICAgdGhpcy5ib3JkZXJTdHlsZSA9IG5ldyBBbm5vdGF0aW9uQm9yZGVyU3R5bGUoKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYm9yZGVyU3R5bGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJvcmRlclN0eWxlLmhhcyhcIkJTXCIpKSB7XG4gICAgICBjb25zdCBkaWN0ID0gYm9yZGVyU3R5bGUuZ2V0KFwiQlNcIik7XG4gICAgICBjb25zdCBkaWN0VHlwZSA9IGRpY3QuZ2V0KFwiVHlwZVwiKTtcblxuICAgICAgaWYgKCFkaWN0VHlwZSB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkaWN0VHlwZSwgXCJCb3JkZXJcIikpIHtcbiAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aChkaWN0LmdldChcIldcIiksIHRoaXMucmVjdGFuZ2xlKTtcbiAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZShkaWN0LmdldChcIlNcIikpO1xuICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheShkaWN0LmdldEFycmF5KFwiRFwiKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChib3JkZXJTdHlsZS5oYXMoXCJCb3JkZXJcIikpIHtcbiAgICAgIGNvbnN0IGFycmF5ID0gYm9yZGVyU3R5bGUuZ2V0QXJyYXkoXCJCb3JkZXJcIik7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5KSAmJiBhcnJheS5sZW5ndGggPj0gMykge1xuICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoYXJyYXlbMF0pO1xuICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFZlcnRpY2FsQ29ybmVyUmFkaXVzKGFycmF5WzFdKTtcbiAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aChhcnJheVsyXSwgdGhpcy5yZWN0YW5nbGUpO1xuXG4gICAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheShhcnJheVszXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKTtcbiAgICB9XG4gIH1cblxuICBzZXRBcHBlYXJhbmNlKGRpY3QpIHtcbiAgICB0aGlzLmFwcGVhcmFuY2UgPSBudWxsO1xuICAgIGNvbnN0IGFwcGVhcmFuY2VTdGF0ZXMgPSBkaWN0LmdldChcIkFQXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhcHBlYXJhbmNlU3RhdGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbEFwcGVhcmFuY2VTdGF0ZSA9IGFwcGVhcmFuY2VTdGF0ZXMuZ2V0KFwiTlwiKTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKG5vcm1hbEFwcGVhcmFuY2VTdGF0ZSkpIHtcbiAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IG5vcm1hbEFwcGVhcmFuY2VTdGF0ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vcm1hbEFwcGVhcmFuY2VTdGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcyA9IGRpY3QuZ2V0KFwiQVNcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGFzKSB8fCAhbm9ybWFsQXBwZWFyYW5jZVN0YXRlLmhhcyhhcy5uYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYXBwZWFyYW5jZSA9IG5vcm1hbEFwcGVhcmFuY2VTdGF0ZS5nZXQoYXMubmFtZSk7XG4gIH1cblxuICBsb2FkUmVzb3VyY2VzKGtleXMpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlYXJhbmNlLmRpY3QuZ2V0QXN5bmMoXCJSZXNvdXJjZXNcIikudGhlbihyZXNvdXJjZXMgPT4ge1xuICAgICAgaWYgKCFyZXNvdXJjZXMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2JqZWN0TG9hZGVyID0gbmV3IF9vYmouT2JqZWN0TG9hZGVyKHJlc291cmNlcywga2V5cywgcmVzb3VyY2VzLnhyZWYpO1xuICAgICAgcmV0dXJuIG9iamVjdExvYWRlci5sb2FkKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXNvdXJjZXM7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldE9wZXJhdG9yTGlzdChldmFsdWF0b3IsIHRhc2ssIHJlbmRlckZvcm1zKSB7XG4gICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGNvbnN0IGFwcGVhcmFuY2VEaWN0ID0gdGhpcy5hcHBlYXJhbmNlLmRpY3Q7XG4gICAgY29uc3QgcmVzb3VyY2VzUHJvbWlzZSA9IHRoaXMubG9hZFJlc291cmNlcyhbXCJFeHRHU3RhdGVcIiwgXCJDb2xvclNwYWNlXCIsIFwiUGF0dGVyblwiLCBcIlNoYWRpbmdcIiwgXCJYT2JqZWN0XCIsIFwiRm9udFwiXSk7XG4gICAgY29uc3QgYmJveCA9IGFwcGVhcmFuY2VEaWN0LmdldEFycmF5KFwiQkJveFwiKSB8fCBbMCwgMCwgMSwgMV07XG4gICAgY29uc3QgbWF0cml4ID0gYXBwZWFyYW5jZURpY3QuZ2V0QXJyYXkoXCJNYXRyaXhcIikgfHwgWzEsIDAsIDAsIDEsIDAsIDBdO1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IGdldFRyYW5zZm9ybU1hdHJpeChkYXRhLnJlY3QsIGJib3gsIG1hdHJpeCk7XG4gICAgcmV0dXJuIHJlc291cmNlc1Byb21pc2UudGhlbihyZXNvdXJjZXMgPT4ge1xuICAgICAgY29uc3Qgb3BMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuICAgICAgb3BMaXN0LmFkZE9wKF91dGlsLk9QUy5iZWdpbkFubm90YXRpb24sIFtkYXRhLnJlY3QsIHRyYW5zZm9ybSwgbWF0cml4XSk7XG4gICAgICByZXR1cm4gZXZhbHVhdG9yLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgIHN0cmVhbTogdGhpcy5hcHBlYXJhbmNlLFxuICAgICAgICB0YXNrLFxuICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgIG9wZXJhdG9yTGlzdDogb3BMaXN0XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgb3BMaXN0LmFkZE9wKF91dGlsLk9QUy5lbmRBbm5vdGF0aW9uLCBbXSk7XG4gICAgICAgIHRoaXMuYXBwZWFyYW5jZS5yZXNldCgpO1xuICAgICAgICByZXR1cm4gb3BMaXN0O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxufVxuXG5leHBvcnRzLkFubm90YXRpb24gPSBBbm5vdGF0aW9uO1xuXG5jbGFzcyBBbm5vdGF0aW9uQm9yZGVyU3R5bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLndpZHRoID0gMTtcbiAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDtcbiAgICB0aGlzLmRhc2hBcnJheSA9IFszXTtcbiAgICB0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXMgPSAwO1xuICAgIHRoaXMudmVydGljYWxDb3JuZXJSYWRpdXMgPSAwO1xuICB9XG5cbiAgc2V0V2lkdGgod2lkdGgsIHJlY3QgPSBbMCwgMCwgMCwgMF0pIHtcbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkod2lkdGgpKSB7XG4gICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih3aWR0aCkpIHtcbiAgICAgIGlmICh3aWR0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSAocmVjdFsyXSAtIHJlY3RbMF0pIC8gMjtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gKHJlY3RbM10gLSByZWN0WzFdKSAvIDI7XG5cbiAgICAgICAgaWYgKG1heFdpZHRoID4gMCAmJiBtYXhIZWlnaHQgPiAwICYmICh3aWR0aCA+IG1heFdpZHRoIHx8IHdpZHRoID4gbWF4SGVpZ2h0KSkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgQW5ub3RhdGlvbkJvcmRlclN0eWxlLnNldFdpZHRoIC0gaWdub3Jpbmcgd2lkdGg6ICR7d2lkdGh9YCk7XG4gICAgICAgICAgd2lkdGggPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB9XG4gIH1cblxuICBzZXRTdHlsZShzdHlsZSkge1xuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoc3R5bGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChzdHlsZS5uYW1lKSB7XG4gICAgICBjYXNlIFwiU1wiOlxuICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgIHRoaXMuc3R5bGUgPSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkRBU0hFRDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJCXCI6XG4gICAgICAgIHRoaXMuc3R5bGUgPSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiSVwiOlxuICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJVXCI6XG4gICAgICAgIHRoaXMuc3R5bGUgPSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlVOREVSTElORTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldERhc2hBcnJheShkYXNoQXJyYXkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXNoQXJyYXkpICYmIGRhc2hBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICBsZXQgYWxsWmVyb3MgPSB0cnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZGFzaEFycmF5KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkTnVtYmVyID0gK2VsZW1lbnQgPj0gMDtcblxuICAgICAgICBpZiAoIXZhbGlkTnVtYmVyKSB7XG4gICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPiAwKSB7XG4gICAgICAgICAgYWxsWmVyb3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNWYWxpZCAmJiAhYWxsWmVyb3MpIHtcbiAgICAgICAgdGhpcy5kYXNoQXJyYXkgPSBkYXNoQXJyYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhc2hBcnJheSkge1xuICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgfVxuICB9XG5cbiAgc2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyhyYWRpdXMpIHtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihyYWRpdXMpKSB7XG4gICAgICB0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXMgPSByYWRpdXM7XG4gICAgfVxuICB9XG5cbiAgc2V0VmVydGljYWxDb3JuZXJSYWRpdXMocmFkaXVzKSB7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIocmFkaXVzKSkge1xuICAgICAgdGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cyA9IHJhZGl1cztcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZSA9IEFubm90YXRpb25Cb3JkZXJTdHlsZTtcblxuY2xhc3MgTWFya3VwQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgY29uc3QgZGljdCA9IHBhcmFtZXRlcnMuZGljdDtcblxuICAgIGlmIChkaWN0LmhhcyhcIklSVFwiKSkge1xuICAgICAgY29uc3QgcmF3SVJUID0gZGljdC5nZXRSYXcoXCJJUlRcIik7XG4gICAgICB0aGlzLmRhdGEuaW5SZXBseVRvID0gKDAsIF9wcmltaXRpdmVzLmlzUmVmKShyYXdJUlQpID8gcmF3SVJULnRvU3RyaW5nKCkgOiBudWxsO1xuICAgICAgY29uc3QgcnQgPSBkaWN0LmdldChcIlJUXCIpO1xuICAgICAgdGhpcy5kYXRhLnJlcGx5VHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHJ0KSA/IHJ0Lm5hbWUgOiBfdXRpbC5Bbm5vdGF0aW9uUmVwbHlUeXBlLlJFUExZO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGEucmVwbHlUeXBlID09PSBfdXRpbC5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBkaWN0LmdldChcIklSVFwiKTtcbiAgICAgIHRoaXMuZGF0YS50aXRsZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykocGFyZW50LmdldChcIlRcIikgfHwgXCJcIik7XG4gICAgICB0aGlzLnNldENvbnRlbnRzKHBhcmVudC5nZXQoXCJDb250ZW50c1wiKSk7XG4gICAgICB0aGlzLmRhdGEuY29udGVudHMgPSB0aGlzLmNvbnRlbnRzO1xuXG4gICAgICBpZiAoIXBhcmVudC5oYXMoXCJDcmVhdGlvbkRhdGVcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldENyZWF0aW9uRGF0ZShwYXJlbnQuZ2V0KFwiQ3JlYXRpb25EYXRlXCIpKTtcbiAgICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IHRoaXMuY3JlYXRpb25EYXRlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXBhcmVudC5oYXMoXCJNXCIpKSB7XG4gICAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShwYXJlbnQuZ2V0KFwiTVwiKSk7XG4gICAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gdGhpcy5tb2RpZmljYXRpb25EYXRlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGEuaGFzUG9wdXAgPSBwYXJlbnQuaGFzKFwiUG9wdXBcIik7XG5cbiAgICAgIGlmICghcGFyZW50LmhhcyhcIkNcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0Q29sb3IocGFyZW50LmdldEFycmF5KFwiQ1wiKSk7XG4gICAgICAgIHRoaXMuZGF0YS5jb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS50aXRsZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUXCIpIHx8IFwiXCIpO1xuICAgICAgdGhpcy5zZXRDcmVhdGlvbkRhdGUoZGljdC5nZXQoXCJDcmVhdGlvbkRhdGVcIikpO1xuICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IHRoaXMuY3JlYXRpb25EYXRlO1xuICAgICAgdGhpcy5kYXRhLmhhc1BvcHVwID0gZGljdC5oYXMoXCJQb3B1cFwiKTtcblxuICAgICAgaWYgKCFkaWN0LmhhcyhcIkNcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRDcmVhdGlvbkRhdGUoY3JlYXRpb25EYXRlKSB7XG4gICAgdGhpcy5jcmVhdGlvbkRhdGUgPSAoMCwgX3V0aWwuaXNTdHJpbmcpKGNyZWF0aW9uRGF0ZSkgPyBjcmVhdGlvbkRhdGUgOiBudWxsO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NYXJrdXBBbm5vdGF0aW9uID0gTWFya3VwQW5ub3RhdGlvbjtcblxuY2xhc3MgV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIGNvbnN0IGRpY3QgPSBwYXJhbXMuZGljdDtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5XSURHRVQ7XG4gICAgZGF0YS5maWVsZE5hbWUgPSB0aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUoZGljdCk7XG4gICAgZGF0YS5maWVsZFZhbHVlID0gKDAsIF9jb3JlX3V0aWxzLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgIGRpY3QsXG4gICAgICBrZXk6IFwiVlwiLFxuICAgICAgZ2V0QXJyYXk6IHRydWVcbiAgICB9KTtcbiAgICBkYXRhLmFsdGVybmF0aXZlVGV4dCA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUVVwiKSB8fCBcIlwiKTtcbiAgICBkYXRhLmRlZmF1bHRBcHBlYXJhbmNlID0gKDAsIF9jb3JlX3V0aWxzLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgIGRpY3QsXG4gICAgICBrZXk6IFwiREFcIlxuICAgIH0pIHx8IFwiXCI7XG4gICAgY29uc3QgZmllbGRUeXBlID0gKDAsIF9jb3JlX3V0aWxzLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgIGRpY3QsXG4gICAgICBrZXk6IFwiRlRcIlxuICAgIH0pO1xuICAgIGRhdGEuZmllbGRUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmllbGRUeXBlKSA/IGZpZWxkVHlwZS5uYW1lIDogbnVsbDtcbiAgICB0aGlzLmZpZWxkUmVzb3VyY2VzID0gKDAsIF9jb3JlX3V0aWxzLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgIGRpY3QsXG4gICAgICBrZXk6IFwiRFJcIlxuICAgIH0pIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgZGF0YS5maWVsZEZsYWdzID0gKDAsIF9jb3JlX3V0aWxzLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgIGRpY3QsXG4gICAgICBrZXk6IFwiRmZcIlxuICAgIH0pO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRhdGEuZmllbGRGbGFncykgfHwgZGF0YS5maWVsZEZsYWdzIDwgMCkge1xuICAgICAgZGF0YS5maWVsZEZsYWdzID0gMDtcbiAgICB9XG5cbiAgICBkYXRhLnJlYWRPbmx5ID0gdGhpcy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5SRUFET05MWSk7XG5cbiAgICBpZiAoZGF0YS5maWVsZFR5cGUgPT09IFwiU2lnXCIpIHtcbiAgICAgIGRhdGEuZmllbGRWYWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLnNldEZsYWdzKF91dGlsLkFubm90YXRpb25GbGFnLkhJRERFTik7XG4gICAgfVxuICB9XG5cbiAgX2NvbnN0cnVjdEZpZWxkTmFtZShkaWN0KSB7XG4gICAgaWYgKCFkaWN0LmhhcyhcIlRcIikgJiYgIWRpY3QuaGFzKFwiUGFyZW50XCIpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLlwiKTtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGlmICghZGljdC5oYXMoXCJQYXJlbnRcIikpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGRpY3QuZ2V0KFwiVFwiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGROYW1lID0gW107XG5cbiAgICBpZiAoZGljdC5oYXMoXCJUXCIpKSB7XG4gICAgICBmaWVsZE5hbWUudW5zaGlmdCgoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGRpY3QuZ2V0KFwiVFwiKSkpO1xuICAgIH1cblxuICAgIGxldCBsb29wRGljdCA9IGRpY3Q7XG5cbiAgICB3aGlsZSAobG9vcERpY3QuaGFzKFwiUGFyZW50XCIpKSB7XG4gICAgICBsb29wRGljdCA9IGxvb3BEaWN0LmdldChcIlBhcmVudFwiKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShsb29wRGljdCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChsb29wRGljdC5oYXMoXCJUXCIpKSB7XG4gICAgICAgIGZpZWxkTmFtZS51bnNoaWZ0KCgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykobG9vcERpY3QuZ2V0KFwiVFwiKSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWVsZE5hbWUuam9pbihcIi5cIik7XG4gIH1cblxuICBoYXNGaWVsZEZsYWcoZmxhZykge1xuICAgIHJldHVybiAhISh0aGlzLmRhdGEuZmllbGRGbGFncyAmIGZsYWcpO1xuICB9XG5cbiAgZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgcmVuZGVyRm9ybXMpIHtcbiAgICBpZiAocmVuZGVyRm9ybXMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgcmVuZGVyRm9ybXMpO1xuICB9XG5cbn1cblxuY2xhc3MgVGV4dFdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICBjb25zdCBkaWN0ID0gcGFyYW1zLmRpY3Q7XG4gICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHRoaXMuZGF0YS5maWVsZFZhbHVlIHx8IFwiXCIpO1xuICAgIGxldCBhbGlnbm1lbnQgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdCxcbiAgICAgIGtleTogXCJRXCJcbiAgICB9KTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhbGlnbm1lbnQpIHx8IGFsaWdubWVudCA8IDAgfHwgYWxpZ25tZW50ID4gMikge1xuICAgICAgYWxpZ25tZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEudGV4dEFsaWdubWVudCA9IGFsaWdubWVudDtcbiAgICBsZXQgbWF4aW11bUxlbmd0aCA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0LFxuICAgICAga2V5OiBcIk1heExlblwiXG4gICAgfSk7XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4aW11bUxlbmd0aCkgfHwgbWF4aW11bUxlbmd0aCA8IDApIHtcbiAgICAgIG1heGltdW1MZW5ndGggPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YS5tYXhMZW4gPSBtYXhpbXVtTGVuZ3RoO1xuICAgIHRoaXMuZGF0YS5tdWx0aUxpbmUgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSk7XG4gICAgdGhpcy5kYXRhLmNvbWIgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkNPTUIpICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSkgJiYgIXRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkZJTEVTRUxFQ1QpICYmIHRoaXMuZGF0YS5tYXhMZW4gIT09IG51bGw7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCByZW5kZXJGb3Jtcykge1xuICAgIGlmIChyZW5kZXJGb3JtcyB8fCB0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCByZW5kZXJGb3Jtcyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2UpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUob3BlcmF0b3JMaXN0KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgX3N0cmVhbS5TdHJlYW0oKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZSkpO1xuICAgIHJldHVybiBldmFsdWF0b3IuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgIHN0cmVhbSxcbiAgICAgIHRhc2ssXG4gICAgICByZXNvdXJjZXM6IHRoaXMuZmllbGRSZXNvdXJjZXMsXG4gICAgICBvcGVyYXRvckxpc3RcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBvcGVyYXRvckxpc3Q7XG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBCdXR0b25XaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5kYXRhLmNoZWNrQm94ID0gIXRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgIHRoaXMuZGF0YS5yYWRpb0J1dHRvbiA9IHRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgIHRoaXMuZGF0YS5wdXNoQnV0dG9uID0gdGhpcy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTtcblxuICAgIGlmICh0aGlzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgIHRoaXMuX3Byb2Nlc3NDaGVja0JveChwYXJhbXMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLnJhZGlvQnV0dG9uKSB7XG4gICAgICB0aGlzLl9wcm9jZXNzUmFkaW9CdXR0b24ocGFyYW1zKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS5wdXNoQnV0dG9uKSB7XG4gICAgICB0aGlzLl9wcm9jZXNzUHVzaEJ1dHRvbihwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb25cIik7XG4gICAgfVxuICB9XG5cbiAgX3Byb2Nlc3NDaGVja0JveChwYXJhbXMpIHtcbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodGhpcy5kYXRhLmZpZWxkVmFsdWUpKSB7XG4gICAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5maWVsZFZhbHVlLm5hbWU7XG4gICAgfVxuXG4gICAgY29uc3QgY3VzdG9tQXBwZWFyYW5jZSA9IHBhcmFtcy5kaWN0LmdldChcIkFQXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjdXN0b21BcHBlYXJhbmNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydFZhbHVlT3B0aW9uc0RpY3QgPSBjdXN0b21BcHBlYXJhbmNlLmdldChcIkRcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGV4cG9ydFZhbHVlT3B0aW9uc0RpY3QpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXhwb3J0VmFsdWVzID0gZXhwb3J0VmFsdWVPcHRpb25zRGljdC5nZXRLZXlzKCk7XG4gICAgY29uc3QgaGFzQ29ycmVjdE9wdGlvbkNvdW50ID0gZXhwb3J0VmFsdWVzLmxlbmd0aCA9PT0gMjtcblxuICAgIGlmICghaGFzQ29ycmVjdE9wdGlvbkNvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLmV4cG9ydFZhbHVlID0gZXhwb3J0VmFsdWVzWzBdID09PSBcIk9mZlwiID8gZXhwb3J0VmFsdWVzWzFdIDogZXhwb3J0VmFsdWVzWzBdO1xuICB9XG5cbiAgX3Byb2Nlc3NSYWRpb0J1dHRvbihwYXJhbXMpIHtcbiAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5idXR0b25WYWx1ZSA9IG51bGw7XG4gICAgY29uc3QgZmllbGRQYXJlbnQgPSBwYXJhbXMuZGljdC5nZXQoXCJQYXJlbnRcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZmllbGRQYXJlbnQpICYmIGZpZWxkUGFyZW50LmhhcyhcIlZcIikpIHtcbiAgICAgIGNvbnN0IGZpZWxkUGFyZW50VmFsdWUgPSBmaWVsZFBhcmVudC5nZXQoXCJWXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmllbGRQYXJlbnRWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBmaWVsZFBhcmVudFZhbHVlLm5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXBwZWFyYW5jZVN0YXRlcyA9IHBhcmFtcy5kaWN0LmdldChcIkFQXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhcHBlYXJhbmNlU3RhdGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbEFwcGVhcmFuY2VTdGF0ZSA9IGFwcGVhcmFuY2VTdGF0ZXMuZ2V0KFwiTlwiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9ybWFsQXBwZWFyYW5jZVN0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIG5vcm1hbEFwcGVhcmFuY2VTdGF0ZS5nZXRLZXlzKCkpIHtcbiAgICAgIGlmIChrZXkgIT09IFwiT2ZmXCIpIHtcbiAgICAgICAgdGhpcy5kYXRhLmJ1dHRvblZhbHVlID0ga2V5O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfcHJvY2Vzc1B1c2hCdXR0b24ocGFyYW1zKSB7XG4gICAgaWYgKCFwYXJhbXMuZGljdC5oYXMoXCJBXCIpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJQdXNoIGJ1dHRvbnMgd2l0aG91dCBhY3Rpb24gZGljdGlvbmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIF9vYmouQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtcbiAgICAgIGRlc3REaWN0OiBwYXJhbXMuZGljdCxcbiAgICAgIHJlc3VsdE9iajogdGhpcy5kYXRhLFxuICAgICAgZG9jQmFzZVVybDogcGFyYW1zLnBkZk1hbmFnZXIuZG9jQmFzZVVybFxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuZGF0YS5vcHRpb25zID0gW107XG4gICAgY29uc3Qgb3B0aW9ucyA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0OiBwYXJhbXMuZGljdCxcbiAgICAgIGtleTogXCJPcHRcIlxuICAgIH0pO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIGNvbnN0IHhyZWYgPSBwYXJhbXMueHJlZjtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3B0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25zW2ldKTtcbiAgICAgICAgY29uc3QgaXNPcHRpb25BcnJheSA9IEFycmF5LmlzQXJyYXkob3B0aW9uKTtcbiAgICAgICAgdGhpcy5kYXRhLm9wdGlvbnNbaV0gPSB7XG4gICAgICAgICAgZXhwb3J0VmFsdWU6IGlzT3B0aW9uQXJyYXkgPyB4cmVmLmZldGNoSWZSZWYob3B0aW9uWzBdKSA6IG9wdGlvbixcbiAgICAgICAgICBkaXNwbGF5VmFsdWU6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoaXNPcHRpb25BcnJheSA/IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25bMV0pIDogb3B0aW9uKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gW3RoaXMuZGF0YS5maWVsZFZhbHVlXTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuY29tYm8gPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkNPTUJPKTtcbiAgICB0aGlzLmRhdGEubXVsdGlTZWxlY3QgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJU0VMRUNUKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBERUZBVUxUX0lDT05fU0laRSA9IDIyO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIGNvbnN0IGRpY3QgPSBwYXJhbWV0ZXJzLmRpY3Q7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuVEVYVDtcblxuICAgIGlmICh0aGlzLmRhdGEuaGFzQXBwZWFyYW5jZSkge1xuICAgICAgdGhpcy5kYXRhLm5hbWUgPSBcIk5vSWNvblwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEucmVjdFsxXSA9IHRoaXMuZGF0YS5yZWN0WzNdIC0gREVGQVVMVF9JQ09OX1NJWkU7XG4gICAgICB0aGlzLmRhdGEucmVjdFsyXSA9IHRoaXMuZGF0YS5yZWN0WzBdICsgREVGQVVMVF9JQ09OX1NJWkU7XG4gICAgICB0aGlzLmRhdGEubmFtZSA9IGRpY3QuaGFzKFwiTmFtZVwiKSA/IGRpY3QuZ2V0KFwiTmFtZVwiKS5uYW1lIDogXCJOb3RlXCI7XG4gICAgfVxuXG4gICAgaWYgKGRpY3QuaGFzKFwiU3RhdGVcIikpIHtcbiAgICAgIHRoaXMuZGF0YS5zdGF0ZSA9IGRpY3QuZ2V0KFwiU3RhdGVcIikgfHwgbnVsbDtcbiAgICAgIHRoaXMuZGF0YS5zdGF0ZU1vZGVsID0gZGljdC5nZXQoXCJTdGF0ZU1vZGVsXCIpIHx8IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS5zdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLmRhdGEuc3RhdGVNb2RlbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgTGlua0Fubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5MSU5LO1xuICAgIGNvbnN0IHF1YWRQb2ludHMgPSBnZXRRdWFkUG9pbnRzKHBhcmFtcy5kaWN0LCB0aGlzLnJlY3RhbmdsZSk7XG5cbiAgICBpZiAocXVhZFBvaW50cykge1xuICAgICAgdGhpcy5kYXRhLnF1YWRQb2ludHMgPSBxdWFkUG9pbnRzO1xuICAgIH1cblxuICAgIF9vYmouQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtcbiAgICAgIGRlc3REaWN0OiBwYXJhbXMuZGljdCxcbiAgICAgIHJlc3VsdE9iajogdGhpcy5kYXRhLFxuICAgICAgZG9jQmFzZVVybDogcGFyYW1zLnBkZk1hbmFnZXIuZG9jQmFzZVVybFxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgUG9wdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT1BVUDtcbiAgICBsZXQgcGFyZW50SXRlbSA9IHBhcmFtZXRlcnMuZGljdC5nZXQoXCJQYXJlbnRcIik7XG5cbiAgICBpZiAoIXBhcmVudEl0ZW0pIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRTdWJ0eXBlID0gcGFyZW50SXRlbS5nZXQoXCJTdWJ0eXBlXCIpO1xuICAgIHRoaXMuZGF0YS5wYXJlbnRUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocGFyZW50U3VidHlwZSkgPyBwYXJlbnRTdWJ0eXBlLm5hbWUgOiBudWxsO1xuICAgIGNvbnN0IHJhd1BhcmVudCA9IHBhcmFtZXRlcnMuZGljdC5nZXRSYXcoXCJQYXJlbnRcIik7XG4gICAgdGhpcy5kYXRhLnBhcmVudElkID0gKDAsIF9wcmltaXRpdmVzLmlzUmVmKShyYXdQYXJlbnQpID8gcmF3UGFyZW50LnRvU3RyaW5nKCkgOiBudWxsO1xuICAgIGNvbnN0IHJ0ID0gcGFyZW50SXRlbS5nZXQoXCJSVFwiKTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShydCwgX3V0aWwuQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCkpIHtcbiAgICAgIHBhcmVudEl0ZW0gPSBwYXJlbnRJdGVtLmdldChcIklSVFwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmVudEl0ZW0uaGFzKFwiTVwiKSkge1xuICAgICAgdGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUocGFyZW50SXRlbS5nZXQoXCJNXCIpKTtcbiAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gdGhpcy5tb2RpZmljYXRpb25EYXRlO1xuICAgIH1cblxuICAgIGlmICghcGFyZW50SXRlbS5oYXMoXCJDXCIpKSB7XG4gICAgICB0aGlzLmRhdGEuY29sb3IgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldENvbG9yKHBhcmVudEl0ZW0uZ2V0QXJyYXkoXCJDXCIpKTtcbiAgICAgIHRoaXMuZGF0YS5jb2xvciA9IHRoaXMuY29sb3I7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZpZXdhYmxlKSB7XG4gICAgICBjb25zdCBwYXJlbnRGbGFncyA9IHBhcmVudEl0ZW0uZ2V0KFwiRlwiKTtcblxuICAgICAgaWYgKHRoaXMuX2lzVmlld2FibGUocGFyZW50RmxhZ3MpKSB7XG4gICAgICAgIHRoaXMuc2V0RmxhZ3MocGFyZW50RmxhZ3MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZGF0YS50aXRsZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykocGFyZW50SXRlbS5nZXQoXCJUXCIpIHx8IFwiXCIpO1xuICAgIHRoaXMuZGF0YS5jb250ZW50cyA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykocGFyZW50SXRlbS5nZXQoXCJDb250ZW50c1wiKSB8fCBcIlwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEZyZWVUZXh0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQ7XG4gIH1cblxufVxuXG5jbGFzcyBMaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuTElORTtcbiAgICB0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KHBhcmFtZXRlcnMuZGljdC5nZXRBcnJheShcIkxcIikpO1xuICB9XG5cbn1cblxuY2xhc3MgU3F1YXJlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuU1FVQVJFO1xuICB9XG5cbn1cblxuY2xhc3MgQ2lyY2xlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFO1xuICB9XG5cbn1cblxuY2xhc3MgUG9seWxpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTtcbiAgICBjb25zdCByYXdWZXJ0aWNlcyA9IHBhcmFtZXRlcnMuZGljdC5nZXRBcnJheShcIlZlcnRpY2VzXCIpO1xuICAgIHRoaXMuZGF0YS52ZXJ0aWNlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcmF3VmVydGljZXMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgdGhpcy5kYXRhLnZlcnRpY2VzLnB1c2goe1xuICAgICAgICB4OiByYXdWZXJ0aWNlc1tpXSxcbiAgICAgICAgeTogcmF3VmVydGljZXNbaSArIDFdXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBQb2x5Z29uQW5ub3RhdGlvbiBleHRlbmRzIFBvbHlsaW5lQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT0xZR09OO1xuICB9XG5cbn1cblxuY2xhc3MgQ2FyZXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5DQVJFVDtcbiAgfVxuXG59XG5cbmNsYXNzIElua0Fubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLklOSztcbiAgICBjb25zdCB4cmVmID0gcGFyYW1ldGVycy54cmVmO1xuICAgIGNvbnN0IG9yaWdpbmFsSW5rTGlzdHMgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0QXJyYXkoXCJJbmtMaXN0XCIpO1xuICAgIHRoaXMuZGF0YS5pbmtMaXN0cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3JpZ2luYWxJbmtMaXN0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICB0aGlzLmRhdGEuaW5rTGlzdHMucHVzaChbXSk7XG5cbiAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IG9yaWdpbmFsSW5rTGlzdHNbaV0ubGVuZ3RoOyBqIDwgamo7IGogKz0gMikge1xuICAgICAgICB0aGlzLmRhdGEuaW5rTGlzdHNbaV0ucHVzaCh7XG4gICAgICAgICAgeDogeHJlZi5mZXRjaElmUmVmKG9yaWdpbmFsSW5rTGlzdHNbaV1bal0pLFxuICAgICAgICAgIHk6IHhyZWYuZmV0Y2hJZlJlZihvcmlnaW5hbElua0xpc3RzW2ldW2ogKyAxXSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgSGlnaGxpZ2h0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuSElHSExJR0hUO1xuICAgIGNvbnN0IHF1YWRQb2ludHMgPSBnZXRRdWFkUG9pbnRzKHBhcmFtZXRlcnMuZGljdCwgdGhpcy5yZWN0YW5nbGUpO1xuXG4gICAgaWYgKHF1YWRQb2ludHMpIHtcbiAgICAgIHRoaXMuZGF0YS5xdWFkUG9pbnRzID0gcXVhZFBvaW50cztcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBVbmRlcmxpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU7XG4gICAgY29uc3QgcXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMocGFyYW1ldGVycy5kaWN0LCB0aGlzLnJlY3RhbmdsZSk7XG5cbiAgICBpZiAocXVhZFBvaW50cykge1xuICAgICAgdGhpcy5kYXRhLnF1YWRQb2ludHMgPSBxdWFkUG9pbnRzO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFNxdWlnZ2x5QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuU1FVSUdHTFk7XG4gICAgY29uc3QgcXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMocGFyYW1ldGVycy5kaWN0LCB0aGlzLnJlY3RhbmdsZSk7XG5cbiAgICBpZiAocXVhZFBvaW50cykge1xuICAgICAgdGhpcy5kYXRhLnF1YWRQb2ludHMgPSBxdWFkUG9pbnRzO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFN0cmlrZU91dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDtcbiAgICBjb25zdCBxdWFkUG9pbnRzID0gZ2V0UXVhZFBvaW50cyhwYXJhbWV0ZXJzLmRpY3QsIHRoaXMucmVjdGFuZ2xlKTtcblxuICAgIGlmIChxdWFkUG9pbnRzKSB7XG4gICAgICB0aGlzLmRhdGEucXVhZFBvaW50cyA9IHF1YWRQb2ludHM7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgU3RhbXBBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TVEFNUDtcbiAgfVxuXG59XG5cbmNsYXNzIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBfb2JqLkZpbGVTcGVjKHBhcmFtZXRlcnMuZGljdC5nZXQoXCJGU1wiKSwgcGFyYW1ldGVycy54cmVmKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVDtcbiAgICB0aGlzLmRhdGEuZmlsZSA9IGZpbGUuc2VyaWFsaXphYmxlO1xuICB9XG5cbn1cblxuLyoqKi8gfSksXG4vKiAyNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvckxpc3QgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBRdWV1ZU9wdGltaXplciA9IGZ1bmN0aW9uIFF1ZXVlT3B0aW1pemVyQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gYWRkU3RhdGUocGFyZW50U3RhdGUsIHBhdHRlcm4sIGNoZWNrRm4sIGl0ZXJhdGVGbiwgcHJvY2Vzc0ZuKSB7XG4gICAgdmFyIHN0YXRlID0gcGFyZW50U3RhdGU7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXR0ZXJuLmxlbmd0aCAtIDE7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHBhdHRlcm5baV07XG4gICAgICBzdGF0ZSA9IHN0YXRlW2l0ZW1dIHx8IChzdGF0ZVtpdGVtXSA9IFtdKTtcbiAgICB9XG5cbiAgICBzdGF0ZVtwYXR0ZXJuW3BhdHRlcm4ubGVuZ3RoIC0gMV1dID0ge1xuICAgICAgY2hlY2tGbixcbiAgICAgIGl0ZXJhdGVGbixcbiAgICAgIHByb2Nlc3NGblxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQYWludFNvbGlkQ29sb3JJbWFnZU1hc2soaUZpcnN0U2F2ZSwgY291bnQsIGZuQXJyYXksIGFyZ3NBcnJheSkge1xuICAgIHZhciBpRmlyc3RQSU1YTyA9IGlGaXJzdFNhdmUgKyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICB2YXIgYXJnID0gYXJnc0FycmF5W2lGaXJzdFBJTVhPICsgNCAqIGldO1xuICAgICAgdmFyIGltYWdlTWFzayA9IGFyZy5sZW5ndGggPT09IDEgJiYgYXJnWzBdO1xuXG4gICAgICBpZiAoaW1hZ2VNYXNrICYmIGltYWdlTWFzay53aWR0aCA9PT0gMSAmJiBpbWFnZU1hc2suaGVpZ2h0ID09PSAxICYmICghaW1hZ2VNYXNrLmRhdGEubGVuZ3RoIHx8IGltYWdlTWFzay5kYXRhLmxlbmd0aCA9PT0gMSAmJiBpbWFnZU1hc2suZGF0YVswXSA9PT0gMCkpIHtcbiAgICAgICAgZm5BcnJheVtpRmlyc3RQSU1YTyArIDQgKiBpXSA9IF91dGlsLk9QUy5wYWludFNvbGlkQ29sb3JJbWFnZU1hc2s7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnQgLSBpO1xuICB9XG5cbiAgdmFyIEluaXRpYWxTdGF0ZSA9IFtdO1xuICBhZGRTdGF0ZShJbml0aWFsU3RhdGUsIFtfdXRpbC5PUFMuc2F2ZSwgX3V0aWwuT1BTLnRyYW5zZm9ybSwgX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LCBfdXRpbC5PUFMucmVzdG9yZV0sIG51bGwsIGZ1bmN0aW9uIGl0ZXJhdGVJbmxpbmVJbWFnZUdyb3VwKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheTtcbiAgICB2YXIgaUZpcnN0U2F2ZSA9IGNvbnRleHQuaUN1cnIgLSAzO1xuICAgIHZhciBwb3MgPSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcblxuICAgIHN3aXRjaCAocG9zKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMuc2F2ZTtcblxuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnRyYW5zZm9ybTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0O1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMucmVzdG9yZTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGl0ZXJhdGVJbmxpbmVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICR7cG9zfWApO1xuICB9LCBmdW5jdGlvbiBmb3VuZElubGluZUltYWdlR3JvdXAoY29udGV4dCwgaSkge1xuICAgIHZhciBNSU5fSU1BR0VTX0lOX0lOTElORV9JTUFHRVNfQkxPQ0sgPSAxMDtcbiAgICB2YXIgTUFYX0lNQUdFU19JTl9JTkxJTkVfSU1BR0VTX0JMT0NLID0gMjAwO1xuICAgIHZhciBNQVhfV0lEVEggPSAxMDAwO1xuICAgIHZhciBJTUFHRV9QQURESU5HID0gMTtcbiAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgdmFyIGN1cnIgPSBjb250ZXh0LmlDdXJyO1xuICAgIHZhciBpRmlyc3RTYXZlID0gY3VyciAtIDM7XG4gICAgdmFyIGlGaXJzdFRyYW5zZm9ybSA9IGN1cnIgLSAyO1xuICAgIHZhciBpRmlyc3RQSUlYTyA9IGN1cnIgLSAxO1xuICAgIHZhciBjb3VudCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgLSBpRmlyc3RTYXZlKSAvIDQpLCBNQVhfSU1BR0VTX0lOX0lOTElORV9JTUFHRVNfQkxPQ0spO1xuXG4gICAgaWYgKGNvdW50IDwgTUlOX0lNQUdFU19JTl9JTkxJTkVfSU1BR0VTX0JMT0NLKSB7XG4gICAgICByZXR1cm4gaSAtIChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuICAgIH1cblxuICAgIHZhciBtYXhYID0gMDtcbiAgICB2YXIgbWFwID0gW10sXG4gICAgICAgIG1heExpbmVIZWlnaHQgPSAwO1xuICAgIHZhciBjdXJyZW50WCA9IElNQUdFX1BBRERJTkcsXG4gICAgICAgIGN1cnJlbnRZID0gSU1BR0VfUEFERElORztcbiAgICB2YXIgcTtcblxuICAgIGZvciAocSA9IDA7IHEgPCBjb3VudDsgcSsrKSB7XG4gICAgICB2YXIgdHJhbnNmb3JtID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybSArIChxIDw8IDIpXTtcbiAgICAgIHZhciBpbWcgPSBhcmdzQXJyYXlbaUZpcnN0UElJWE8gKyAocSA8PCAyKV1bMF07XG5cbiAgICAgIGlmIChjdXJyZW50WCArIGltZy53aWR0aCA+IE1BWF9XSURUSCkge1xuICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgY3VycmVudFgpO1xuICAgICAgICBjdXJyZW50WSArPSBtYXhMaW5lSGVpZ2h0ICsgMiAqIElNQUdFX1BBRERJTkc7XG4gICAgICAgIGN1cnJlbnRYID0gMDtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IDA7XG4gICAgICB9XG5cbiAgICAgIG1hcC5wdXNoKHtcbiAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgeTogY3VycmVudFksXG4gICAgICAgIHc6IGltZy53aWR0aCxcbiAgICAgICAgaDogaW1nLmhlaWdodFxuICAgICAgfSk7XG4gICAgICBjdXJyZW50WCArPSBpbWcud2lkdGggKyAyICogSU1BR0VfUEFERElORztcbiAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCBpbWcuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICB2YXIgaW1nV2lkdGggPSBNYXRoLm1heChtYXhYLCBjdXJyZW50WCkgKyBJTUFHRV9QQURESU5HO1xuICAgIHZhciBpbWdIZWlnaHQgPSBjdXJyZW50WSArIG1heExpbmVIZWlnaHQgKyBJTUFHRV9QQURESU5HO1xuICAgIHZhciBpbWdEYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGltZ1dpZHRoICogaW1nSGVpZ2h0ICogNCk7XG4gICAgdmFyIGltZ1Jvd1NpemUgPSBpbWdXaWR0aCA8PCAyO1xuXG4gICAgZm9yIChxID0gMDsgcSA8IGNvdW50OyBxKyspIHtcbiAgICAgIHZhciBkYXRhID0gYXJnc0FycmF5W2lGaXJzdFBJSVhPICsgKHEgPDwgMildWzBdLmRhdGE7XG4gICAgICB2YXIgcm93U2l6ZSA9IG1hcFtxXS53IDw8IDI7XG4gICAgICB2YXIgZGF0YU9mZnNldCA9IDA7XG4gICAgICB2YXIgb2Zmc2V0ID0gbWFwW3FdLnggKyBtYXBbcV0ueSAqIGltZ1dpZHRoIDw8IDI7XG4gICAgICBpbWdEYXRhLnNldChkYXRhLnN1YmFycmF5KDAsIHJvd1NpemUpLCBvZmZzZXQgLSBpbWdSb3dTaXplKTtcblxuICAgICAgZm9yICh2YXIgayA9IDAsIGtrID0gbWFwW3FdLmg7IGsgPCBrazsgaysrKSB7XG4gICAgICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoZGF0YU9mZnNldCwgZGF0YU9mZnNldCArIHJvd1NpemUpLCBvZmZzZXQpO1xuICAgICAgICBkYXRhT2Zmc2V0ICs9IHJvd1NpemU7XG4gICAgICAgIG9mZnNldCArPSBpbWdSb3dTaXplO1xuICAgICAgfVxuXG4gICAgICBpbWdEYXRhLnNldChkYXRhLnN1YmFycmF5KGRhdGFPZmZzZXQgLSByb3dTaXplLCBkYXRhT2Zmc2V0KSwgb2Zmc2V0KTtcblxuICAgICAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgICAgIGRhdGFbb2Zmc2V0IC0gNF0gPSBkYXRhW29mZnNldF07XG4gICAgICAgIGRhdGFbb2Zmc2V0IC0gM10gPSBkYXRhW29mZnNldCArIDFdO1xuICAgICAgICBkYXRhW29mZnNldCAtIDJdID0gZGF0YVtvZmZzZXQgKyAyXTtcbiAgICAgICAgZGF0YVtvZmZzZXQgLSAxXSA9IGRhdGFbb2Zmc2V0ICsgM107XG4gICAgICAgIGRhdGFbb2Zmc2V0ICsgcm93U2l6ZV0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSA0XTtcbiAgICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgMV0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAzXTtcbiAgICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgMl0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAyXTtcbiAgICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgM10gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAxXTtcbiAgICAgICAgb2Zmc2V0IC09IGltZ1Jvd1NpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCk7XG4gICAgYXJnc0FycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIFt7XG4gICAgICB3aWR0aDogaW1nV2lkdGgsXG4gICAgICBoZWlnaHQ6IGltZ0hlaWdodCxcbiAgICAgIGtpbmQ6IF91dGlsLkltYWdlS2luZC5SR0JBXzMyQlBQLFxuICAgICAgZGF0YTogaW1nRGF0YVxuICAgIH0sIG1hcF0pO1xuICAgIHJldHVybiBpRmlyc3RTYXZlICsgMTtcbiAgfSk7XG4gIGFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LCBfdXRpbC5PUFMucmVzdG9yZV0sIG51bGwsIGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZU1hc2tHcm91cChjb250ZXh0LCBpKSB7XG4gICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXk7XG4gICAgdmFyIGlGaXJzdFNhdmUgPSBjb250ZXh0LmlDdXJyIC0gMztcbiAgICB2YXIgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG5cbiAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnNhdmU7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy50cmFuc2Zvcm07XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgaXRlcmF0ZUltYWdlTWFza0dyb3VwIC0gaW52YWxpZCBwb3M6ICR7cG9zfWApO1xuICB9LCBmdW5jdGlvbiBmb3VuZEltYWdlTWFza0dyb3VwKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgTUlOX0lNQUdFU19JTl9NQVNLU19CTE9DSyA9IDEwO1xuICAgIHZhciBNQVhfSU1BR0VTX0lOX01BU0tTX0JMT0NLID0gMTAwO1xuICAgIHZhciBNQVhfU0FNRV9JTUFHRVNfSU5fTUFTS1NfQkxPQ0sgPSAxMDAwO1xuICAgIHZhciBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgICB2YXIgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gICAgdmFyIGlGaXJzdFNhdmUgPSBjdXJyIC0gMztcbiAgICB2YXIgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7XG4gICAgdmFyIGlGaXJzdFBJTVhPID0gY3VyciAtIDE7XG4gICAgdmFyIGNvdW50ID0gTWF0aC5mbG9vcigoaSAtIGlGaXJzdFNhdmUpIC8gNCk7XG4gICAgY291bnQgPSBoYW5kbGVQYWludFNvbGlkQ29sb3JJbWFnZU1hc2soaUZpcnN0U2F2ZSwgY291bnQsIGZuQXJyYXksIGFyZ3NBcnJheSk7XG5cbiAgICBpZiAoY291bnQgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7XG4gICAgICByZXR1cm4gaSAtIChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuICAgIH1cblxuICAgIHZhciBxO1xuICAgIHZhciBpc1NhbWVJbWFnZSA9IGZhbHNlO1xuICAgIHZhciBpVHJhbnNmb3JtLCB0cmFuc2Zvcm1BcmdzO1xuICAgIHZhciBmaXJzdFBJTVhPQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RQSU1YT11bMF07XG5cbiAgICBpZiAoYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMV0gPT09IDAgJiYgYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMl0gPT09IDApIHtcbiAgICAgIGlzU2FtZUltYWdlID0gdHJ1ZTtcbiAgICAgIHZhciBmaXJzdFRyYW5zZm9ybUFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVswXTtcbiAgICAgIHZhciBmaXJzdFRyYW5zZm9ybUFyZzMgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVszXTtcbiAgICAgIGlUcmFuc2Zvcm0gPSBpRmlyc3RUcmFuc2Zvcm0gKyA0O1xuICAgICAgdmFyIGlQSU1YTyA9IGlGaXJzdFBJTVhPICsgNDtcblxuICAgICAgZm9yIChxID0gMTsgcSA8IGNvdW50OyBxKyssIGlUcmFuc2Zvcm0gKz0gNCwgaVBJTVhPICs9IDQpIHtcbiAgICAgICAgdHJhbnNmb3JtQXJncyA9IGFyZ3NBcnJheVtpVHJhbnNmb3JtXTtcblxuICAgICAgICBpZiAoYXJnc0FycmF5W2lQSU1YT11bMF0gIT09IGZpcnN0UElNWE9BcmcwIHx8IHRyYW5zZm9ybUFyZ3NbMF0gIT09IGZpcnN0VHJhbnNmb3JtQXJnMCB8fCB0cmFuc2Zvcm1BcmdzWzFdICE9PSAwIHx8IHRyYW5zZm9ybUFyZ3NbMl0gIT09IDAgfHwgdHJhbnNmb3JtQXJnc1szXSAhPT0gZmlyc3RUcmFuc2Zvcm1BcmczKSB7XG4gICAgICAgICAgaWYgKHEgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7XG4gICAgICAgICAgICBpc1NhbWVJbWFnZSA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb3VudCA9IHE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNTYW1lSW1hZ2UpIHtcbiAgICAgIGNvdW50ID0gTWF0aC5taW4oY291bnQsIE1BWF9TQU1FX0lNQUdFU19JTl9NQVNLU19CTE9DSyk7XG4gICAgICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDIpO1xuICAgICAgaVRyYW5zZm9ybSA9IGlGaXJzdFRyYW5zZm9ybTtcblxuICAgICAgZm9yIChxID0gMDsgcSA8IGNvdW50OyBxKyssIGlUcmFuc2Zvcm0gKz0gNCkge1xuICAgICAgICB0cmFuc2Zvcm1BcmdzID0gYXJnc0FycmF5W2lUcmFuc2Zvcm1dO1xuICAgICAgICBwb3NpdGlvbnNbcSA8PCAxXSA9IHRyYW5zZm9ybUFyZ3NbNF07XG4gICAgICAgIHBvc2l0aW9uc1socSA8PCAxKSArIDFdID0gdHJhbnNmb3JtQXJnc1s1XTtcbiAgICAgIH1cblxuICAgICAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KTtcbiAgICAgIGFyZ3NBcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBbZmlyc3RQSU1YT0FyZzAsIGZpcnN0VHJhbnNmb3JtQXJnMCwgZmlyc3RUcmFuc2Zvcm1BcmczLCBwb3NpdGlvbnNdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSBNYXRoLm1pbihjb3VudCwgTUFYX0lNQUdFU19JTl9NQVNLU19CTE9DSyk7XG4gICAgICB2YXIgaW1hZ2VzID0gW107XG5cbiAgICAgIGZvciAocSA9IDA7IHEgPCBjb3VudDsgcSsrKSB7XG4gICAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtICsgKHEgPDwgMildO1xuICAgICAgICB2YXIgbWFza1BhcmFtcyA9IGFyZ3NBcnJheVtpRmlyc3RQSU1YTyArIChxIDw8IDIpXVswXTtcbiAgICAgICAgaW1hZ2VzLnB1c2goe1xuICAgICAgICAgIGRhdGE6IG1hc2tQYXJhbXMuZGF0YSxcbiAgICAgICAgICB3aWR0aDogbWFza1BhcmFtcy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IG1hc2tQYXJhbXMuaGVpZ2h0LFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQXJnc1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXApO1xuICAgICAgYXJnc0FycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIFtpbWFnZXNdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7XG4gIH0pO1xuICBhZGRTdGF0ZShJbml0aWFsU3RhdGUsIFtfdXRpbC5PUFMuc2F2ZSwgX3V0aWwuT1BTLnRyYW5zZm9ybSwgX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LCBfdXRpbC5PUFMucmVzdG9yZV0sIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5O1xuICAgIHZhciBpRmlyc3RUcmFuc2Zvcm0gPSBjb250ZXh0LmlDdXJyIC0gMjtcbiAgICByZXR1cm4gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMV0gPT09IDAgJiYgYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMl0gPT09IDA7XG4gIH0sIGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZUdyb3VwKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgdmFyIGlGaXJzdFNhdmUgPSBjb250ZXh0LmlDdXJyIC0gMztcbiAgICB2YXIgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG5cbiAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnNhdmU7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaWYgKGZuQXJyYXlbaV0gIT09IF91dGlsLk9QUy50cmFuc2Zvcm0pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaUZpcnN0VHJhbnNmb3JtID0gY29udGV4dC5pQ3VyciAtIDI7XG4gICAgICAgIHZhciBmaXJzdFRyYW5zZm9ybUFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVswXTtcbiAgICAgICAgdmFyIGZpcnN0VHJhbnNmb3JtQXJnMyA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzNdO1xuXG4gICAgICAgIGlmIChhcmdzQXJyYXlbaV1bMF0gIT09IGZpcnN0VHJhbnNmb3JtQXJnMCB8fCBhcmdzQXJyYXlbaV1bMV0gIT09IDAgfHwgYXJnc0FycmF5W2ldWzJdICE9PSAwIHx8IGFyZ3NBcnJheVtpXVszXSAhPT0gZmlyc3RUcmFuc2Zvcm1BcmczKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaWYgKGZuQXJyYXlbaV0gIT09IF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpRmlyc3RQSVhPID0gY29udGV4dC5pQ3VyciAtIDE7XG4gICAgICAgIHZhciBmaXJzdFBJWE9BcmcwID0gYXJnc0FycmF5W2lGaXJzdFBJWE9dWzBdO1xuXG4gICAgICAgIGlmIChhcmdzQXJyYXlbaV1bMF0gIT09IGZpcnN0UElYT0FyZzApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnJlc3RvcmU7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbiAgfSwgZnVuY3Rpb24gKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgTUlOX0lNQUdFU19JTl9CTE9DSyA9IDM7XG4gICAgdmFyIE1BWF9JTUFHRVNfSU5fQkxPQ0sgPSAxMDAwO1xuICAgIHZhciBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgICB2YXIgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gICAgdmFyIGlGaXJzdFNhdmUgPSBjdXJyIC0gMztcbiAgICB2YXIgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7XG4gICAgdmFyIGlGaXJzdFBJWE8gPSBjdXJyIC0gMTtcbiAgICB2YXIgZmlyc3RQSVhPQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RQSVhPXVswXTtcbiAgICB2YXIgZmlyc3RUcmFuc2Zvcm1BcmcwID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMF07XG4gICAgdmFyIGZpcnN0VHJhbnNmb3JtQXJnMyA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzNdO1xuICAgIHZhciBjb3VudCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgLSBpRmlyc3RTYXZlKSAvIDQpLCBNQVhfSU1BR0VTX0lOX0JMT0NLKTtcblxuICAgIGlmIChjb3VudCA8IE1JTl9JTUFHRVNfSU5fQkxPQ0spIHtcbiAgICAgIHJldHVybiBpIC0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG4gICAgfVxuXG4gICAgdmFyIHBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAyKTtcbiAgICB2YXIgaVRyYW5zZm9ybSA9IGlGaXJzdFRyYW5zZm9ybTtcblxuICAgIGZvciAodmFyIHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7XG4gICAgICB2YXIgdHJhbnNmb3JtQXJncyA9IGFyZ3NBcnJheVtpVHJhbnNmb3JtXTtcbiAgICAgIHBvc2l0aW9uc1txIDw8IDFdID0gdHJhbnNmb3JtQXJnc1s0XTtcbiAgICAgIHBvc2l0aW9uc1socSA8PCAxKSArIDFdID0gdHJhbnNmb3JtQXJnc1s1XTtcbiAgICB9XG5cbiAgICB2YXIgYXJncyA9IFtmaXJzdFBJWE9BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzAsIGZpcnN0VHJhbnNmb3JtQXJnMywgcG9zaXRpb25zXTtcbiAgICBmbkFycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCk7XG4gICAgYXJnc0FycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIGFyZ3MpO1xuICAgIHJldHVybiBpRmlyc3RTYXZlICsgMTtcbiAgfSk7XG4gIGFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5iZWdpblRleHQsIF91dGlsLk9QUy5zZXRGb250LCBfdXRpbC5PUFMuc2V0VGV4dE1hdHJpeCwgX3V0aWwuT1BTLnNob3dUZXh0LCBfdXRpbC5PUFMuZW5kVGV4dF0sIG51bGwsIGZ1bmN0aW9uIGl0ZXJhdGVTaG93VGV4dEdyb3VwKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgdmFyIGlGaXJzdFNhdmUgPSBjb250ZXh0LmlDdXJyIC0gNDtcbiAgICB2YXIgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDU7XG5cbiAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLmJlZ2luVGV4dDtcblxuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnNldEZvbnQ7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zZXRUZXh0TWF0cml4O1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIGlmIChmbkFycmF5W2ldICE9PSBfdXRpbC5PUFMuc2hvd1RleHQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaUZpcnN0U2V0Rm9udCA9IGNvbnRleHQuaUN1cnIgLSAzO1xuICAgICAgICB2YXIgZmlyc3RTZXRGb250QXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVswXTtcbiAgICAgICAgdmFyIGZpcnN0U2V0Rm9udEFyZzEgPSBhcmdzQXJyYXlbaUZpcnN0U2V0Rm9udF1bMV07XG5cbiAgICAgICAgaWYgKGFyZ3NBcnJheVtpXVswXSAhPT0gZmlyc3RTZXRGb250QXJnMCB8fCBhcmdzQXJyYXlbaV1bMV0gIT09IGZpcnN0U2V0Rm9udEFyZzEpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgY2FzZSA0OlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLmVuZFRleHQ7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbiAgfSwgZnVuY3Rpb24gKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgTUlOX0NIQVJTX0lOX0JMT0NLID0gMztcbiAgICB2YXIgTUFYX0NIQVJTX0lOX0JMT0NLID0gMTAwMDtcbiAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgdmFyIGN1cnIgPSBjb250ZXh0LmlDdXJyO1xuICAgIHZhciBpRmlyc3RCZWdpblRleHQgPSBjdXJyIC0gNDtcbiAgICB2YXIgaUZpcnN0U2V0Rm9udCA9IGN1cnIgLSAzO1xuICAgIHZhciBpRmlyc3RTZXRUZXh0TWF0cml4ID0gY3VyciAtIDI7XG4gICAgdmFyIGlGaXJzdFNob3dUZXh0ID0gY3VyciAtIDE7XG4gICAgdmFyIGlGaXJzdEVuZFRleHQgPSBjdXJyO1xuICAgIHZhciBmaXJzdFNldEZvbnRBcmcwID0gYXJnc0FycmF5W2lGaXJzdFNldEZvbnRdWzBdO1xuICAgIHZhciBmaXJzdFNldEZvbnRBcmcxID0gYXJnc0FycmF5W2lGaXJzdFNldEZvbnRdWzFdO1xuICAgIHZhciBjb3VudCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgLSBpRmlyc3RCZWdpblRleHQpIC8gNSksIE1BWF9DSEFSU19JTl9CTE9DSyk7XG5cbiAgICBpZiAoY291bnQgPCBNSU5fQ0hBUlNfSU5fQkxPQ0spIHtcbiAgICAgIHJldHVybiBpIC0gKGkgLSBpRmlyc3RCZWdpblRleHQpICUgNTtcbiAgICB9XG5cbiAgICB2YXIgaUZpcnN0ID0gaUZpcnN0QmVnaW5UZXh0O1xuXG4gICAgaWYgKGlGaXJzdEJlZ2luVGV4dCA+PSA0ICYmIGZuQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gNF0gPT09IGZuQXJyYXlbaUZpcnN0U2V0Rm9udF0gJiYgZm5BcnJheVtpRmlyc3RCZWdpblRleHQgLSAzXSA9PT0gZm5BcnJheVtpRmlyc3RTZXRUZXh0TWF0cml4XSAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDJdID09PSBmbkFycmF5W2lGaXJzdFNob3dUZXh0XSAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDFdID09PSBmbkFycmF5W2lGaXJzdEVuZFRleHRdICYmIGFyZ3NBcnJheVtpRmlyc3RCZWdpblRleHQgLSA0XVswXSA9PT0gZmlyc3RTZXRGb250QXJnMCAmJiBhcmdzQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gNF1bMV0gPT09IGZpcnN0U2V0Rm9udEFyZzEpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICBpRmlyc3QgLT0gNTtcbiAgICB9XG5cbiAgICB2YXIgaUVuZFRleHQgPSBpRmlyc3QgKyA0O1xuXG4gICAgZm9yICh2YXIgcSA9IDE7IHEgPCBjb3VudDsgcSsrKSB7XG4gICAgICBmbkFycmF5LnNwbGljZShpRW5kVGV4dCwgMyk7XG4gICAgICBhcmdzQXJyYXkuc3BsaWNlKGlFbmRUZXh0LCAzKTtcbiAgICAgIGlFbmRUZXh0ICs9IDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlFbmRUZXh0ICsgMTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gUXVldWVPcHRpbWl6ZXIocXVldWUpIHtcbiAgICB0aGlzLnF1ZXVlID0gcXVldWU7XG4gICAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgaUN1cnI6IDAsXG4gICAgICBmbkFycmF5OiBxdWV1ZS5mbkFycmF5LFxuICAgICAgYXJnc0FycmF5OiBxdWV1ZS5hcmdzQXJyYXlcbiAgICB9O1xuICAgIHRoaXMubWF0Y2ggPSBudWxsO1xuICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9IDA7XG4gIH1cblxuICBRdWV1ZU9wdGltaXplci5wcm90b3R5cGUgPSB7XG4gICAgX29wdGltaXplKCkge1xuICAgICAgY29uc3QgZm5BcnJheSA9IHRoaXMucXVldWUuZm5BcnJheTtcbiAgICAgIGxldCBpID0gdGhpcy5sYXN0UHJvY2Vzc2VkLFxuICAgICAgICAgIGlpID0gZm5BcnJheS5sZW5ndGg7XG4gICAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgbGV0IG1hdGNoID0gdGhpcy5tYXRjaDtcblxuICAgICAgaWYgKCFzdGF0ZSAmJiAhbWF0Y2ggJiYgaSArIDEgPT09IGlpICYmICFJbml0aWFsU3RhdGVbZm5BcnJheVtpXV0pIHtcbiAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gaWk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgICAgd2hpbGUgKGkgPCBpaSkge1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCBpdGVyYXRlID0gKDAsIG1hdGNoLml0ZXJhdGVGbikoY29udGV4dCwgaSk7XG5cbiAgICAgICAgICBpZiAoaXRlcmF0ZSkge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaSA9ICgwLCBtYXRjaC5wcm9jZXNzRm4pKGNvbnRleHQsIGkgKyAxKTtcbiAgICAgICAgICBpaSA9IGZuQXJyYXkubGVuZ3RoO1xuICAgICAgICAgIG1hdGNoID0gbnVsbDtcbiAgICAgICAgICBzdGF0ZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoaSA+PSBpaSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSAoc3RhdGUgfHwgSW5pdGlhbFN0YXRlKVtmbkFycmF5W2ldXTtcblxuICAgICAgICBpZiAoIXN0YXRlIHx8IEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5pQ3VyciA9IGk7XG4gICAgICAgIGkrKztcblxuICAgICAgICBpZiAoc3RhdGUuY2hlY2tGbiAmJiAhKDAsIHN0YXRlLmNoZWNrRm4pKGNvbnRleHQpKSB7XG4gICAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0Y2ggPSBzdGF0ZTtcbiAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICB0aGlzLm1hdGNoID0gbWF0Y2g7XG4gICAgICB0aGlzLmxhc3RQcm9jZXNzZWQgPSBpO1xuICAgIH0sXG5cbiAgICBwdXNoKGZuLCBhcmdzKSB7XG4gICAgICB0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChmbik7XG4gICAgICB0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKGFyZ3MpO1xuXG4gICAgICB0aGlzLl9vcHRpbWl6ZSgpO1xuICAgIH0sXG5cbiAgICBmbHVzaCgpIHtcbiAgICAgIHdoaWxlICh0aGlzLm1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9ICgwLCB0aGlzLm1hdGNoLnByb2Nlc3NGbikodGhpcy5jb250ZXh0LCBsZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fb3B0aW1pemUoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzZXQoKSB7XG4gICAgICB0aGlzLnN0YXRlID0gbnVsbDtcbiAgICAgIHRoaXMubWF0Y2ggPSBudWxsO1xuICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gMDtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIFF1ZXVlT3B0aW1pemVyO1xufSgpO1xuXG52YXIgTnVsbE9wdGltaXplciA9IGZ1bmN0aW9uIE51bGxPcHRpbWl6ZXJDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBOdWxsT3B0aW1pemVyKHF1ZXVlKSB7XG4gICAgdGhpcy5xdWV1ZSA9IHF1ZXVlO1xuICB9XG5cbiAgTnVsbE9wdGltaXplci5wcm90b3R5cGUgPSB7XG4gICAgcHVzaChmbiwgYXJncykge1xuICAgICAgdGhpcy5xdWV1ZS5mbkFycmF5LnB1c2goZm4pO1xuICAgICAgdGhpcy5xdWV1ZS5hcmdzQXJyYXkucHVzaChhcmdzKTtcbiAgICB9LFxuXG4gICAgZmx1c2goKSB7fSxcblxuICAgIHJlc2V0KCkge31cblxuICB9O1xuICByZXR1cm4gTnVsbE9wdGltaXplcjtcbn0oKTtcblxudmFyIE9wZXJhdG9yTGlzdCA9IGZ1bmN0aW9uIE9wZXJhdG9yTGlzdENsb3N1cmUoKSB7XG4gIHZhciBDSFVOS19TSVpFID0gMTAwMDtcbiAgdmFyIENIVU5LX1NJWkVfQUJPVVQgPSBDSFVOS19TSVpFIC0gNTtcblxuICBmdW5jdGlvbiBPcGVyYXRvckxpc3QoaW50ZW50LCBzdHJlYW1TaW5rLCBwYWdlSW5kZXgpIHtcbiAgICB0aGlzLl9zdHJlYW1TaW5rID0gc3RyZWFtU2luaztcbiAgICB0aGlzLmZuQXJyYXkgPSBbXTtcbiAgICB0aGlzLmFyZ3NBcnJheSA9IFtdO1xuXG4gICAgaWYgKHN0cmVhbVNpbmsgJiYgaW50ZW50ICE9PSBcIm9wbGlzdFwiKSB7XG4gICAgICB0aGlzLm9wdGltaXplciA9IG5ldyBRdWV1ZU9wdGltaXplcih0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpbWl6ZXIgPSBuZXcgTnVsbE9wdGltaXplcih0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fdG90YWxMZW5ndGggPSAwO1xuICAgIHRoaXMucGFnZUluZGV4ID0gcGFnZUluZGV4O1xuICAgIHRoaXMuaW50ZW50ID0gaW50ZW50O1xuICAgIHRoaXMud2VpZ2h0ID0gMDtcbiAgICB0aGlzLl9yZXNvbHZlZCA9IHN0cmVhbVNpbmsgPyBudWxsIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBPcGVyYXRvckxpc3QucHJvdG90eXBlID0ge1xuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcmdzQXJyYXkubGVuZ3RoO1xuICAgIH0sXG5cbiAgICBnZXQgcmVhZHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWQgfHwgdGhpcy5fc3RyZWFtU2luay5yZWFkeTtcbiAgICB9LFxuXG4gICAgZ2V0IHRvdGFsTGVuZ3RoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RvdGFsTGVuZ3RoICsgdGhpcy5sZW5ndGg7XG4gICAgfSxcblxuICAgIGFkZE9wKGZuLCBhcmdzKSB7XG4gICAgICB0aGlzLm9wdGltaXplci5wdXNoKGZuLCBhcmdzKTtcbiAgICAgIHRoaXMud2VpZ2h0Kys7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TaW5rKSB7XG4gICAgICAgIGlmICh0aGlzLndlaWdodCA+PSBDSFVOS19TSVpFKSB7XG4gICAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMud2VpZ2h0ID49IENIVU5LX1NJWkVfQUJPVVQgJiYgKGZuID09PSBfdXRpbC5PUFMucmVzdG9yZSB8fCBmbiA9PT0gX3V0aWwuT1BTLmVuZFRleHQpKSB7XG4gICAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFkZERlcGVuZGVuY3koZGVwZW5kZW5jeSkge1xuICAgICAgaWYgKGRlcGVuZGVuY3kgaW4gdGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlcGVuZGVuY2llc1tkZXBlbmRlbmN5XSA9IHRydWU7XG4gICAgICB0aGlzLmFkZE9wKF91dGlsLk9QUy5kZXBlbmRlbmN5LCBbZGVwZW5kZW5jeV0pO1xuICAgIH0sXG5cbiAgICBhZGREZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwZW5kZW5jeShrZXkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRPcExpc3Qob3BMaXN0KSB7XG4gICAgICBpZiAoIShvcExpc3QgaW5zdGFuY2VvZiBPcGVyYXRvckxpc3QpKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnYWRkT3BMaXN0IC0gaWdub3JpbmcgaW52YWxpZCBcIm9wTGlzdFwiIHBhcmFtZXRlci4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGVwZW5kZW5jaWVzLCBvcExpc3QuZGVwZW5kZW5jaWVzKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gb3BMaXN0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgdGhpcy5hZGRPcChvcExpc3QuZm5BcnJheVtpXSwgb3BMaXN0LmFyZ3NBcnJheVtpXSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldElSKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm5BcnJheTogdGhpcy5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXk6IHRoaXMuYXJnc0FycmF5LFxuICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBnZXQgX3RyYW5zZmVycygpIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVycyA9IFtdO1xuICAgICAgY29uc3Qge1xuICAgICAgICBmbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXksXG4gICAgICAgIGxlbmd0aFxuICAgICAgfSA9IHRoaXM7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3dpdGNoIChmbkFycmF5W2ldKSB7XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzQXJyYXlbaV1bMF07XG4gICAgICAgICAgICA7XG5cbiAgICAgICAgICAgIGlmICghYXJnLmNhY2hlZCkge1xuICAgICAgICAgICAgICB0cmFuc2ZlcnMucHVzaChhcmcuZGF0YS5idWZmZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJhbnNmZXJzO1xuICAgIH0sXG5cbiAgICBmbHVzaChsYXN0Q2h1bmsgPSBmYWxzZSkge1xuICAgICAgdGhpcy5vcHRpbWl6ZXIuZmx1c2goKTtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgICAgdGhpcy5fdG90YWxMZW5ndGggKz0gbGVuZ3RoO1xuXG4gICAgICB0aGlzLl9zdHJlYW1TaW5rLmVucXVldWUoe1xuICAgICAgICBmbkFycmF5OiB0aGlzLmZuQXJyYXksXG4gICAgICAgIGFyZ3NBcnJheTogdGhpcy5hcmdzQXJyYXksXG4gICAgICAgIGxhc3RDaHVuayxcbiAgICAgICAgbGVuZ3RoXG4gICAgICB9LCAxLCB0aGlzLl90cmFuc2ZlcnMpO1xuXG4gICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB0aGlzLmZuQXJyYXkubGVuZ3RoID0gMDtcbiAgICAgIHRoaXMuYXJnc0FycmF5Lmxlbmd0aCA9IDA7XG4gICAgICB0aGlzLndlaWdodCA9IDA7XG4gICAgICB0aGlzLm9wdGltaXplci5yZXNldCgpO1xuICAgIH1cblxuICB9O1xuICByZXR1cm4gT3BlcmF0b3JMaXN0O1xufSgpO1xuXG5leHBvcnRzLk9wZXJhdG9yTGlzdCA9IE9wZXJhdG9yTGlzdDtcblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QYXJ0aWFsRXZhbHVhdG9yID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NtYXAgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI4KTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG52YXIgX2VuY29kaW5ncyA9IF9fd19wZGZqc19yZXF1aXJlX18oMzIpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG52YXIgX3VuaWNvZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM1KTtcblxudmFyIF9zdGFuZGFyZF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oMzQpO1xuXG52YXIgX3BhdHRlcm4gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM4KTtcblxudmFyIF9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDExKTtcblxudmFyIF9iaWRpID0gX193X3BkZmpzX3JlcXVpcmVfXygzOSk7XG5cbnZhciBfY29sb3JzcGFjZSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjMpO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTIpO1xuXG52YXIgX2dseXBobGlzdCA9IF9fd19wZGZqc19yZXF1aXJlX18oMzMpO1xuXG52YXIgX21ldHJpY3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQwKTtcblxudmFyIF9mdW5jdGlvbiA9IF9fd19wZGZqc19yZXF1aXJlX18oNDEpO1xuXG52YXIgX2ltYWdlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygyNCk7XG5cbnZhciBfbXVybXVyaGFzaCA9IF9fd19wZGZqc19yZXF1aXJlX18oNDMpO1xuXG52YXIgX29wZXJhdG9yX2xpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI2KTtcblxudmFyIF9pbWFnZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNDQpO1xuXG52YXIgUGFydGlhbEV2YWx1YXRvciA9IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JDbG9zdXJlKCkge1xuICBjb25zdCBEZWZhdWx0UGFydGlhbEV2YWx1YXRvck9wdGlvbnMgPSB7XG4gICAgbWF4SW1hZ2VTaXplOiAtMSxcbiAgICBkaXNhYmxlRm9udEZhY2U6IGZhbHNlLFxuICAgIGlnbm9yZUVycm9yczogZmFsc2UsXG4gICAgaXNFdmFsU3VwcG9ydGVkOiB0cnVlLFxuICAgIGZvbnRFeHRyYVByb3BlcnRpZXM6IGZhbHNlXG4gIH07XG5cbiAgZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcih7XG4gICAgeHJlZixcbiAgICBoYW5kbGVyLFxuICAgIHBhZ2VJbmRleCxcbiAgICBpZEZhY3RvcnksXG4gICAgZm9udENhY2hlLFxuICAgIGJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICBvcHRpb25zID0gbnVsbCxcbiAgICBwZGZGdW5jdGlvbkZhY3RvcnlcbiAgfSkge1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICB0aGlzLmlkRmFjdG9yeSA9IGlkRmFjdG9yeTtcbiAgICB0aGlzLmZvbnRDYWNoZSA9IGZvbnRDYWNoZTtcbiAgICB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUgPSBidWlsdEluQ01hcENhY2hlO1xuICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSA9IGdsb2JhbEltYWdlQ2FjaGU7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBEZWZhdWx0UGFydGlhbEV2YWx1YXRvck9wdGlvbnM7XG4gICAgdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkgPSBwZGZGdW5jdGlvbkZhY3Rvcnk7XG4gICAgdGhpcy5wYXJzaW5nVHlwZTNGb250ID0gZmFsc2U7XG5cbiAgICB0aGlzLmZldGNoQnVpbHRJbkNNYXAgPSBhc3luYyBuYW1lID0+IHtcbiAgICAgIGlmICh0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuaGFzKG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuZ2V0KG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWFkYWJsZVN0cmVhbSA9IHRoaXMuaGFuZGxlci5zZW5kV2l0aFN0cmVhbShcIkZldGNoQnVpbHRJbkNNYXBcIiwge1xuICAgICAgICBuYW1lXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gcHVtcCgpIHtcbiAgICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZG9uZVxuICAgICAgICAgIH0pIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICBwdW1wKCk7XG4gICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1bXAoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGF0YS5jb21wcmVzc2lvblR5cGUgIT09IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSkge1xuICAgICAgICB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuc2V0KG5hbWUsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIFRJTUVfU0xPVF9EVVJBVElPTl9NUyA9IDIwO1xuICB2YXIgQ0hFQ0tfVElNRV9FVkVSWSA9IDEwMDtcblxuICBmdW5jdGlvbiBUaW1lU2xvdE1hbmFnZXIoKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgVGltZVNsb3RNYW5hZ2VyLnByb3RvdHlwZSA9IHtcbiAgICBjaGVjazogZnVuY3Rpb24gVGltZVNsb3RNYW5hZ2VyX2NoZWNrKCkge1xuICAgICAgaWYgKCsrdGhpcy5jaGVja2VkIDwgQ0hFQ0tfVElNRV9FVkVSWSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hlY2tlZCA9IDA7XG4gICAgICByZXR1cm4gdGhpcy5lbmRUaW1lIDw9IERhdGUubm93KCk7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gVGltZVNsb3RNYW5hZ2VyX3Jlc2V0KCkge1xuICAgICAgdGhpcy5lbmRUaW1lID0gRGF0ZS5ub3coKSArIFRJTUVfU0xPVF9EVVJBVElPTl9NUztcbiAgICAgIHRoaXMuY2hlY2tlZCA9IDA7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUJsZW5kTW9kZSh2YWx1ZSwgcGFyc2luZ0FycmF5ID0gZmFsc2UpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHZhbHVlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgbWF5YmVCTSA9IG5vcm1hbGl6ZUJsZW5kTW9kZSh2YWx1ZVtpXSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKG1heWJlQk0pIHtcbiAgICAgICAgICByZXR1cm4gbWF5YmVCTTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYFVuc3VwcG9ydGVkIGJsZW5kIG1vZGUgQXJyYXk6ICR7dmFsdWV9YCk7XG4gICAgICByZXR1cm4gXCJzb3VyY2Utb3ZlclwiO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUpKSB7XG4gICAgICBpZiAocGFyc2luZ0FycmF5KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gXCJzb3VyY2Utb3ZlclwiO1xuICAgIH1cblxuICAgIHN3aXRjaCAodmFsdWUubmFtZSkge1xuICAgICAgY2FzZSBcIk5vcm1hbFwiOlxuICAgICAgY2FzZSBcIkNvbXBhdGlibGVcIjpcbiAgICAgICAgcmV0dXJuIFwic291cmNlLW92ZXJcIjtcblxuICAgICAgY2FzZSBcIk11bHRpcGx5XCI6XG4gICAgICAgIHJldHVybiBcIm11bHRpcGx5XCI7XG5cbiAgICAgIGNhc2UgXCJTY3JlZW5cIjpcbiAgICAgICAgcmV0dXJuIFwic2NyZWVuXCI7XG5cbiAgICAgIGNhc2UgXCJPdmVybGF5XCI6XG4gICAgICAgIHJldHVybiBcIm92ZXJsYXlcIjtcblxuICAgICAgY2FzZSBcIkRhcmtlblwiOlxuICAgICAgICByZXR1cm4gXCJkYXJrZW5cIjtcblxuICAgICAgY2FzZSBcIkxpZ2h0ZW5cIjpcbiAgICAgICAgcmV0dXJuIFwibGlnaHRlblwiO1xuXG4gICAgICBjYXNlIFwiQ29sb3JEb2RnZVwiOlxuICAgICAgICByZXR1cm4gXCJjb2xvci1kb2RnZVwiO1xuXG4gICAgICBjYXNlIFwiQ29sb3JCdXJuXCI6XG4gICAgICAgIHJldHVybiBcImNvbG9yLWJ1cm5cIjtcblxuICAgICAgY2FzZSBcIkhhcmRMaWdodFwiOlxuICAgICAgICByZXR1cm4gXCJoYXJkLWxpZ2h0XCI7XG5cbiAgICAgIGNhc2UgXCJTb2Z0TGlnaHRcIjpcbiAgICAgICAgcmV0dXJuIFwic29mdC1saWdodFwiO1xuXG4gICAgICBjYXNlIFwiRGlmZmVyZW5jZVwiOlxuICAgICAgICByZXR1cm4gXCJkaWZmZXJlbmNlXCI7XG5cbiAgICAgIGNhc2UgXCJFeGNsdXNpb25cIjpcbiAgICAgICAgcmV0dXJuIFwiZXhjbHVzaW9uXCI7XG5cbiAgICAgIGNhc2UgXCJIdWVcIjpcbiAgICAgICAgcmV0dXJuIFwiaHVlXCI7XG5cbiAgICAgIGNhc2UgXCJTYXR1cmF0aW9uXCI6XG4gICAgICAgIHJldHVybiBcInNhdHVyYXRpb25cIjtcblxuICAgICAgY2FzZSBcIkNvbG9yXCI6XG4gICAgICAgIHJldHVybiBcImNvbG9yXCI7XG5cbiAgICAgIGNhc2UgXCJMdW1pbm9zaXR5XCI6XG4gICAgICAgIHJldHVybiBcImx1bWlub3NpdHlcIjtcbiAgICB9XG5cbiAgICBpZiAocGFyc2luZ0FycmF5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAoMCwgX3V0aWwud2FybikoYFVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICR7dmFsdWUubmFtZX1gKTtcbiAgICByZXR1cm4gXCJzb3VyY2Utb3ZlclwiO1xuICB9XG5cbiAgdmFyIGRlZmVycmVkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHZhciBUSUxJTkdfUEFUVEVSTiA9IDEsXG4gICAgICBTSEFESU5HX1BBVFRFUk4gPSAyO1xuICBQYXJ0aWFsRXZhbHVhdG9yLnByb3RvdHlwZSA9IHtcbiAgICBjbG9uZShuZXdPcHRpb25zID0gRGVmYXVsdFBhcnRpYWxFdmFsdWF0b3JPcHRpb25zKSB7XG4gICAgICB2YXIgbmV3RXZhbHVhdG9yID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgIG5ld0V2YWx1YXRvci5vcHRpb25zID0gbmV3T3B0aW9ucztcbiAgICAgIHJldHVybiBuZXdFdmFsdWF0b3I7XG4gICAgfSxcblxuICAgIGhhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfaGFzQmxlbmRNb2RlcyhyZXNvdXJjZXMpIHtcbiAgICAgIGlmICghKHJlc291cmNlcyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb2Nlc3NlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGlmIChyZXNvdXJjZXMub2JqSWQpIHtcbiAgICAgICAgcHJvY2Vzc2VkW3Jlc291cmNlcy5vYmpJZF0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbm9kZXMgPSBbcmVzb3VyY2VzXSxcbiAgICAgICAgICB4cmVmID0gdGhpcy54cmVmO1xuXG4gICAgICB3aGlsZSAobm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXMuc2hpZnQoKTtcbiAgICAgICAgdmFyIGdyYXBoaWNTdGF0ZXMgPSBub2RlLmdldChcIkV4dEdTdGF0ZVwiKTtcblxuICAgICAgICBpZiAoZ3JhcGhpY1N0YXRlcyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgICAgICB2YXIgZ3JhcGhpY1N0YXRlc0tleXMgPSBncmFwaGljU3RhdGVzLmdldEtleXMoKTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGdyYXBoaWNTdGF0ZXNLZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGdyYXBoaWNTdGF0ZXNLZXlzW2ldO1xuICAgICAgICAgICAgbGV0IGdyYXBoaWNTdGF0ZSA9IGdyYXBoaWNTdGF0ZXMuZ2V0UmF3KGtleSk7XG5cbiAgICAgICAgICAgIGlmIChncmFwaGljU3RhdGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZFtncmFwaGljU3RhdGUudG9TdHJpbmcoKV0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhpY1N0YXRlID0geHJlZi5mZXRjaChncmFwaGljU3RhdGUpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgICAgaWYgKGdyYXBoaWNTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRbZ3JhcGhpY1N0YXRlLnRvU3RyaW5nKCldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRXh0R1N0YXRlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgaGFzQmxlbmRNb2RlcyAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogXCIke2V4fVwiLmApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEoZ3JhcGhpY1N0YXRlIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChncmFwaGljU3RhdGUub2JqSWQpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkW2dyYXBoaWNTdGF0ZS5vYmpJZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBibSA9IGdyYXBoaWNTdGF0ZS5nZXQoXCJCTVwiKTtcblxuICAgICAgICAgICAgaWYgKGJtIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgICAgICAgICBpZiAoYm0ubmFtZSAhPT0gXCJOb3JtYWxcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChibSAhPT0gdW5kZWZpbmVkICYmIEFycmF5LmlzQXJyYXkoYm0pKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IGJtLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoYm1bal0gaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5OYW1lICYmIGJtW2pdLm5hbWUgIT09IFwiTm9ybWFsXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4T2JqZWN0cyA9IG5vZGUuZ2V0KFwiWE9iamVjdFwiKTtcblxuICAgICAgICBpZiAoISh4T2JqZWN0cyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeE9iamVjdHNLZXlzID0geE9iamVjdHMuZ2V0S2V5cygpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHhPYmplY3RzS2V5cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0geE9iamVjdHNLZXlzW2ldO1xuICAgICAgICAgIHZhciB4T2JqZWN0ID0geE9iamVjdHMuZ2V0UmF3KGtleSk7XG5cbiAgICAgICAgICBpZiAoeE9iamVjdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZFt4T2JqZWN0LnRvU3RyaW5nKCldKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB4T2JqZWN0ID0geHJlZi5mZXRjaCh4T2JqZWN0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgIGlmICh4T2JqZWN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICAgICAgICAgICAgICBwcm9jZXNzZWRbeE9iamVjdC50b1N0cmluZygpXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclhPYmplY3RcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGhhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiBcIiR7ZXh9XCIuYCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeE9iamVjdCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh4T2JqZWN0LmRpY3Qub2JqSWQpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWRbeE9iamVjdC5kaWN0Lm9iaklkXSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvY2Vzc2VkW3hPYmplY3QuZGljdC5vYmpJZF0gPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB4UmVzb3VyY2VzID0geE9iamVjdC5kaWN0LmdldChcIlJlc291cmNlc1wiKTtcblxuICAgICAgICAgIGlmICh4UmVzb3VyY2VzIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCAmJiAoIXhSZXNvdXJjZXMub2JqSWQgfHwgIXByb2Nlc3NlZFt4UmVzb3VyY2VzLm9iaklkXSkpIHtcbiAgICAgICAgICAgIG5vZGVzLnB1c2goeFJlc291cmNlcyk7XG5cbiAgICAgICAgICAgIGlmICh4UmVzb3VyY2VzLm9iaklkKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZFt4UmVzb3VyY2VzLm9iaklkXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVpbGRGb3JtWE9iamVjdChyZXNvdXJjZXMsIHhvYmosIHNtYXNrLCBvcGVyYXRvckxpc3QsIHRhc2ssIGluaXRpYWxTdGF0ZSkge1xuICAgICAgdmFyIGRpY3QgPSB4b2JqLmRpY3Q7XG4gICAgICB2YXIgbWF0cml4ID0gZGljdC5nZXRBcnJheShcIk1hdHJpeFwiKTtcbiAgICAgIHZhciBiYm94ID0gZGljdC5nZXRBcnJheShcIkJCb3hcIik7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGJib3gpICYmIGJib3gubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIGJib3ggPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoYmJveCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYm94ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGdyb3VwID0gZGljdC5nZXQoXCJHcm91cFwiKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIHZhciBncm91cE9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF0cml4LFxuICAgICAgICAgIGJib3gsXG4gICAgICAgICAgc21hc2ssXG4gICAgICAgICAgaXNvbGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGtub2Nrb3V0OiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICB2YXIgZ3JvdXBTdWJ0eXBlID0gZ3JvdXAuZ2V0KFwiU1wiKTtcbiAgICAgICAgdmFyIGNvbG9yU3BhY2UgPSBudWxsO1xuXG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShncm91cFN1YnR5cGUsIFwiVHJhbnNwYXJlbmN5XCIpKSB7XG4gICAgICAgICAgZ3JvdXBPcHRpb25zLmlzb2xhdGVkID0gZ3JvdXAuZ2V0KFwiSVwiKSB8fCBmYWxzZTtcbiAgICAgICAgICBncm91cE9wdGlvbnMua25vY2tvdXQgPSBncm91cC5nZXQoXCJLXCIpIHx8IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKGdyb3VwLmhhcyhcIkNTXCIpKSB7XG4gICAgICAgICAgICBjb2xvclNwYWNlID0gYXdhaXQgdGhpcy5wYXJzZUNvbG9yU3BhY2Uoe1xuICAgICAgICAgICAgICBjczogZ3JvdXAuZ2V0KFwiQ1NcIiksXG4gICAgICAgICAgICAgIHJlc291cmNlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNtYXNrICYmIHNtYXNrLmJhY2tkcm9wKSB7XG4gICAgICAgICAgY29sb3JTcGFjZSA9IGNvbG9yU3BhY2UgfHwgX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtcbiAgICAgICAgICBzbWFzay5iYWNrZHJvcCA9IGNvbG9yU3BhY2UuZ2V0UmdiKHNtYXNrLmJhY2tkcm9wLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuYmVnaW5Hcm91cCwgW2dyb3VwT3B0aW9uc10pO1xuICAgICAgfVxuXG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbiwgW21hdHJpeCwgYmJveF0pO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgc3RyZWFtOiB4b2JqLFxuICAgICAgICB0YXNrLFxuICAgICAgICByZXNvdXJjZXM6IGRpY3QuZ2V0KFwiUmVzb3VyY2VzXCIpIHx8IHJlc291cmNlcyxcbiAgICAgICAgb3BlcmF0b3JMaXN0LFxuICAgICAgICBpbml0aWFsU3RhdGVcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQsIFtdKTtcblxuICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZEdyb3VwLCBbZ3JvdXBPcHRpb25zXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBidWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtcbiAgICAgIHJlc291cmNlcyxcbiAgICAgIGltYWdlLFxuICAgICAgaXNJbmxpbmUgPSBmYWxzZSxcbiAgICAgIG9wZXJhdG9yTGlzdCxcbiAgICAgIGNhY2hlS2V5LFxuICAgICAgbG9jYWxJbWFnZUNhY2hlXG4gICAgfSkge1xuICAgICAgdmFyIGRpY3QgPSBpbWFnZS5kaWN0O1xuICAgICAgY29uc3QgaW1hZ2VSZWYgPSBkaWN0Lm9iaklkO1xuICAgICAgdmFyIHcgPSBkaWN0LmdldChcIldpZHRoXCIsIFwiV1wiKTtcbiAgICAgIHZhciBoID0gZGljdC5nZXQoXCJIZWlnaHRcIiwgXCJIXCIpO1xuXG4gICAgICBpZiAoISh3ICYmICgwLCBfdXRpbC5pc051bSkodykpIHx8ICEoaCAmJiAoMCwgX3V0aWwuaXNOdW0pKGgpKSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy5cIik7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBtYXhJbWFnZVNpemUgPSB0aGlzLm9wdGlvbnMubWF4SW1hZ2VTaXplO1xuXG4gICAgICBpZiAobWF4SW1hZ2VTaXplICE9PSAtMSAmJiB3ICogaCA+IG1heEltYWdlU2l6ZSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuXCIpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW1hZ2VNYXNrID0gZGljdC5nZXQoXCJJbWFnZU1hc2tcIiwgXCJJTVwiKSB8fCBmYWxzZTtcbiAgICAgIHZhciBpbWdEYXRhLCBhcmdzO1xuXG4gICAgICBpZiAoaW1hZ2VNYXNrKSB7XG4gICAgICAgIHZhciB3aWR0aCA9IGRpY3QuZ2V0KFwiV2lkdGhcIiwgXCJXXCIpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gZGljdC5nZXQoXCJIZWlnaHRcIiwgXCJIXCIpO1xuICAgICAgICB2YXIgYml0U3RyaWRlTGVuZ3RoID0gd2lkdGggKyA3ID4+IDM7XG4gICAgICAgIHZhciBpbWdBcnJheSA9IGltYWdlLmdldEJ5dGVzKGJpdFN0cmlkZUxlbmd0aCAqIGhlaWdodCwgdHJ1ZSk7XG4gICAgICAgIHZhciBkZWNvZGUgPSBkaWN0LmdldEFycmF5KFwiRGVjb2RlXCIsIFwiRFwiKTtcbiAgICAgICAgaW1nRGF0YSA9IF9pbWFnZS5QREZJbWFnZS5jcmVhdGVNYXNrKHtcbiAgICAgICAgICBpbWdBcnJheSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06IGltYWdlIGluc3RhbmNlb2YgX3N0cmVhbS5EZWNvZGVTdHJlYW0sXG4gICAgICAgICAgaW52ZXJzZURlY29kZTogISFkZWNvZGUgJiYgZGVjb2RlWzBdID4gMFxuICAgICAgICB9KTtcbiAgICAgICAgaW1nRGF0YS5jYWNoZWQgPSAhIWNhY2hlS2V5O1xuICAgICAgICBhcmdzID0gW2ltZ0RhdGFdO1xuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCwgYXJncyk7XG5cbiAgICAgICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICAgICAgbG9jYWxJbWFnZUNhY2hlLnNldChjYWNoZUtleSwgaW1hZ2VSZWYsIHtcbiAgICAgICAgICAgIGZuOiBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LFxuICAgICAgICAgICAgYXJnc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgdmFyIHNvZnRNYXNrID0gZGljdC5nZXQoXCJTTWFza1wiLCBcIlNNXCIpIHx8IGZhbHNlO1xuICAgICAgdmFyIG1hc2sgPSBkaWN0LmdldChcIk1hc2tcIikgfHwgZmFsc2U7XG4gICAgICB2YXIgU01BTExfSU1BR0VfRElNRU5TSU9OUyA9IDIwMDtcblxuICAgICAgaWYgKGlzSW5saW5lICYmICFzb2Z0TWFzayAmJiAhbWFzayAmJiB3ICsgaCA8IFNNQUxMX0lNQUdFX0RJTUVOU0lPTlMpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VPYmogPSBuZXcgX2ltYWdlLlBERkltYWdlKHtcbiAgICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgICAgcmVzOiByZXNvdXJjZXMsXG4gICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgaXNJbmxpbmUsXG4gICAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5OiB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeVxuICAgICAgICB9KTtcbiAgICAgICAgaW1nRGF0YSA9IGltYWdlT2JqLmNyZWF0ZUltYWdlRGF0YSh0cnVlKTtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCwgW2ltZ0RhdGFdKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbGV0IG9iaklkID0gYGltZ18ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YCxcbiAgICAgICAgICBjYWNoZUdsb2JhbGx5ID0gZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpIHtcbiAgICAgICAgb2JqSWQgPSBgJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV90eXBlM3Jlc18ke29iaklkfWA7XG4gICAgICB9IGVsc2UgaWYgKGltYWdlUmVmKSB7XG4gICAgICAgIGNhY2hlR2xvYmFsbHkgPSB0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2hvdWxkQ2FjaGUoaW1hZ2VSZWYsIHRoaXMucGFnZUluZGV4KTtcblxuICAgICAgICBpZiAoY2FjaGVHbG9iYWxseSkge1xuICAgICAgICAgIG9iaklkID0gYCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fJHtvYmpJZH1gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KG9iaklkKTtcbiAgICAgIGFyZ3MgPSBbb2JqSWQsIHcsIGhdO1xuXG4gICAgICBjb25zdCBpbWdQcm9taXNlID0gX2ltYWdlLlBERkltYWdlLmJ1aWxkSW1hZ2Uoe1xuICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgIHJlczogcmVzb3VyY2VzLFxuICAgICAgICBpbWFnZSxcbiAgICAgICAgaXNJbmxpbmUsXG4gICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnlcbiAgICAgIH0pLnRoZW4oaW1hZ2VPYmogPT4ge1xuICAgICAgICBpbWdEYXRhID0gaW1hZ2VPYmouY3JlYXRlSW1hZ2VEYXRhKGZhbHNlKTtcblxuICAgICAgICBpZiAodGhpcy5wYXJzaW5nVHlwZTNGb250KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJjb21tb25vYmpcIiwgW29iaklkLCBcIkZvbnRUeXBlM1Jlc1wiLCBpbWdEYXRhXSwgW2ltZ0RhdGEuZGF0YS5idWZmZXJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChjYWNoZUdsb2JhbGx5KSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJjb21tb25vYmpcIiwgW29iaklkLCBcIkltYWdlXCIsIGltZ0RhdGFdLCBbaW1nRGF0YS5kYXRhLmJ1ZmZlcl0pO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIm9ialwiLCBbb2JqSWQsIHRoaXMucGFnZUluZGV4LCBcIkltYWdlXCIsIGltZ0RhdGFdLCBbaW1nRGF0YS5kYXRhLmJ1ZmZlcl0pO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHRvIGRlY29kZSBpbWFnZTogXCIgKyByZWFzb24pO1xuXG4gICAgICAgIGlmICh0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcImNvbW1vbm9ialwiLCBbb2JqSWQsIFwiRm9udFR5cGUzUmVzXCIsIG51bGxdKTtcbiAgICAgICAgfSBlbHNlIGlmIChjYWNoZUdsb2JhbGx5KSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJjb21tb25vYmpcIiwgW29iaklkLCBcIkltYWdlXCIsIG51bGxdKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJvYmpcIiwgW29iaklkLCB0aGlzLnBhZ2VJbmRleCwgXCJJbWFnZVwiLCBudWxsXSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucGFyc2luZ1R5cGUzRm9udCkge1xuICAgICAgICBhd2FpdCBpbWdQcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LCBhcmdzKTtcblxuICAgICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICAgIGxvY2FsSW1hZ2VDYWNoZS5zZXQoY2FjaGVLZXksIGltYWdlUmVmLCB7XG4gICAgICAgICAgZm46IF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdCxcbiAgICAgICAgICBhcmdzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpbWFnZVJlZikge1xuICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKCFpc0lubGluZSwgXCJDYW5ub3QgY2FjaGUgYW4gaW5saW5lIGltYWdlIGdsb2JhbGx5LlwiKTtcbiAgICAgICAgICB0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkUGFnZUluZGV4KGltYWdlUmVmLCB0aGlzLnBhZ2VJbmRleCk7XG5cbiAgICAgICAgICBpZiAoY2FjaGVHbG9iYWxseSkge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNldERhdGEoaW1hZ2VSZWYsIHtcbiAgICAgICAgICAgICAgb2JqSWQsXG4gICAgICAgICAgICAgIGZuOiBfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3QsXG4gICAgICAgICAgICAgIGFyZ3NcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICBoYW5kbGVTTWFzazogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9oYW5kbGVTbWFzayhzbWFzaywgcmVzb3VyY2VzLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlcikge1xuICAgICAgdmFyIHNtYXNrQ29udGVudCA9IHNtYXNrLmdldChcIkdcIik7XG4gICAgICB2YXIgc21hc2tPcHRpb25zID0ge1xuICAgICAgICBzdWJ0eXBlOiBzbWFzay5nZXQoXCJTXCIpLm5hbWUsXG4gICAgICAgIGJhY2tkcm9wOiBzbWFzay5nZXQoXCJCQ1wiKVxuICAgICAgfTtcbiAgICAgIHZhciB0cmFuc2Zlck9iaiA9IHNtYXNrLmdldChcIlRSXCIpO1xuXG4gICAgICBpZiAoKDAsIF9mdW5jdGlvbi5pc1BERkZ1bmN0aW9uKSh0cmFuc2Zlck9iaikpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmZXJGbiA9IHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZSh0cmFuc2Zlck9iaik7XG4gICAgICAgIHZhciB0cmFuc2Zlck1hcCA9IG5ldyBVaW50OEFycmF5KDI1Nik7XG4gICAgICAgIHZhciB0bXAgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgICAgICB0bXBbMF0gPSBpIC8gMjU1O1xuICAgICAgICAgIHRyYW5zZmVyRm4odG1wLCAwLCB0bXAsIDApO1xuICAgICAgICAgIHRyYW5zZmVyTWFwW2ldID0gdG1wWzBdICogMjU1IHwgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtYXNrT3B0aW9ucy50cmFuc2Zlck1hcCA9IHRyYW5zZmVyTWFwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHJlc291cmNlcywgc21hc2tDb250ZW50LCBzbWFza09wdGlvbnMsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlLmNsb25lKCkpO1xuICAgIH0sXG5cbiAgICBoYW5kbGVUaWxpbmdUeXBlKGZuLCBhcmdzLCByZXNvdXJjZXMsIHBhdHRlcm4sIHBhdHRlcm5EaWN0LCBvcGVyYXRvckxpc3QsIHRhc2spIHtcbiAgICAgIGNvbnN0IHRpbGluZ09wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcbiAgICAgIGNvbnN0IHJlc291cmNlc0FycmF5ID0gW3BhdHRlcm5EaWN0LmdldChcIlJlc291cmNlc1wiKSwgcmVzb3VyY2VzXTtcblxuICAgICAgY29uc3QgcGF0dGVyblJlc291cmNlcyA9IF9wcmltaXRpdmVzLkRpY3QubWVyZ2UodGhpcy54cmVmLCByZXNvdXJjZXNBcnJheSk7XG5cbiAgICAgIHJldHVybiB0aGlzLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgIHN0cmVhbTogcGF0dGVybixcbiAgICAgICAgdGFzayxcbiAgICAgICAgcmVzb3VyY2VzOiBwYXR0ZXJuUmVzb3VyY2VzLFxuICAgICAgICBvcGVyYXRvckxpc3Q6IHRpbGluZ09wTGlzdFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3BhdHRlcm4uZ2V0VGlsaW5nUGF0dGVybklSKSh7XG4gICAgICAgICAgZm5BcnJheTogdGlsaW5nT3BMaXN0LmZuQXJyYXksXG4gICAgICAgICAgYXJnc0FycmF5OiB0aWxpbmdPcExpc3QuYXJnc0FycmF5XG4gICAgICAgIH0sIHBhdHRlcm5EaWN0LCBhcmdzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHRpbGluZ1BhdHRlcm5JUikge1xuICAgICAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jaWVzKHRpbGluZ09wTGlzdC5kZXBlbmRlbmNpZXMpO1xuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIHRpbGluZ1BhdHRlcm5JUik7XG4gICAgICB9LCByZWFzb24gPT4ge1xuICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JUaWxpbmdQYXR0ZXJuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBoYW5kbGVUaWxpbmdUeXBlIC0gaWdub3JpbmcgcGF0dGVybjogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgaGFuZGxlU2V0Rm9udDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9oYW5kbGVTZXRGb250KHJlc291cmNlcywgZm9udEFyZ3MsIGZvbnRSZWYsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGUpIHtcbiAgICAgIHZhciBmb250TmFtZTtcblxuICAgICAgaWYgKGZvbnRBcmdzKSB7XG4gICAgICAgIGZvbnRBcmdzID0gZm9udEFyZ3Muc2xpY2UoKTtcbiAgICAgICAgZm9udE5hbWUgPSBmb250QXJnc1swXS5uYW1lO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5sb2FkRm9udChmb250TmFtZSwgZm9udFJlZiwgcmVzb3VyY2VzKS50aGVuKHRyYW5zbGF0ZWQgPT4ge1xuICAgICAgICBpZiAoIXRyYW5zbGF0ZWQuZm9udC5pc1R5cGUzRm9udCkge1xuICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQubG9hZFR5cGUzRGF0YSh0aGlzLCByZXNvdXJjZXMsIG9wZXJhdG9yTGlzdCwgdGFzaykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgICAgIH0pLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRMb2FkVHlwZTNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0ZWRGb250KHtcbiAgICAgICAgICAgIGxvYWRlZE5hbWU6IFwiZ19mb250X2Vycm9yXCIsXG4gICAgICAgICAgICBmb250OiBuZXcgX2ZvbnRzLkVycm9yRm9udChgVHlwZTMgZm9udCBsb2FkIGVycm9yOiAke3JlYXNvbn1gKSxcbiAgICAgICAgICAgIGRpY3Q6IHRyYW5zbGF0ZWQuZm9udCxcbiAgICAgICAgICAgIGV4dHJhUHJvcGVydGllczogdGhpcy5vcHRpb25zLmZvbnRFeHRyYVByb3BlcnRpZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KS50aGVuKHRyYW5zbGF0ZWQgPT4ge1xuICAgICAgICBzdGF0ZS5mb250ID0gdHJhbnNsYXRlZC5mb250O1xuICAgICAgICB0cmFuc2xhdGVkLnNlbmQodGhpcy5oYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQubG9hZGVkTmFtZTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBoYW5kbGVUZXh0KGNoYXJzLCBzdGF0ZSkge1xuICAgICAgY29uc3QgZm9udCA9IHN0YXRlLmZvbnQ7XG4gICAgICBjb25zdCBnbHlwaHMgPSBmb250LmNoYXJzVG9HbHlwaHMoY2hhcnMpO1xuXG4gICAgICBpZiAoZm9udC5kYXRhKSB7XG4gICAgICAgIGNvbnN0IGlzQWRkVG9QYXRoU2V0ID0gISEoc3RhdGUudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKTtcblxuICAgICAgICBpZiAoaXNBZGRUb1BhdGhTZXQgfHwgc3RhdGUuZmlsbENvbG9yU3BhY2UubmFtZSA9PT0gXCJQYXR0ZXJuXCIgfHwgZm9udC5kaXNhYmxlRm9udEZhY2UgfHwgdGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkge1xuICAgICAgICAgIFBhcnRpYWxFdmFsdWF0b3IuYnVpbGRGb250UGF0aHMoZm9udCwgZ2x5cGhzLCB0aGlzLmhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnbHlwaHM7XG4gICAgfSxcblxuICAgIGVuc3VyZVN0YXRlRm9udChzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLmZvbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWFzb24gPSBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuXCIpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRTdGF0ZVxuICAgICAgICB9KTtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBlbnN1cmVTdGF0ZUZvbnQ6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgcmVhc29uO1xuICAgIH0sXG5cbiAgICBzZXRHU3RhdGU6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3Jfc2V0R1N0YXRlKHJlc291cmNlcywgZ1N0YXRlLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlcikge1xuICAgICAgdmFyIGdTdGF0ZU9iaiA9IFtdO1xuICAgICAgdmFyIGdTdGF0ZUtleXMgPSBnU3RhdGUuZ2V0S2V5cygpO1xuICAgICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZ1N0YXRlS2V5cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGdTdGF0ZUtleXNbaV07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZ1N0YXRlLmdldChrZXkpO1xuXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgY2FzZSBcIlR5cGVcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkxXXCI6XG4gICAgICAgICAgY2FzZSBcIkxDXCI6XG4gICAgICAgICAgY2FzZSBcIkxKXCI6XG4gICAgICAgICAgY2FzZSBcIk1MXCI6XG4gICAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICBjYXNlIFwiUklcIjpcbiAgICAgICAgICBjYXNlIFwiRkxcIjpcbiAgICAgICAgICBjYXNlIFwiQ0FcIjpcbiAgICAgICAgICBjYXNlIFwiY2FcIjpcbiAgICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJGb250XCI6XG4gICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIG51bGwsIHZhbHVlWzBdLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlci5zdGF0ZSkudGhlbihmdW5jdGlvbiAobG9hZGVkTmFtZSkge1xuICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KGxvYWRlZE5hbWUpO1xuICAgICAgICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIFtsb2FkZWROYW1lLCB2YWx1ZVsxXV1dKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkJNXCI6XG4gICAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBub3JtYWxpemVCbGVuZE1vZGUodmFsdWUpXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJTTWFza1wiOlxuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHZhbHVlLCBcIk5vbmVcIikpIHtcbiAgICAgICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgZmFsc2VdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU01hc2sodmFsdWUsIHJlc291cmNlcywgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgdHJ1ZV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5zdXBwb3J0ZWQgU01hc2sgdHlwZVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiT1BcIjpcbiAgICAgICAgICBjYXNlIFwib3BcIjpcbiAgICAgICAgICBjYXNlIFwiT1BNXCI6XG4gICAgICAgICAgY2FzZSBcIkJHXCI6XG4gICAgICAgICAgY2FzZSBcIkJHMlwiOlxuICAgICAgICAgIGNhc2UgXCJVQ1JcIjpcbiAgICAgICAgICBjYXNlIFwiVUNSMlwiOlxuICAgICAgICAgIGNhc2UgXCJUUlwiOlxuICAgICAgICAgIGNhc2UgXCJUUjJcIjpcbiAgICAgICAgICBjYXNlIFwiSFRcIjpcbiAgICAgICAgICBjYXNlIFwiU01cIjpcbiAgICAgICAgICBjYXNlIFwiU0FcIjpcbiAgICAgICAgICBjYXNlIFwiQUlTXCI6XG4gICAgICAgICAgY2FzZSBcIlRLXCI6XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJncmFwaGljIHN0YXRlIG9wZXJhdG9yIFwiICsga2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlVua25vd24gZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciBcIiArIGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGdTdGF0ZU9iai5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zZXRHU3RhdGUsIFtnU3RhdGVPYmpdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkRm9udDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9sb2FkRm9udChmb250TmFtZSwgZm9udCwgcmVzb3VyY2VzKSB7XG4gICAgICBjb25zdCBlcnJvckZvbnQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IFRyYW5zbGF0ZWRGb250KHtcbiAgICAgICAgICBsb2FkZWROYW1lOiBcImdfZm9udF9lcnJvclwiLFxuICAgICAgICAgIGZvbnQ6IG5ldyBfZm9udHMuRXJyb3JGb250KGBGb250IFwiJHtmb250TmFtZX1cIiBpcyBub3QgYXZhaWxhYmxlLmApLFxuICAgICAgICAgIGRpY3Q6IGZvbnQsXG4gICAgICAgICAgZXh0cmFQcm9wZXJ0aWVzOiB0aGlzLm9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllc1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgZm9udFJlZixcbiAgICAgICAgICB4cmVmID0gdGhpcy54cmVmO1xuXG4gICAgICBpZiAoZm9udCkge1xuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZm9udCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1RoZSBcImZvbnRcIiBvYmplY3Qgc2hvdWxkIGJlIGEgcmVmZXJlbmNlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9udFJlZiA9IGZvbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZm9udFJlcyA9IHJlc291cmNlcy5nZXQoXCJGb250XCIpO1xuXG4gICAgICAgIGlmIChmb250UmVzKSB7XG4gICAgICAgICAgZm9udFJlZiA9IGZvbnRSZXMuZ2V0UmF3KGZvbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWZvbnRSZWYpIHtcbiAgICAgICAgY29uc3QgcGFydGlhbE1zZyA9IGBGb250IFwiJHtmb250TmFtZSB8fCBmb250ICYmIGZvbnQudG9TdHJpbmcoKX1cIiBpcyBub3QgYXZhaWxhYmxlYDtcblxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMgJiYgIXRoaXMucGFyc2luZ1R5cGUzRm9udCkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgJHtwYXJ0aWFsTXNnfS5gKTtcbiAgICAgICAgICByZXR1cm4gZXJyb3JGb250KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRNaXNzaW5nXG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYCR7cGFydGlhbE1zZ30gLS0gYXR0ZW1wdGluZyB0byBmYWxsYmFjayB0byBhIGRlZmF1bHQgZm9udC5gKTtcbiAgICAgICAgZm9udFJlZiA9IFBhcnRpYWxFdmFsdWF0b3IuZ2V0RmFsbGJhY2tGb250RGljdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5mb250Q2FjaGUuaGFzKGZvbnRSZWYpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoZm9udFJlZik7XG4gICAgICB9XG5cbiAgICAgIGZvbnQgPSB4cmVmLmZldGNoSWZSZWYoZm9udFJlZik7XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZm9udCkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yRm9udCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9udC50cmFuc2xhdGVkKSB7XG4gICAgICAgIHJldHVybiBmb250LnRyYW5zbGF0ZWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBmb250Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIHZhciBwcmVFdmFsdWF0ZWRGb250ID0gdGhpcy5wcmVFdmFsdWF0ZUZvbnQoZm9udCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRlc2NyaXB0b3IsXG4gICAgICAgIGhhc2hcbiAgICAgIH0gPSBwcmVFdmFsdWF0ZWRGb250O1xuICAgICAgdmFyIGZvbnRSZWZJc1JlZiA9ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZm9udFJlZiksXG4gICAgICAgICAgZm9udElEO1xuXG4gICAgICBpZiAoZm9udFJlZklzUmVmKSB7XG4gICAgICAgIGZvbnRJRCA9IGZvbnRSZWYudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc2ggJiYgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGVzY3JpcHRvcikpIHtcbiAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmZvbnRBbGlhc2VzKSB7XG4gICAgICAgICAgZGVzY3JpcHRvci5mb250QWxpYXNlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZm9udEFsaWFzZXMgPSBkZXNjcmlwdG9yLmZvbnRBbGlhc2VzO1xuXG4gICAgICAgIGlmIChmb250QWxpYXNlc1toYXNoXSkge1xuICAgICAgICAgIHZhciBhbGlhc0ZvbnRSZWYgPSBmb250QWxpYXNlc1toYXNoXS5hbGlhc1JlZjtcblxuICAgICAgICAgIGlmIChmb250UmVmSXNSZWYgJiYgYWxpYXNGb250UmVmICYmIHRoaXMuZm9udENhY2hlLmhhcyhhbGlhc0ZvbnRSZWYpKSB7XG4gICAgICAgICAgICB0aGlzLmZvbnRDYWNoZS5wdXRBbGlhcyhmb250UmVmLCBhbGlhc0ZvbnRSZWYpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChmb250UmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9udEFsaWFzZXNbaGFzaF0gPSB7XG4gICAgICAgICAgICBmb250SUQ6IF9mb250cy5Gb250LmdldEZvbnRJRCgpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgICAgICBmb250QWxpYXNlc1toYXNoXS5hbGlhc1JlZiA9IGZvbnRSZWY7XG4gICAgICAgIH1cblxuICAgICAgICBmb250SUQgPSBmb250QWxpYXNlc1toYXNoXS5mb250SUQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgICAgdGhpcy5mb250Q2FjaGUucHV0KGZvbnRSZWYsIGZvbnRDYXBhYmlsaXR5LnByb21pc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFmb250SUQpIHtcbiAgICAgICAgICBmb250SUQgPSB0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb250Q2FjaGUucHV0KGBpZF8ke2ZvbnRJRH1gLCBmb250Q2FwYWJpbGl0eS5wcm9taXNlKTtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmFzc2VydCkoZm9udElELCAnVGhlIFwiZm9udElEXCIgbXVzdCBiZSBkZWZpbmVkLicpO1xuICAgICAgZm9udC5sb2FkZWROYW1lID0gYCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fZiR7Zm9udElEfWA7XG4gICAgICBmb250LnRyYW5zbGF0ZWQgPSBmb250Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgdmFyIHRyYW5zbGF0ZWRQcm9taXNlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB0cmFuc2xhdGVkUHJvbWlzZSA9IHRoaXMudHJhbnNsYXRlRm9udChwcmVFdmFsdWF0ZWRGb250KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJhbnNsYXRlZFByb21pc2UgPSBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgIH1cblxuICAgICAgdHJhbnNsYXRlZFByb21pc2UudGhlbih0cmFuc2xhdGVkRm9udCA9PiB7XG4gICAgICAgIGlmICh0cmFuc2xhdGVkRm9udC5mb250VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHhyZWZGb250U3RhdHMgPSB4cmVmLnN0YXRzLmZvbnRUeXBlcztcbiAgICAgICAgICB4cmVmRm9udFN0YXRzW3RyYW5zbGF0ZWRGb250LmZvbnRUeXBlXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb250Q2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBUcmFuc2xhdGVkRm9udCh7XG4gICAgICAgICAgbG9hZGVkTmFtZTogZm9udC5sb2FkZWROYW1lLFxuICAgICAgICAgIGZvbnQ6IHRyYW5zbGF0ZWRGb250LFxuICAgICAgICAgIGRpY3Q6IGZvbnQsXG4gICAgICAgICAgZXh0cmFQcm9wZXJ0aWVzOiB0aGlzLm9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllc1xuICAgICAgICB9KSk7XG4gICAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRUcmFuc2xhdGVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgZm9udEZpbGUzID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmdldChcIkZvbnRGaWxlM1wiKTtcbiAgICAgICAgICB2YXIgc3VidHlwZSA9IGZvbnRGaWxlMyAmJiBmb250RmlsZTMuZ2V0KFwiU3VidHlwZVwiKTtcbiAgICAgICAgICB2YXIgZm9udFR5cGUgPSAoMCwgX2ZvbnRzLmdldEZvbnRUeXBlKShwcmVFdmFsdWF0ZWRGb250LnR5cGUsIHN1YnR5cGUgJiYgc3VidHlwZS5uYW1lKTtcbiAgICAgICAgICB2YXIgeHJlZkZvbnRTdGF0cyA9IHhyZWYuc3RhdHMuZm9udFR5cGVzO1xuICAgICAgICAgIHhyZWZGb250U3RhdHNbZm9udFR5cGVdID0gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgICAgICAgZm9udENhcGFiaWxpdHkucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoe1xuICAgICAgICAgIGxvYWRlZE5hbWU6IGZvbnQubG9hZGVkTmFtZSxcbiAgICAgICAgICBmb250OiBuZXcgX2ZvbnRzLkVycm9yRm9udChyZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbi5tZXNzYWdlIDogcmVhc29uKSxcbiAgICAgICAgICBkaWN0OiBmb250LFxuICAgICAgICAgIGV4dHJhUHJvcGVydGllczogdGhpcy5vcHRpb25zLmZvbnRFeHRyYVByb3BlcnRpZXNcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZm9udENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9LFxuXG4gICAgYnVpbGRQYXRoKG9wZXJhdG9yTGlzdCwgZm4sIGFyZ3MsIHBhcnNpbmdUZXh0ID0gZmFsc2UpIHtcbiAgICAgIHZhciBsYXN0SW5kZXggPSBvcGVyYXRvckxpc3QubGVuZ3RoIC0gMTtcblxuICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgIGFyZ3MgPSBbXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RJbmRleCA8IDAgfHwgb3BlcmF0b3JMaXN0LmZuQXJyYXlbbGFzdEluZGV4XSAhPT0gX3V0aWwuT1BTLmNvbnN0cnVjdFBhdGgpIHtcbiAgICAgICAgaWYgKHBhcnNpbmdUZXh0KSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBFbmNvdW50ZXJlZCBwYXRoIG9wZXJhdG9yIFwiJHtmbn1cIiBpbnNpZGUgb2YgYSB0ZXh0IG9iamVjdC5gKTtcbiAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnNhdmUsIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoLCBbW2ZuXSwgYXJnc10pO1xuXG4gICAgICAgIGlmIChwYXJzaW5nVGV4dCkge1xuICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMucmVzdG9yZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvcEFyZ3MgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5W2xhc3RJbmRleF07XG4gICAgICAgIG9wQXJnc1swXS5wdXNoKGZuKTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkob3BBcmdzWzFdLCBhcmdzKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyc2VDb2xvclNwYWNlKHtcbiAgICAgIGNzLFxuICAgICAgcmVzb3VyY2VzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlKF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoY3MsIHRoaXMueHJlZiwgcmVzb3VyY2VzLCB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeSkpO1xuICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JDb2xvclNwYWNlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBwYXJzZUNvbG9yU3BhY2UgLSBpZ25vcmluZyBDb2xvclNwYWNlOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZUNvbG9yTihvcGVyYXRvckxpc3QsIGZuLCBhcmdzLCBjcywgcGF0dGVybnMsIHJlc291cmNlcywgdGFzaykge1xuICAgICAgdmFyIHBhdHRlcm5OYW1lID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIHBhdHRlcm47XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShwYXR0ZXJuTmFtZSkgJiYgKHBhdHRlcm4gPSBwYXR0ZXJucy5nZXQocGF0dGVybk5hbWUubmFtZSkpKSB7XG4gICAgICAgIHZhciBkaWN0ID0gKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShwYXR0ZXJuKSA/IHBhdHRlcm4uZGljdCA6IHBhdHRlcm47XG4gICAgICAgIHZhciB0eXBlTnVtID0gZGljdC5nZXQoXCJQYXR0ZXJuVHlwZVwiKTtcblxuICAgICAgICBpZiAodHlwZU51bSA9PT0gVElMSU5HX1BBVFRFUk4pIHtcbiAgICAgICAgICB2YXIgY29sb3IgPSBjcy5iYXNlID8gY3MuYmFzZS5nZXRSZ2IoYXJncywgMCkgOiBudWxsO1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVRpbGluZ1R5cGUoZm4sIGNvbG9yLCByZXNvdXJjZXMsIHBhdHRlcm4sIGRpY3QsIG9wZXJhdG9yTGlzdCwgdGFzayk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZU51bSA9PT0gU0hBRElOR19QQVRURVJOKSB7XG4gICAgICAgICAgdmFyIHNoYWRpbmcgPSBkaWN0LmdldChcIlNoYWRpbmdcIik7XG4gICAgICAgICAgdmFyIG1hdHJpeCA9IGRpY3QuZ2V0QXJyYXkoXCJNYXRyaXhcIik7XG4gICAgICAgICAgcGF0dGVybiA9IF9wYXR0ZXJuLlBhdHRlcm4ucGFyc2VTaGFkaW5nKHNoYWRpbmcsIG1hdHJpeCwgdGhpcy54cmVmLCByZXNvdXJjZXMsIHRoaXMuaGFuZGxlciwgdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgcGF0dGVybi5nZXRJUigpKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmtub3duIFBhdHRlcm5UeXBlOiAke3R5cGVOdW19YCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5rbm93biBQYXR0ZXJuTmFtZTogJHtwYXR0ZXJuTmFtZX1gKTtcbiAgICB9LFxuXG4gICAgZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgIHN0cmVhbSxcbiAgICAgIHRhc2ssXG4gICAgICByZXNvdXJjZXMsXG4gICAgICBvcGVyYXRvckxpc3QsXG4gICAgICBpbml0aWFsU3RhdGUgPSBudWxsXG4gICAgfSkge1xuICAgICAgcmVzb3VyY2VzID0gcmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGUgfHwgbmV3IEV2YWxTdGF0ZSgpO1xuXG4gICAgICBpZiAoIW9wZXJhdG9yTGlzdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyBcIm9wZXJhdG9yTGlzdFwiIHBhcmFtZXRlcicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcbiAgICAgIGxldCBwYXJzaW5nVGV4dCA9IGZhbHNlO1xuICAgICAgY29uc3QgbG9jYWxJbWFnZUNhY2hlID0gbmV3IF9pbWFnZV91dGlscy5Mb2NhbEltYWdlQ2FjaGUoKTtcblxuICAgICAgdmFyIHhvYmpzID0gcmVzb3VyY2VzLmdldChcIlhPYmplY3RcIikgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcblxuICAgICAgdmFyIHBhdHRlcm5zID0gcmVzb3VyY2VzLmdldChcIlBhdHRlcm5cIikgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcblxuICAgICAgdmFyIHN0YXRlTWFuYWdlciA9IG5ldyBTdGF0ZU1hbmFnZXIoaW5pdGlhbFN0YXRlKTtcbiAgICAgIHZhciBwcmVwcm9jZXNzb3IgPSBuZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKHN0cmVhbSwgeHJlZiwgc3RhdGVNYW5hZ2VyKTtcbiAgICAgIHZhciB0aW1lU2xvdE1hbmFnZXIgPSBuZXcgVGltZVNsb3RNYW5hZ2VyKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoYXJndW1lbnQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcHJlcHJvY2Vzc29yLnNhdmVkU3RhdGVzRGVwdGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5yZXN0b3JlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBjb25zdCBuZXh0ID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgICBQcm9taXNlLmFsbChbcHJvbWlzZSwgb3BlcmF0b3JMaXN0LnJlYWR5XSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBwcm9taXNlQm9keShyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRhc2suZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgICB0aW1lU2xvdE1hbmFnZXIucmVzZXQoKTtcbiAgICAgICAgdmFyIHN0b3AsXG4gICAgICAgICAgICBvcGVyYXRpb24gPSB7fSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIGNzO1xuXG4gICAgICAgIHdoaWxlICghKHN0b3AgPSB0aW1lU2xvdE1hbmFnZXIuY2hlY2soKSkpIHtcbiAgICAgICAgICBvcGVyYXRpb24uYXJncyA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoIXByZXByb2Nlc3Nvci5yZWFkKG9wZXJhdGlvbikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7XG4gICAgICAgICAgdmFyIGZuID0gb3BlcmF0aW9uLmZuO1xuXG4gICAgICAgICAgc3dpdGNoIChmbiB8IDApIHtcbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50WE9iamVjdDpcbiAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhcmdzWzBdLm5hbWU7XG5cbiAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbEltYWdlID0gbG9jYWxJbWFnZUNhY2hlLmdldEJ5TmFtZShuYW1lKTtcblxuICAgICAgICAgICAgICAgIGlmIChsb2NhbEltYWdlKSB7XG4gICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AobG9jYWxJbWFnZS5mbiwgbG9jYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICAgIGFyZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbmV4dChuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZVhPYmplY3QsIHJlamVjdFhPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLlwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgeG9iaiA9IHhvYmpzLmdldFJhdyhuYW1lKTtcblxuICAgICAgICAgICAgICAgIGlmICh4b2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsb2NhbEltYWdlID0gbG9jYWxJbWFnZUNhY2hlLmdldEJ5UmVmKHhvYmopO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobG9jYWxJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AobG9jYWxJbWFnZS5mbiwgbG9jYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBnbG9iYWxJbWFnZSA9IHNlbGYuZ2xvYmFsSW1hZ2VDYWNoZS5nZXREYXRhKHhvYmosIHNlbGYucGFnZUluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbEltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KGdsb2JhbEltYWdlLm9iaklkKTtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGdsb2JhbEltYWdlLmZuLCBnbG9iYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB4b2JqID0geHJlZi5mZXRjaCh4b2JqKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXhvYmopIHtcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlWE9iamVjdCgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh4b2JqKSkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW1cIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHhvYmouZGljdC5nZXQoXCJTdWJ0eXBlXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlKSkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZVwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZS5uYW1lID09PSBcIkZvcm1cIikge1xuICAgICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRGb3JtWE9iamVjdChyZXNvdXJjZXMsIHhvYmosIG51bGwsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlLmNsb25lKCkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlWE9iamVjdCgpO1xuICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0WE9iamVjdCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLm5hbWUgPT09IFwiSW1hZ2VcIikge1xuICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogeG9iaixcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LFxuICAgICAgICAgICAgICAgICAgICBjYWNoZUtleTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxJbWFnZUNhY2hlXG4gICAgICAgICAgICAgICAgICB9KS50aGVuKHJlc29sdmVYT2JqZWN0LCByZWplY3RYT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUubmFtZSA9PT0gXCJQU1wiKSB7XG4gICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJJZ25vcmVkIFhPYmplY3Qgc3VidHlwZSBQU1wiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICR7dHlwZS5uYW1lfWApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yWE9iamVjdFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIFhPYmplY3Q6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Rm9udDpcbiAgICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgbmV4dChzZWxmLmhhbmRsZVNldEZvbnQocmVzb3VyY2VzLCBhcmdzLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlci5zdGF0ZSkudGhlbihmdW5jdGlvbiAobG9hZGVkTmFtZSkge1xuICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KGxvYWRlZE5hbWUpO1xuICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0Rm9udCwgW2xvYWRlZE5hbWUsIGZvbnRTaXplXSk7XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpblRleHQ6XG4gICAgICAgICAgICAgIHBhcnNpbmdUZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZFRleHQ6XG4gICAgICAgICAgICAgIHBhcnNpbmdUZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRJbmxpbmVJbWFnZTpcbiAgICAgICAgICAgICAgdmFyIGNhY2hlS2V5ID0gYXJnc1swXS5jYWNoZUtleTtcblxuICAgICAgICAgICAgICBpZiAoY2FjaGVLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbEltYWdlID0gbG9jYWxJbWFnZUNhY2hlLmdldEJ5TmFtZShjYWNoZUtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobG9jYWxJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGxvY2FsSW1hZ2UuZm4sIGxvY2FsSW1hZ2UuYXJncyk7XG4gICAgICAgICAgICAgICAgICBhcmdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG5leHQoc2VsZi5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgaW1hZ2U6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgaXNJbmxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LFxuICAgICAgICAgICAgICAgIGNhY2hlS2V5LFxuICAgICAgICAgICAgICAgIGxvY2FsSW1hZ2VDYWNoZVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hvd1RleHQ6XG4gICAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXJnc1swXSA9IHNlbGYuaGFuZGxlVGV4dChhcmdzWzBdLCBzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hvd1NwYWNlZFRleHQ6XG4gICAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIGFyciA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgIHZhciBjb21iaW5lZEdseXBocyA9IFtdO1xuICAgICAgICAgICAgICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aDtcbiAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RhdGVNYW5hZ2VyLnN0YXRlO1xuXG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIHZhciBhcnJJdGVtID0gYXJyW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoYXJySXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGNvbWJpbmVkR2x5cGhzLCBzZWxmLmhhbmRsZVRleHQoYXJySXRlbSwgc3RhdGUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc051bSkoYXJySXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbWJpbmVkR2x5cGhzLnB1c2goYXJySXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXJnc1swXSA9IGNvbWJpbmVkR2x5cGhzO1xuICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaG93VGV4dDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm5leHRMaW5lU2hvd1RleHQ6XG4gICAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5uZXh0TGluZSk7XG4gICAgICAgICAgICAgIGFyZ3NbMF0gPSBzZWxmLmhhbmRsZVRleHQoYXJnc1swXSwgc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2hvd1RleHQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDpcbiAgICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLm5leHRMaW5lKTtcbiAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zZXRXb3JkU3BhY2luZywgW2FyZ3Muc2hpZnQoKV0pO1xuICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnNldENoYXJTcGFjaW5nLCBbYXJncy5zaGlmdCgpXSk7XG4gICAgICAgICAgICAgIGFyZ3NbMF0gPSBzZWxmLmhhbmRsZVRleHQoYXJnc1swXSwgc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2hvd1RleHQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTpcbiAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLnRleHRSZW5kZXJpbmdNb2RlID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvclNwYWNlOlxuICAgICAgICAgICAgICBuZXh0KHNlbGYucGFyc2VDb2xvclNwYWNlKHtcbiAgICAgICAgICAgICAgICBjczogYXJnc1swXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNcbiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29sb3JTcGFjZSkge1xuICAgICAgICAgICAgICAgIGlmIChjb2xvclNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2U6XG4gICAgICAgICAgICAgIG5leHQoc2VsZi5wYXJzZUNvbG9yU3BhY2Uoe1xuICAgICAgICAgICAgICAgIGNzOiBhcmdzWzBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlc1xuICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb2xvclNwYWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gY29sb3JTcGFjZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ29sb3I6XG4gICAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlO1xuICAgICAgICAgICAgICBhcmdzID0gY3MuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDb2xvcjpcbiAgICAgICAgICAgICAgY3MgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZTtcbiAgICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsR3JheTpcbiAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gICAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUdyYXk6XG4gICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gICAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbENNWUtDb2xvcjpcbiAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWs7XG4gICAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpcbiAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215aztcbiAgICAgICAgICAgICAgYXJncyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I6XG4gICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7XG4gICAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yOlxuICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7XG4gICAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvck46XG4gICAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlO1xuXG4gICAgICAgICAgICAgIGlmIChjcy5uYW1lID09PSBcIlBhdHRlcm5cIikge1xuICAgICAgICAgICAgICAgIG5leHQoc2VsZi5oYW5kbGVDb2xvck4ob3BlcmF0b3JMaXN0LCBfdXRpbC5PUFMuc2V0RmlsbENvbG9yTiwgYXJncywgY3MsIHBhdHRlcm5zLCByZXNvdXJjZXMsIHRhc2spKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhcmdzID0gY3MuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDb2xvck46XG4gICAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7XG5cbiAgICAgICAgICAgICAgaWYgKGNzLm5hbWUgPT09IFwiUGF0dGVyblwiKSB7XG4gICAgICAgICAgICAgICAgbmV4dChzZWxmLmhhbmRsZUNvbG9yTihvcGVyYXRvckxpc3QsIF91dGlsLk9QUy5zZXRTdHJva2VDb2xvck4sIGFyZ3MsIGNzLCBwYXR0ZXJucywgcmVzb3VyY2VzLCB0YXNrKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaGFkaW5nRmlsbDpcbiAgICAgICAgICAgICAgdmFyIHNoYWRpbmdSZXMgPSByZXNvdXJjZXMuZ2V0KFwiU2hhZGluZ1wiKTtcblxuICAgICAgICAgICAgICBpZiAoIXNoYWRpbmdSZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyBzaGFkaW5nIHJlc291cmNlIGZvdW5kXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIHNoYWRpbmcgPSBzaGFkaW5nUmVzLmdldChhcmdzWzBdLm5hbWUpO1xuXG4gICAgICAgICAgICAgIGlmICghc2hhZGluZykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk5vIHNoYWRpbmcgb2JqZWN0IGZvdW5kXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIHNoYWRpbmdGaWxsID0gX3BhdHRlcm4uUGF0dGVybi5wYXJzZVNoYWRpbmcoc2hhZGluZywgbnVsbCwgeHJlZiwgcmVzb3VyY2VzLCBzZWxmLmhhbmRsZXIsIHNlbGYucGRmRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgICAgICAgICAgICB2YXIgcGF0dGVybklSID0gc2hhZGluZ0ZpbGwuZ2V0SVIoKTtcbiAgICAgICAgICAgICAgYXJncyA9IFtwYXR0ZXJuSVJdO1xuICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaGFkaW5nRmlsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEdTdGF0ZTpcbiAgICAgICAgICAgICAgdmFyIGRpY3ROYW1lID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgdmFyIGV4dEdTdGF0ZSA9IHJlc291cmNlcy5nZXQoXCJFeHRHU3RhdGVcIik7XG5cbiAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShleHRHU3RhdGUpIHx8ICFleHRHU3RhdGUuaGFzKGRpY3ROYW1lLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgZ1N0YXRlID0gZXh0R1N0YXRlLmdldChkaWN0TmFtZS5uYW1lKTtcbiAgICAgICAgICAgICAgbmV4dChzZWxmLnNldEdTdGF0ZShyZXNvdXJjZXMsIGdTdGF0ZSwgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVG86XG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5saW5lVG86XG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvOlxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzI6XG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMzpcbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnJlY3RhbmdsZTpcbiAgICAgICAgICAgICAgc2VsZi5idWlsZFBhdGgob3BlcmF0b3JMaXN0LCBmbiwgYXJncywgcGFyc2luZ1RleHQpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubWFya1BvaW50OlxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubWFya1BvaW50UHJvcHM6XG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6XG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczpcbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZE1hcmtlZENvbnRlbnQ6XG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpbkNvbXBhdDpcbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZENvbXBhdDpcbiAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGlmIChhcmdzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBhcmdzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIGlmIChhcmdzW2ldIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaSA8IGlpKSB7XG4gICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogXCIgKyBmbik7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgIH1cblxuICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RvcCkge1xuICAgICAgICAgIG5leHQoZGVmZXJyZWQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nIFwiJHt0YXNrLm5hbWV9XCIgYCArIGB0YXNrOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZ2V0VGV4dENvbnRlbnQoe1xuICAgICAgc3RyZWFtLFxuICAgICAgdGFzayxcbiAgICAgIHJlc291cmNlcyxcbiAgICAgIHN0YXRlTWFuYWdlciA9IG51bGwsXG4gICAgICBub3JtYWxpemVXaGl0ZXNwYWNlID0gZmFsc2UsXG4gICAgICBjb21iaW5lVGV4dEl0ZW1zID0gZmFsc2UsXG4gICAgICBzaW5rLFxuICAgICAgc2VlblN0eWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICB9KSB7XG4gICAgICByZXNvdXJjZXMgPSByZXNvdXJjZXMgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICAgIHN0YXRlTWFuYWdlciA9IHN0YXRlTWFuYWdlciB8fCBuZXcgU3RhdGVNYW5hZ2VyKG5ldyBUZXh0U3RhdGUoKSk7XG4gICAgICB2YXIgV2hpdGVzcGFjZVJlZ2V4cCA9IC9cXHMvZztcbiAgICAgIHZhciB0ZXh0Q29udGVudCA9IHtcbiAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICBzdHlsZXM6IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICAgIH07XG4gICAgICB2YXIgdGV4dENvbnRlbnRJdGVtID0ge1xuICAgICAgICBpbml0aWFsaXplZDogZmFsc2UsXG4gICAgICAgIHN0cjogW10sXG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIHZlcnRpY2FsOiBmYWxzZSxcbiAgICAgICAgbGFzdEFkdmFuY2VXaWR0aDogMCxcbiAgICAgICAgbGFzdEFkdmFuY2VIZWlnaHQ6IDAsXG4gICAgICAgIHRleHRBZHZhbmNlU2NhbGU6IDAsXG4gICAgICAgIHNwYWNlV2lkdGg6IDAsXG4gICAgICAgIGZha2VTcGFjZU1pbjogSW5maW5pdHksXG4gICAgICAgIGZha2VNdWx0aVNwYWNlTWluOiBJbmZpbml0eSxcbiAgICAgICAgZmFrZU11bHRpU3BhY2VNYXg6IC0wLFxuICAgICAgICB0ZXh0UnVuQnJlYWtBbGxvd2VkOiBmYWxzZSxcbiAgICAgICAgdHJhbnNmb3JtOiBudWxsLFxuICAgICAgICBmb250TmFtZTogbnVsbFxuICAgICAgfTtcbiAgICAgIHZhciBTUEFDRV9GQUNUT1IgPSAwLjM7XG4gICAgICB2YXIgTVVMVElfU1BBQ0VfRkFDVE9SID0gMS41O1xuICAgICAgdmFyIE1VTFRJX1NQQUNFX0ZBQ1RPUl9NQVggPSA0O1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgICB2YXIgeG9ianMgPSBudWxsO1xuICAgICAgY29uc3QgZW1wdHlYT2JqZWN0Q2FjaGUgPSBuZXcgX2ltYWdlX3V0aWxzLkxvY2FsSW1hZ2VDYWNoZSgpO1xuICAgICAgdmFyIHByZXByb2Nlc3NvciA9IG5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3Ioc3RyZWFtLCB4cmVmLCBzdGF0ZU1hbmFnZXIpO1xuICAgICAgdmFyIHRleHRTdGF0ZTtcblxuICAgICAgZnVuY3Rpb24gZW5zdXJlVGV4dENvbnRlbnRJdGVtKCkge1xuICAgICAgICBpZiAodGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRleHRDb250ZW50SXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmb250ID0gdGV4dFN0YXRlLmZvbnQ7XG5cbiAgICAgICAgaWYgKCEoZm9udC5sb2FkZWROYW1lIGluIHNlZW5TdHlsZXMpKSB7XG4gICAgICAgICAgc2VlblN0eWxlc1tmb250LmxvYWRlZE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICB0ZXh0Q29udGVudC5zdHlsZXNbZm9udC5sb2FkZWROYW1lXSA9IHtcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IGZvbnQuZmFsbGJhY2tOYW1lLFxuICAgICAgICAgICAgYXNjZW50OiBmb250LmFzY2VudCxcbiAgICAgICAgICAgIGRlc2NlbnQ6IGZvbnQuZGVzY2VudCxcbiAgICAgICAgICAgIHZlcnRpY2FsOiBmb250LnZlcnRpY2FsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRleHRDb250ZW50SXRlbS5mb250TmFtZSA9IGZvbnQubG9hZGVkTmFtZTtcbiAgICAgICAgdmFyIHRzbSA9IFt0ZXh0U3RhdGUuZm9udFNpemUgKiB0ZXh0U3RhdGUudGV4dEhTY2FsZSwgMCwgMCwgdGV4dFN0YXRlLmZvbnRTaXplLCAwLCB0ZXh0U3RhdGUudGV4dFJpc2VdO1xuXG4gICAgICAgIGlmIChmb250LmlzVHlwZTNGb250ICYmIHRleHRTdGF0ZS5mb250U2l6ZSA8PSAxICYmICEoMCwgX3V0aWwuaXNBcnJheUVxdWFsKSh0ZXh0U3RhdGUuZm9udE1hdHJpeCwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVgpKSB7XG4gICAgICAgICAgY29uc3QgZ2x5cGhIZWlnaHQgPSBmb250LmJib3hbM10gLSBmb250LmJib3hbMV07XG5cbiAgICAgICAgICBpZiAoZ2x5cGhIZWlnaHQgPiAwKSB7XG4gICAgICAgICAgICB0c21bM10gKj0gZ2x5cGhIZWlnaHQgKiB0ZXh0U3RhdGUuZm9udE1hdHJpeFszXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdHJtID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0odGV4dFN0YXRlLmN0bSwgX3V0aWwuVXRpbC50cmFuc2Zvcm0odGV4dFN0YXRlLnRleHRNYXRyaXgsIHRzbSkpO1xuXG4gICAgICAgIHRleHRDb250ZW50SXRlbS50cmFuc2Zvcm0gPSB0cm07XG5cbiAgICAgICAgaWYgKCFmb250LnZlcnRpY2FsKSB7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gMDtcbiAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ID0gTWF0aC5zcXJ0KHRybVsyXSAqIHRybVsyXSArIHRybVszXSAqIHRybVszXSk7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLnZlcnRpY2FsID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gTWF0aC5zcXJ0KHRybVswXSAqIHRybVswXSArIHRybVsxXSAqIHRybVsxXSk7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCA9IDA7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLnZlcnRpY2FsID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhID0gdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4WzBdO1xuICAgICAgICB2YXIgYiA9IHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeFsxXTtcbiAgICAgICAgdmFyIHNjYWxlTGluZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgICAgIGEgPSB0ZXh0U3RhdGUuY3RtWzBdO1xuICAgICAgICBiID0gdGV4dFN0YXRlLmN0bVsxXTtcbiAgICAgICAgdmFyIHNjYWxlQ3RtWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGUgPSBzY2FsZUN0bVggKiBzY2FsZUxpbmVYO1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VXaWR0aCA9IDA7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZUhlaWdodCA9IDA7XG4gICAgICAgIHZhciBzcGFjZVdpZHRoID0gZm9udC5zcGFjZVdpZHRoIC8gMTAwMCAqIHRleHRTdGF0ZS5mb250U2l6ZTtcblxuICAgICAgICBpZiAoc3BhY2VXaWR0aCkge1xuICAgICAgICAgIHRleHRDb250ZW50SXRlbS5zcGFjZVdpZHRoID0gc3BhY2VXaWR0aDtcbiAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uZmFrZVNwYWNlTWluID0gc3BhY2VXaWR0aCAqIFNQQUNFX0ZBQ1RPUjtcbiAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uZmFrZU11bHRpU3BhY2VNaW4gPSBzcGFjZVdpZHRoICogTVVMVElfU1BBQ0VfRkFDVE9SO1xuICAgICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1heCA9IHNwYWNlV2lkdGggKiBNVUxUSV9TUEFDRV9GQUNUT1JfTUFYO1xuICAgICAgICAgIHRleHRDb250ZW50SXRlbS50ZXh0UnVuQnJlYWtBbGxvd2VkID0gIWZvbnQuaXNNb25vc3BhY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLnNwYWNlV2lkdGggPSAwO1xuICAgICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlU3BhY2VNaW4gPSBJbmZpbml0eTtcbiAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uZmFrZU11bHRpU3BhY2VNaW4gPSBJbmZpbml0eTtcbiAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uZmFrZU11bHRpU3BhY2VNYXggPSAwO1xuICAgICAgICAgIHRleHRDb250ZW50SXRlbS50ZXh0UnVuQnJlYWtBbGxvd2VkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGV4dENvbnRlbnRJdGVtO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZXBsYWNlV2hpdGVzcGFjZShzdHIpIHtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgaWkgPSBzdHIubGVuZ3RoLFxuICAgICAgICAgICAgY29kZTtcblxuICAgICAgICB3aGlsZSAoaSA8IGlpICYmIChjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSkpID49IDB4MjAgJiYgY29kZSA8PSAweDdmKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGkgPCBpaSA/IHN0ci5yZXBsYWNlKFdoaXRlc3BhY2VSZWdleHAsIFwiIFwiKSA6IHN0cjtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcnVuQmlkaVRyYW5zZm9ybSh0ZXh0Q2h1bmspIHtcbiAgICAgICAgdmFyIHN0ciA9IHRleHRDaHVuay5zdHIuam9pbihcIlwiKTtcbiAgICAgICAgdmFyIGJpZGlSZXN1bHQgPSAoMCwgX2JpZGkuYmlkaSkoc3RyLCAtMSwgdGV4dENodW5rLnZlcnRpY2FsKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdHI6IG5vcm1hbGl6ZVdoaXRlc3BhY2UgPyByZXBsYWNlV2hpdGVzcGFjZShiaWRpUmVzdWx0LnN0cikgOiBiaWRpUmVzdWx0LnN0cixcbiAgICAgICAgICBkaXI6IGJpZGlSZXN1bHQuZGlyLFxuICAgICAgICAgIHdpZHRoOiB0ZXh0Q2h1bmsud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiB0ZXh0Q2h1bmsuaGVpZ2h0LFxuICAgICAgICAgIHRyYW5zZm9ybTogdGV4dENodW5rLnRyYW5zZm9ybSxcbiAgICAgICAgICBmb250TmFtZTogdGV4dENodW5rLmZvbnROYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZVNldEZvbnQoZm9udE5hbWUsIGZvbnRSZWYpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYubG9hZEZvbnQoZm9udE5hbWUsIGZvbnRSZWYsIHJlc291cmNlcykudGhlbihmdW5jdGlvbiAodHJhbnNsYXRlZCkge1xuICAgICAgICAgIHRleHRTdGF0ZS5mb250ID0gdHJhbnNsYXRlZC5mb250O1xuICAgICAgICAgIHRleHRTdGF0ZS5mb250TWF0cml4ID0gdHJhbnNsYXRlZC5mb250LmZvbnRNYXRyaXggfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBidWlsZFRleHRDb250ZW50SXRlbShjaGFycykge1xuICAgICAgICB2YXIgZm9udCA9IHRleHRTdGF0ZS5mb250O1xuICAgICAgICB2YXIgdGV4dENodW5rID0gZW5zdXJlVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgIHZhciB3aWR0aCA9IDA7XG4gICAgICAgIHZhciBoZWlnaHQgPSAwO1xuICAgICAgICB2YXIgZ2x5cGhzID0gZm9udC5jaGFyc1RvR2x5cGhzKGNoYXJzKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdseXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcbiAgICAgICAgICB2YXIgZ2x5cGhXaWR0aCA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoZm9udC52ZXJ0aWNhbCAmJiBnbHlwaC52bWV0cmljKSB7XG4gICAgICAgICAgICBnbHlwaFdpZHRoID0gZ2x5cGgudm1ldHJpY1swXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2x5cGhXaWR0aCA9IGdseXBoLndpZHRoO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBnbHlwaFVuaWNvZGUgPSBnbHlwaC51bmljb2RlO1xuICAgICAgICAgIHZhciBOb3JtYWxpemVkVW5pY29kZXMgPSAoMCwgX3VuaWNvZGUuZ2V0Tm9ybWFsaXplZFVuaWNvZGVzKSgpO1xuXG4gICAgICAgICAgaWYgKE5vcm1hbGl6ZWRVbmljb2Rlc1tnbHlwaFVuaWNvZGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGdseXBoVW5pY29kZSA9IE5vcm1hbGl6ZWRVbmljb2Rlc1tnbHlwaFVuaWNvZGVdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdseXBoVW5pY29kZSA9ICgwLCBfdW5pY29kZS5yZXZlcnNlSWZSdGwpKGdseXBoVW5pY29kZSk7XG4gICAgICAgICAgdmFyIGNoYXJTcGFjaW5nID0gdGV4dFN0YXRlLmNoYXJTcGFjaW5nO1xuXG4gICAgICAgICAgaWYgKGdseXBoLmlzU3BhY2UpIHtcbiAgICAgICAgICAgIHZhciB3b3JkU3BhY2luZyA9IHRleHRTdGF0ZS53b3JkU3BhY2luZztcbiAgICAgICAgICAgIGNoYXJTcGFjaW5nICs9IHdvcmRTcGFjaW5nO1xuXG4gICAgICAgICAgICBpZiAod29yZFNwYWNpbmcgPiAwKSB7XG4gICAgICAgICAgICAgIGFkZEZha2VTcGFjZXMod29yZFNwYWNpbmcsIHRleHRDaHVuay5zdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB0eCA9IDA7XG4gICAgICAgICAgdmFyIHR5ID0gMDtcblxuICAgICAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgdmFyIHcwID0gZ2x5cGhXaWR0aCAqIHRleHRTdGF0ZS5mb250TWF0cml4WzBdO1xuICAgICAgICAgICAgdHggPSAodzAgKiB0ZXh0U3RhdGUuZm9udFNpemUgKyBjaGFyU3BhY2luZykgKiB0ZXh0U3RhdGUudGV4dEhTY2FsZTtcbiAgICAgICAgICAgIHdpZHRoICs9IHR4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdzEgPSBnbHlwaFdpZHRoICogdGV4dFN0YXRlLmZvbnRNYXRyaXhbMF07XG4gICAgICAgICAgICB0eSA9IHcxICogdGV4dFN0YXRlLmZvbnRTaXplICsgY2hhclNwYWNpbmc7XG4gICAgICAgICAgICBoZWlnaHQgKz0gdHk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgodHgsIHR5KTtcbiAgICAgICAgICB0ZXh0Q2h1bmsuc3RyLnB1c2goZ2x5cGhVbmljb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgIHRleHRDaHVuay5sYXN0QWR2YW5jZVdpZHRoID0gd2lkdGg7XG4gICAgICAgICAgdGV4dENodW5rLndpZHRoICs9IHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHRDaHVuay5sYXN0QWR2YW5jZUhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICB0ZXh0Q2h1bmsuaGVpZ2h0ICs9IE1hdGguYWJzKGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dENodW5rO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBhZGRGYWtlU3BhY2VzKHdpZHRoLCBzdHJCdWYpIHtcbiAgICAgICAgaWYgKHdpZHRoIDwgdGV4dENvbnRlbnRJdGVtLmZha2VTcGFjZU1pbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3aWR0aCA8IHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1pbikge1xuICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiIFwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmFrZVNwYWNlcyA9IE1hdGgucm91bmQod2lkdGggLyB0ZXh0Q29udGVudEl0ZW0uc3BhY2VXaWR0aCk7XG5cbiAgICAgICAgd2hpbGUgKGZha2VTcGFjZXMtLSA+IDApIHtcbiAgICAgICAgICBzdHJCdWYucHVzaChcIiBcIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZmx1c2hUZXh0Q29udGVudEl0ZW0oKSB7XG4gICAgICAgIGlmICghdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0ZXh0Q29udGVudEl0ZW0udmVydGljYWwpIHtcbiAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKj0gdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCAqPSB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRleHRDb250ZW50Lml0ZW1zLnB1c2gocnVuQmlkaVRyYW5zZm9ybSh0ZXh0Q29udGVudEl0ZW0pKTtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS5zdHIubGVuZ3RoID0gMDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZW5xdWV1ZUNodW5rKCkge1xuICAgICAgICBjb25zdCBsZW5ndGggPSB0ZXh0Q29udGVudC5pdGVtcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzaW5rLmVucXVldWUodGV4dENvbnRlbnQsIGxlbmd0aCk7XG4gICAgICAgICAgdGV4dENvbnRlbnQuaXRlbXMgPSBbXTtcbiAgICAgICAgICB0ZXh0Q29udGVudC5zdHlsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB0aW1lU2xvdE1hbmFnZXIgPSBuZXcgVGltZVNsb3RNYW5hZ2VyKCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUJvZHkocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAgIGVucXVldWVDaHVuaygpO1xuICAgICAgICAgIFByb21pc2UuYWxsKFtwcm9taXNlLCBzaW5rLnJlYWR5XSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBwcm9taXNlQm9keShyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRhc2suZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgICB0aW1lU2xvdE1hbmFnZXIucmVzZXQoKTtcbiAgICAgICAgdmFyIHN0b3AsXG4gICAgICAgICAgICBvcGVyYXRpb24gPSB7fSxcbiAgICAgICAgICAgIGFyZ3MgPSBbXTtcblxuICAgICAgICB3aGlsZSAoIShzdG9wID0gdGltZVNsb3RNYW5hZ2VyLmNoZWNrKCkpKSB7XG4gICAgICAgICAgYXJncy5sZW5ndGggPSAwO1xuICAgICAgICAgIG9wZXJhdGlvbi5hcmdzID0gYXJncztcblxuICAgICAgICAgIGlmICghcHJlcHJvY2Vzc29yLnJlYWQob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGV4dFN0YXRlID0gc3RhdGVNYW5hZ2VyLnN0YXRlO1xuICAgICAgICAgIHZhciBmbiA9IG9wZXJhdGlvbi5mbjtcbiAgICAgICAgICBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7XG4gICAgICAgICAgdmFyIGFkdmFuY2UsIGRpZmY7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZuIHwgMCkge1xuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Rm9udDpcbiAgICAgICAgICAgICAgdmFyIGZvbnROYW1lQXJnID0gYXJnc1swXS5uYW1lLFxuICAgICAgICAgICAgICAgICAgZm9udFNpemVBcmcgPSBhcmdzWzFdO1xuXG4gICAgICAgICAgICAgIGlmICh0ZXh0U3RhdGUuZm9udCAmJiBmb250TmFtZUFyZyA9PT0gdGV4dFN0YXRlLmZvbnROYW1lICYmIGZvbnRTaXplQXJnID09PSB0ZXh0U3RhdGUuZm9udFNpemUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgIHRleHRTdGF0ZS5mb250TmFtZSA9IGZvbnROYW1lQXJnO1xuICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udFNpemUgPSBmb250U2l6ZUFyZztcbiAgICAgICAgICAgICAgbmV4dChoYW5kbGVTZXRGb250KGZvbnROYW1lQXJnLCBudWxsKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dFJpc2U6XG4gICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0UmlzZSA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRIU2NhbGU6XG4gICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0SFNjYWxlID0gYXJnc1swXSAvIDEwMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExlYWRpbmc6XG4gICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgIHRleHRTdGF0ZS5sZWFkaW5nID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1vdmVUZXh0OlxuICAgICAgICAgICAgICB2YXIgaXNTYW1lVGV4dExpbmUgPSAhdGV4dFN0YXRlLmZvbnQgPyBmYWxzZSA6ICh0ZXh0U3RhdGUuZm9udC52ZXJ0aWNhbCA/IGFyZ3NbMF0gOiBhcmdzWzFdKSA9PT0gMDtcbiAgICAgICAgICAgICAgYWR2YW5jZSA9IGFyZ3NbMF0gLSBhcmdzWzFdO1xuXG4gICAgICAgICAgICAgIGlmIChjb21iaW5lVGV4dEl0ZW1zICYmIGlzU2FtZVRleHRMaW5lICYmIHRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCAmJiBhZHZhbmNlID4gMCAmJiBhZHZhbmNlIDw9IHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1heCkge1xuICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKz0gYXJnc1swXSAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZVdpZHRoO1xuICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgKz0gYXJnc1sxXSAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZUhlaWdodDtcbiAgICAgICAgICAgICAgICBkaWZmID0gYXJnc1swXSAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZVdpZHRoIC0gKGFyZ3NbMV0gLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGFkZEZha2VTcGFjZXMoZGlmZiwgdGV4dENvbnRlbnRJdGVtLnN0cik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0TWF0cml4ID0gdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nTW92ZVRleHQ6XG4gICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgIHRleHRTdGF0ZS5sZWFkaW5nID0gLWFyZ3NbMV07XG4gICAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRNYXRyaXggPSB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXguc2xpY2UoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm5leHRMaW5lOlxuICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICB0ZXh0U3RhdGUuY2FycmlhZ2VSZXR1cm4oKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRNYXRyaXg6XG4gICAgICAgICAgICAgIGFkdmFuY2UgPSB0ZXh0U3RhdGUuY2FsY1RleHRMaW5lTWF0cml4QWR2YW5jZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcblxuICAgICAgICAgICAgICBpZiAoY29tYmluZVRleHRJdGVtcyAmJiBhZHZhbmNlICE9PSBudWxsICYmIHRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCAmJiBhZHZhbmNlLnZhbHVlID4gMCAmJiBhZHZhbmNlLnZhbHVlIDw9IHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1heCkge1xuICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChhZHZhbmNlLndpZHRoLCBhZHZhbmNlLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoICs9IGFkdmFuY2Uud2lkdGggLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VXaWR0aDtcbiAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ICs9IGFkdmFuY2UuaGVpZ2h0IC0gdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlSGVpZ2h0O1xuICAgICAgICAgICAgICAgIGRpZmYgPSBhZHZhbmNlLndpZHRoIC0gdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlV2lkdGggLSAoYWR2YW5jZS5oZWlnaHQgLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGFkZEZha2VTcGFjZXMoZGlmZiwgdGV4dENvbnRlbnRJdGVtLnN0cik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICB0ZXh0U3RhdGUuc2V0VGV4dE1hdHJpeChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLnNldFRleHRMaW5lTWF0cml4KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Q2hhclNwYWNpbmc6XG4gICAgICAgICAgICAgIHRleHRTdGF0ZS5jaGFyU3BhY2luZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRXb3JkU3BhY2luZzpcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLndvcmRTcGFjaW5nID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luVGV4dDpcbiAgICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93U3BhY2VkVGV4dDpcbiAgICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICB2YXIgb2Zmc2V0O1xuXG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGl0ZW1zLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1zW2pdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICBidWlsZFRleHRDb250ZW50SXRlbShpdGVtc1tqXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNOdW0pKGl0ZW1zW2pdKSkge1xuICAgICAgICAgICAgICAgICAgZW5zdXJlVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICBhZHZhbmNlID0gaXRlbXNbal0gKiB0ZXh0U3RhdGUuZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgICAgICAgICAgdmFyIGJyZWFrVGV4dFJ1biA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGV4dFN0YXRlLmZvbnQudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYWR2YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtUZXh0UnVuID0gdGV4dENvbnRlbnRJdGVtLnRleHRSdW5CcmVha0FsbG93ZWQgJiYgYWR2YW5jZSA+IHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1heDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrVGV4dFJ1bikge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgKz0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlID0gLWFkdmFuY2U7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGFkdmFuY2UgKiB0ZXh0U3RhdGUudGV4dEhTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgob2Zmc2V0LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtUZXh0UnVuID0gdGV4dENvbnRlbnRJdGVtLnRleHRSdW5CcmVha0FsbG93ZWQgJiYgYWR2YW5jZSA+IHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1heDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrVGV4dFJ1bikge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS53aWR0aCArPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrVGV4dFJ1bikge1xuICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhZHZhbmNlID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRGYWtlU3BhY2VzKGFkdmFuY2UsIHRleHRDb250ZW50SXRlbS5zdHIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93VGV4dDpcbiAgICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBidWlsZFRleHRDb250ZW50SXRlbShhcmdzWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm5leHRMaW5lU2hvd1RleHQ6XG4gICAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLmNhcnJpYWdlUmV0dXJuKCk7XG4gICAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6XG4gICAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLndvcmRTcGFjaW5nID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLmNoYXJTcGFjaW5nID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLmNhcnJpYWdlUmV0dXJuKCk7XG4gICAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKGFyZ3NbMl0pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRYT2JqZWN0OlxuICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuXG4gICAgICAgICAgICAgIGlmICgheG9ianMpIHtcbiAgICAgICAgICAgICAgICB4b2JqcyA9IHJlc291cmNlcy5nZXQoXCJYT2JqZWN0XCIpIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgbmFtZSA9IGFyZ3NbMF0ubmFtZTtcblxuICAgICAgICAgICAgICBpZiAobmFtZSAmJiBlbXB0eVhPYmplY3RDYWNoZS5nZXRCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG5leHQobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVYT2JqZWN0LCByZWplY3RYT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS5cIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHhvYmogPSB4b2Jqcy5nZXRSYXcobmFtZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoeG9iaiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5WE9iamVjdENhY2hlLmdldEJ5UmVmKHhvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgeG9iaiA9IHhyZWYuZmV0Y2goeG9iaik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCF4b2JqKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlWE9iamVjdCgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh4b2JqKSkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW1cIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHhvYmouZGljdC5nZXQoXCJTdWJ0eXBlXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlKSkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZVwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZS5uYW1lICE9PSBcIkZvcm1cIikge1xuICAgICAgICAgICAgICAgICAgZW1wdHlYT2JqZWN0Q2FjaGUuc2V0KG5hbWUsIHhvYmouZGljdC5vYmpJZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlWE9iamVjdCgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHN0YXRlTWFuYWdlci5zdGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHhPYmpTdGF0ZU1hbmFnZXIgPSBuZXcgU3RhdGVNYW5hZ2VyKGN1cnJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0cml4ID0geG9iai5kaWN0LmdldEFycmF5KFwiTWF0cml4XCIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF0cml4KSAmJiBtYXRyaXgubGVuZ3RoID09PSA2KSB7XG4gICAgICAgICAgICAgICAgICB4T2JqU3RhdGVNYW5hZ2VyLnRyYW5zZm9ybShtYXRyaXgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGVucXVldWVDaHVuaygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpbmtXcmFwcGVyID0ge1xuICAgICAgICAgICAgICAgICAgZW5xdWV1ZUludm9rZWQ6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgICBlbnF1ZXVlKGNodW5rLCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZUludm9rZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUoY2h1bmssIHNpemUpO1xuICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgZ2V0IGRlc2lyZWRTaXplKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2luay5kZXNpcmVkU2l6ZTtcbiAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgIGdldCByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpbmsucmVhZHk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHNlbGYuZ2V0VGV4dENvbnRlbnQoe1xuICAgICAgICAgICAgICAgICAgc3RyZWFtOiB4b2JqLFxuICAgICAgICAgICAgICAgICAgdGFzayxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlczogeG9iai5kaWN0LmdldChcIlJlc291cmNlc1wiKSB8fCByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXI6IHhPYmpTdGF0ZU1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgY29tYmluZVRleHRJdGVtcyxcbiAgICAgICAgICAgICAgICAgIHNpbms6IHNpbmtXcmFwcGVyLFxuICAgICAgICAgICAgICAgICAgc2VlblN0eWxlc1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFzaW5rV3JhcHBlci5lbnF1ZXVlSW52b2tlZCkge1xuICAgICAgICAgICAgICAgICAgICBlbXB0eVhPYmplY3RDYWNoZS5zZXQobmFtZSwgeG9iai5kaWN0Lm9iaklkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9LCByZWplY3RYT2JqZWN0KTtcbiAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfdXRpbC5BYm9ydEV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgWE9iamVjdDogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRHU3RhdGU6XG4gICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgIHZhciBkaWN0TmFtZSA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgIHZhciBleHRHU3RhdGUgPSByZXNvdXJjZXMuZ2V0KFwiRXh0R1N0YXRlXCIpO1xuXG4gICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZXh0R1N0YXRlKSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZGljdE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgZ1N0YXRlID0gZXh0R1N0YXRlLmdldChkaWN0TmFtZS5uYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGdTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBnU3RhdGVGb250ID0gZ1N0YXRlLmdldChcIkZvbnRcIik7XG5cbiAgICAgICAgICAgICAgaWYgKGdTdGF0ZUZvbnQpIHtcbiAgICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udE5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5mb250U2l6ZSA9IGdTdGF0ZUZvbnRbMV07XG4gICAgICAgICAgICAgICAgbmV4dChoYW5kbGVTZXRGb250KG51bGwsIGdTdGF0ZUZvbnRbMF0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGV4dENvbnRlbnQuaXRlbXMubGVuZ3RoID49IHNpbmsuZGVzaXJlZFNpemUpIHtcbiAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0b3ApIHtcbiAgICAgICAgICBuZXh0KGRlZmVycmVkKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyBcIiR7dGFzay5uYW1lfVwiIGAgKyBgdGFzazogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgIGVucXVldWVDaHVuaygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBleHRyYWN0RGF0YVN0cnVjdHVyZXM6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGRpY3QsIGJhc2VEaWN0LCBwcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmO1xuICAgICAgbGV0IGNpZFRvR2lkQnl0ZXM7XG4gICAgICB2YXIgdG9Vbmljb2RlID0gZGljdC5nZXQoXCJUb1VuaWNvZGVcIikgfHwgYmFzZURpY3QuZ2V0KFwiVG9Vbmljb2RlXCIpO1xuICAgICAgdmFyIHRvVW5pY29kZVByb21pc2UgPSB0b1VuaWNvZGUgPyB0aGlzLnJlYWRUb1VuaWNvZGUodG9Vbmljb2RlKSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUpIHtcbiAgICAgICAgdmFyIGNpZFN5c3RlbUluZm8gPSBkaWN0LmdldChcIkNJRFN5c3RlbUluZm9cIik7XG5cbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGNpZFN5c3RlbUluZm8pKSB7XG4gICAgICAgICAgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvID0ge1xuICAgICAgICAgICAgcmVnaXN0cnk6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoY2lkU3lzdGVtSW5mby5nZXQoXCJSZWdpc3RyeVwiKSksXG4gICAgICAgICAgICBvcmRlcmluZzogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjaWRTeXN0ZW1JbmZvLmdldChcIk9yZGVyaW5nXCIpKSxcbiAgICAgICAgICAgIHN1cHBsZW1lbnQ6IGNpZFN5c3RlbUluZm8uZ2V0KFwiU3VwcGxlbWVudFwiKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2lkVG9HaWRNYXAgPSBkaWN0LmdldChcIkNJRFRvR0lETWFwXCIpO1xuXG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGNpZFRvR2lkTWFwKSkge1xuICAgICAgICAgIGNpZFRvR2lkQnl0ZXMgPSBjaWRUb0dpZE1hcC5nZXRCeXRlcygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBkaWZmZXJlbmNlcyA9IFtdO1xuICAgICAgdmFyIGJhc2VFbmNvZGluZ05hbWUgPSBudWxsO1xuICAgICAgdmFyIGVuY29kaW5nO1xuXG4gICAgICBpZiAoZGljdC5oYXMoXCJFbmNvZGluZ1wiKSkge1xuICAgICAgICBlbmNvZGluZyA9IGRpY3QuZ2V0KFwiRW5jb2RpbmdcIik7XG5cbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGVuY29kaW5nKSkge1xuICAgICAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSBlbmNvZGluZy5nZXQoXCJCYXNlRW5jb2RpbmdcIik7XG4gICAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGJhc2VFbmNvZGluZ05hbWUpID8gYmFzZUVuY29kaW5nTmFtZS5uYW1lIDogbnVsbDtcblxuICAgICAgICAgIGlmIChlbmNvZGluZy5oYXMoXCJEaWZmZXJlbmNlc1wiKSkge1xuICAgICAgICAgICAgdmFyIGRpZmZFbmNvZGluZyA9IGVuY29kaW5nLmdldChcIkRpZmZlcmVuY2VzXCIpO1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZGlmZkVuY29kaW5nLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIGRhdGEgPSB4cmVmLmZldGNoSWZSZWYoZGlmZkVuY29kaW5nW2pdKTtcblxuICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZGF0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzW2luZGV4KytdID0gZGF0YS5uYW1lO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBlbnRyeSBpbiAnRGlmZmVyZW5jZXMnIGFycmF5OiAke2RhdGF9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IGVuY29kaW5nLm5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRW5jb2RpbmcgaXMgbm90IGEgTmFtZSBub3IgYSBEaWN0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJhc2VFbmNvZGluZ05hbWUgIT09IFwiTWFjUm9tYW5FbmNvZGluZ1wiICYmIGJhc2VFbmNvZGluZ05hbWUgIT09IFwiTWFjRXhwZXJ0RW5jb2RpbmdcIiAmJiBiYXNlRW5jb2RpbmdOYW1lICE9PSBcIldpbkFuc2lFbmNvZGluZ1wiKSB7XG4gICAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJhc2VFbmNvZGluZ05hbWUpIHtcbiAgICAgICAgcHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykoYmFzZUVuY29kaW5nTmFtZSkuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpc1N5bWJvbGljRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBfZm9udHMuRm9udEZsYWdzLlN5bWJvbGljKTtcbiAgICAgICAgdmFyIGlzTm9uc3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIF9mb250cy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO1xuICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgICAgICBpZiAocHJvcGVydGllcy50eXBlID09PSBcIlRydWVUeXBlXCIgJiYgIWlzTm9uc3ltYm9saWNGb250KSB7XG4gICAgICAgICAgZW5jb2RpbmcgPSBfZW5jb2RpbmdzLldpbkFuc2lFbmNvZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1N5bWJvbGljRm9udCkge1xuICAgICAgICAgIGVuY29kaW5nID0gX2VuY29kaW5ncy5NYWNSb21hbkVuY29kaW5nO1xuXG4gICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLmZpbGUpIHtcbiAgICAgICAgICAgIGlmICgvU3ltYm9sL2kudGVzdChwcm9wZXJ0aWVzLm5hbWUpKSB7XG4gICAgICAgICAgICAgIGVuY29kaW5nID0gX2VuY29kaW5ncy5TeW1ib2xTZXRFbmNvZGluZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL0RpbmdiYXRzfFdpbmdkaW5ncy9pLnRlc3QocHJvcGVydGllcy5uYW1lKSkge1xuICAgICAgICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuWmFwZkRpbmdiYXRzRW5jb2Rpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICAgIH1cblxuICAgICAgcHJvcGVydGllcy5kaWZmZXJlbmNlcyA9IGRpZmZlcmVuY2VzO1xuICAgICAgcHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lID0gYmFzZUVuY29kaW5nTmFtZTtcbiAgICAgIHByb3BlcnRpZXMuaGFzRW5jb2RpbmcgPSAhIWJhc2VFbmNvZGluZ05hbWUgfHwgZGlmZmVyZW5jZXMubGVuZ3RoID4gMDtcbiAgICAgIHByb3BlcnRpZXMuZGljdCA9IGRpY3Q7XG4gICAgICByZXR1cm4gdG9Vbmljb2RlUHJvbWlzZS50aGVuKHJlYWRUb1VuaWNvZGUgPT4ge1xuICAgICAgICBwcm9wZXJ0aWVzLnRvVW5pY29kZSA9IHJlYWRUb1VuaWNvZGU7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkVG9Vbmljb2RlKHByb3BlcnRpZXMpO1xuICAgICAgfSkudGhlbihidWlsdFRvVW5pY29kZSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXMudG9Vbmljb2RlID0gYnVpbHRUb1VuaWNvZGU7XG5cbiAgICAgICAgaWYgKGNpZFRvR2lkQnl0ZXMpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLmNpZFRvR2lkTWFwID0gdGhpcy5yZWFkQ2lkVG9HaWRNYXAoY2lkVG9HaWRCeXRlcywgYnVpbHRUb1VuaWNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2J1aWxkU2ltcGxlRm9udFRvVW5pY29kZShwcm9wZXJ0aWVzLCBmb3JjZUdseXBocyA9IGZhbHNlKSB7XG4gICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghcHJvcGVydGllcy5jb21wb3NpdGUsIFwiTXVzdCBiZSBhIHNpbXBsZSBmb250LlwiKTtcbiAgICAgIGNvbnN0IHRvVW5pY29kZSA9IFtdO1xuICAgICAgY29uc3QgZW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZy5zbGljZSgpO1xuICAgICAgY29uc3QgYmFzZUVuY29kaW5nTmFtZSA9IHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZTtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2VzID0gcHJvcGVydGllcy5kaWZmZXJlbmNlcztcblxuICAgICAgZm9yIChjb25zdCBjaGFyY29kZSBpbiBkaWZmZXJlbmNlcykge1xuICAgICAgICBjb25zdCBnbHlwaE5hbWUgPSBkaWZmZXJlbmNlc1tjaGFyY29kZV07XG5cbiAgICAgICAgaWYgKGdseXBoTmFtZSA9PT0gXCIubm90ZGVmXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVuY29kaW5nW2NoYXJjb2RlXSA9IGdseXBoTmFtZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG5cbiAgICAgIGZvciAoY29uc3QgY2hhcmNvZGUgaW4gZW5jb2RpbmcpIHtcbiAgICAgICAgbGV0IGdseXBoTmFtZSA9IGVuY29kaW5nW2NoYXJjb2RlXTtcblxuICAgICAgICBpZiAoZ2x5cGhOYW1lID09PSBcIlwiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZXQgY29kZSA9IDA7XG5cbiAgICAgICAgICBzd2l0Y2ggKGdseXBoTmFtZVswXSkge1xuICAgICAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICAgICAgaWYgKGdseXBoTmFtZS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gcGFyc2VJbnQoZ2x5cGhOYW1lLnN1YnN0cmluZygxKSwgMTYpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJnXCI6XG4gICAgICAgICAgICAgIGlmIChnbHlwaE5hbWUubGVuZ3RoID09PSA1KSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IHBhcnNlSW50KGdseXBoTmFtZS5zdWJzdHJpbmcoMSksIDE2KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwiQ1wiOlxuICAgICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgICAgaWYgKGdseXBoTmFtZS5sZW5ndGggPj0gMyAmJiBnbHlwaE5hbWUubGVuZ3RoIDw9IDQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlU3RyID0gZ2x5cGhOYW1lLnN1YnN0cmluZygxKTtcblxuICAgICAgICAgICAgICAgIGlmIChmb3JjZUdseXBocykge1xuICAgICAgICAgICAgICAgICAgY29kZSA9IHBhcnNlSW50KGNvZGVTdHIsIDE2KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvZGUgPSArY29kZVN0cjtcblxuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4oY29kZSkgJiYgTnVtYmVyLmlzSW50ZWdlcihwYXJzZUludChjb2RlU3RyLCAxNikpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRTaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zdCB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkoZ2x5cGhOYW1lLCBnbHlwaHNVbmljb2RlTWFwKTtcblxuICAgICAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gdW5pY29kZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvZGUgPiAwICYmIGNvZGUgPD0gMHgxMGZmZmYgJiYgTnVtYmVyLmlzSW50ZWdlcihjb2RlKSkge1xuICAgICAgICAgICAgaWYgKGJhc2VFbmNvZGluZ05hbWUgJiYgY29kZSA9PT0gK2NoYXJjb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJhc2VFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShiYXNlRW5jb2RpbmdOYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoYmFzZUVuY29kaW5nICYmIChnbHlwaE5hbWUgPSBiYXNlRW5jb2RpbmdbY2hhcmNvZGVdKSkge1xuICAgICAgICAgICAgICAgIHRvVW5pY29kZVtjaGFyY29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGdseXBoc1VuaWNvZGVNYXBbZ2x5cGhOYW1lXSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9Vbmljb2RlW2NoYXJjb2RlXSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9Vbmljb2RlW2NoYXJjb2RlXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBfZm9udHMuVG9Vbmljb2RlTWFwKHRvVW5pY29kZSk7XG4gICAgfSxcblxuICAgIGJ1aWxkVG9Vbmljb2RlKHByb3BlcnRpZXMpIHtcbiAgICAgIHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAgPSAhIXByb3BlcnRpZXMudG9Vbmljb2RlICYmIHByb3BlcnRpZXMudG9Vbmljb2RlLmxlbmd0aCA+IDA7XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKSB7XG4gICAgICAgIGlmICghcHJvcGVydGllcy5jb21wb3NpdGUgJiYgcHJvcGVydGllcy5oYXNFbmNvZGluZykge1xuICAgICAgICAgIHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUgPSB0aGlzLl9idWlsZFNpbXBsZUZvbnRUb1VuaWNvZGUocHJvcGVydGllcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb3BlcnRpZXMudG9Vbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2J1aWxkU2ltcGxlRm9udFRvVW5pY29kZShwcm9wZXJ0aWVzKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSAmJiAocHJvcGVydGllcy5jTWFwLmJ1aWx0SW5DTWFwICYmICEocHJvcGVydGllcy5jTWFwIGluc3RhbmNlb2YgX2NtYXAuSWRlbnRpdHlDTWFwKSB8fCBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ucmVnaXN0cnkgPT09IFwiQWRvYmVcIiAmJiAocHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nID09PSBcIkdCMVwiIHx8IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gXCJDTlMxXCIgfHwgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nID09PSBcIkphcGFuMVwiIHx8IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gXCJLb3JlYTFcIikpKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLnJlZ2lzdHJ5O1xuICAgICAgICBjb25zdCBvcmRlcmluZyA9IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZztcblxuICAgICAgICBjb25zdCB1Y3MyQ01hcE5hbWUgPSBfcHJpbWl0aXZlcy5OYW1lLmdldChyZWdpc3RyeSArIFwiLVwiICsgb3JkZXJpbmcgKyBcIi1VQ1MyXCIpO1xuXG4gICAgICAgIHJldHVybiBfY21hcC5DTWFwRmFjdG9yeS5jcmVhdGUoe1xuICAgICAgICAgIGVuY29kaW5nOiB1Y3MyQ01hcE5hbWUsXG4gICAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5mZXRjaEJ1aWx0SW5DTWFwLFxuICAgICAgICAgIHVzZUNNYXA6IG51bGxcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodWNzMkNNYXApIHtcbiAgICAgICAgICBjb25zdCBjTWFwID0gcHJvcGVydGllcy5jTWFwO1xuICAgICAgICAgIGNvbnN0IHRvVW5pY29kZSA9IFtdO1xuICAgICAgICAgIGNNYXAuZm9yRWFjaChmdW5jdGlvbiAoY2hhcmNvZGUsIGNpZCkge1xuICAgICAgICAgICAgaWYgKGNpZCA+IDB4ZmZmZikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB1Y3MyID0gdWNzMkNNYXAubG9va3VwKGNpZCk7XG5cbiAgICAgICAgICAgIGlmICh1Y3MyKSB7XG4gICAgICAgICAgICAgIHRvVW5pY29kZVtjaGFyY29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh1Y3MyLmNoYXJDb2RlQXQoMCkgPDwgOCkgKyB1Y3MyLmNoYXJDb2RlQXQoMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLlRvVW5pY29kZU1hcCh0b1VuaWNvZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgX2ZvbnRzLklkZW50aXR5VG9Vbmljb2RlTWFwKHByb3BlcnRpZXMuZmlyc3RDaGFyLCBwcm9wZXJ0aWVzLmxhc3RDaGFyKSk7XG4gICAgfSxcblxuICAgIHJlYWRUb1VuaWNvZGU6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfcmVhZFRvVW5pY29kZSh0b1VuaWNvZGUpIHtcbiAgICAgIHZhciBjbWFwT2JqID0gdG9Vbmljb2RlO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoY21hcE9iaikpIHtcbiAgICAgICAgcmV0dXJuIF9jbWFwLkNNYXBGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgZW5jb2Rpbmc6IGNtYXBPYmosXG4gICAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5mZXRjaEJ1aWx0SW5DTWFwLFxuICAgICAgICAgIHVzZUNNYXA6IG51bGxcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoY21hcCkge1xuICAgICAgICAgIGlmIChjbWFwIGluc3RhbmNlb2YgX2NtYXAuSWRlbnRpdHlDTWFwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5JZGVudGl0eVRvVW5pY29kZU1hcCgwLCAweGZmZmYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLlRvVW5pY29kZU1hcChjbWFwLmdldE1hcCgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoY21hcE9iaikpIHtcbiAgICAgICAgcmV0dXJuIF9jbWFwLkNNYXBGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgZW5jb2Rpbmc6IGNtYXBPYmosXG4gICAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5mZXRjaEJ1aWx0SW5DTWFwLFxuICAgICAgICAgIHVzZUNNYXA6IG51bGxcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoY21hcCkge1xuICAgICAgICAgIGlmIChjbWFwIGluc3RhbmNlb2YgX2NtYXAuSWRlbnRpdHlDTWFwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5JZGVudGl0eVRvVW5pY29kZU1hcCgwLCAweGZmZmYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBtYXAgPSBuZXcgQXJyYXkoY21hcC5sZW5ndGgpO1xuICAgICAgICAgIGNtYXAuZm9yRWFjaChmdW5jdGlvbiAoY2hhckNvZGUsIHRva2VuKSB7XG4gICAgICAgICAgICB2YXIgc3RyID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdG9rZW4ubGVuZ3RoOyBrICs9IDIpIHtcbiAgICAgICAgICAgICAgdmFyIHcxID0gdG9rZW4uY2hhckNvZGVBdChrKSA8PCA4IHwgdG9rZW4uY2hhckNvZGVBdChrICsgMSk7XG5cbiAgICAgICAgICAgICAgaWYgKCh3MSAmIDB4ZjgwMCkgIT09IDB4ZDgwMCkge1xuICAgICAgICAgICAgICAgIHN0ci5wdXNoKHcxKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGsgKz0gMjtcbiAgICAgICAgICAgICAgdmFyIHcyID0gdG9rZW4uY2hhckNvZGVBdChrKSA8PCA4IHwgdG9rZW4uY2hhckNvZGVBdChrICsgMSk7XG4gICAgICAgICAgICAgIHN0ci5wdXNoKCgodzEgJiAweDNmZikgPDwgMTApICsgKHcyICYgMHgzZmYpICsgMHgxMDAwMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1hcFtjaGFyQ29kZV0gPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0cik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfZm9udHMuVG9Vbmljb2RlTWFwKG1hcCk7XG4gICAgICAgIH0sIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFRvVW5pY29kZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYHJlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfSxcblxuICAgIHJlYWRDaWRUb0dpZE1hcChnbHlwaHNEYXRhLCB0b1VuaWNvZGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZ2x5cGhzRGF0YS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIHZhciBnbHlwaElEID0gZ2x5cGhzRGF0YVtqKytdIDw8IDggfCBnbHlwaHNEYXRhW2pdO1xuICAgICAgICBjb25zdCBjb2RlID0gaiA+PiAxO1xuXG4gICAgICAgIGlmIChnbHlwaElEID09PSAwICYmICF0b1VuaWNvZGUuaGFzKGNvZGUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHRbY29kZV0gPSBnbHlwaElEO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBleHRyYWN0V2lkdGhzOiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX2V4dHJhY3RXaWR0aHMoZGljdCwgZGVzY3JpcHRvciwgcHJvcGVydGllcykge1xuICAgICAgdmFyIHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgICB2YXIgZ2x5cGhzV2lkdGhzID0gW107XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gMDtcbiAgICAgIHZhciBnbHlwaHNWTWV0cmljcyA9IFtdO1xuICAgICAgdmFyIGRlZmF1bHRWTWV0cmljcztcbiAgICAgIHZhciBpLCBpaSwgaiwgamosIHN0YXJ0LCBjb2RlLCB3aWR0aHM7XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICBkZWZhdWx0V2lkdGggPSBkaWN0LmhhcyhcIkRXXCIpID8gZGljdC5nZXQoXCJEV1wiKSA6IDEwMDA7XG4gICAgICAgIHdpZHRocyA9IGRpY3QuZ2V0KFwiV1wiKTtcblxuICAgICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgICAgZm9yIChpID0gMCwgaWkgPSB3aWR0aHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgc3RhcnQgPSB4cmVmLmZldGNoSWZSZWYod2lkdGhzW2krK10pO1xuICAgICAgICAgICAgY29kZSA9IHhyZWYuZmV0Y2hJZlJlZih3aWR0aHNbaV0pO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2RlKSkge1xuICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGNvZGUubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgIGdseXBoc1dpZHRoc1tzdGFydCsrXSA9IHhyZWYuZmV0Y2hJZlJlZihjb2RlW2pdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHdpZHRoID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1srK2ldKTtcblxuICAgICAgICAgICAgICBmb3IgKGogPSBzdGFydDsgaiA8PSBjb2RlOyBqKyspIHtcbiAgICAgICAgICAgICAgICBnbHlwaHNXaWR0aHNbal0gPSB3aWR0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLnZlcnRpY2FsKSB7XG4gICAgICAgICAgdmFyIHZtZXRyaWNzID0gZGljdC5nZXRBcnJheShcIkRXMlwiKSB8fCBbODgwLCAtMTAwMF07XG4gICAgICAgICAgZGVmYXVsdFZNZXRyaWNzID0gW3ZtZXRyaWNzWzFdLCBkZWZhdWx0V2lkdGggKiAwLjUsIHZtZXRyaWNzWzBdXTtcbiAgICAgICAgICB2bWV0cmljcyA9IGRpY3QuZ2V0KFwiVzJcIik7XG5cbiAgICAgICAgICBpZiAodm1ldHJpY3MpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gdm1ldHJpY3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICBzdGFydCA9IHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1tpKytdKTtcbiAgICAgICAgICAgICAgY29kZSA9IHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1tpXSk7XG5cbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29kZSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGNvZGUubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgZ2x5cGhzVk1ldHJpY3Nbc3RhcnQrK10gPSBbeHJlZi5mZXRjaElmUmVmKGNvZGVbaisrXSksIHhyZWYuZmV0Y2hJZlJlZihjb2RlW2orK10pLCB4cmVmLmZldGNoSWZSZWYoY29kZVtqXSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgdm1ldHJpYyA9IFt4cmVmLmZldGNoSWZSZWYodm1ldHJpY3NbKytpXSksIHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1srK2ldKSwgeHJlZi5mZXRjaElmUmVmKHZtZXRyaWNzWysraV0pXTtcblxuICAgICAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGNvZGU7IGorKykge1xuICAgICAgICAgICAgICAgICAgZ2x5cGhzVk1ldHJpY3Nbal0gPSB2bWV0cmljO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGZpcnN0Q2hhciA9IHByb3BlcnRpZXMuZmlyc3RDaGFyO1xuICAgICAgICB3aWR0aHMgPSBkaWN0LmdldChcIldpZHRoc1wiKTtcblxuICAgICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgICAgaiA9IGZpcnN0Q2hhcjtcblxuICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gd2lkdGhzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgIGdseXBoc1dpZHRoc1tqKytdID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1tpXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdFdpZHRoID0gcGFyc2VGbG9hdChkZXNjcmlwdG9yLmdldChcIk1pc3NpbmdXaWR0aFwiKSkgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYmFzZUZvbnROYW1lID0gZGljdC5nZXQoXCJCYXNlRm9udFwiKTtcblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShiYXNlRm9udE5hbWUpKSB7XG4gICAgICAgICAgICB2YXIgbWV0cmljcyA9IHRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGJhc2VGb250TmFtZS5uYW1lKTtcbiAgICAgICAgICAgIGdseXBoc1dpZHRocyA9IHRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgobWV0cmljcy53aWR0aHMsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgZGVmYXVsdFdpZHRoID0gbWV0cmljcy5kZWZhdWx0V2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpc01vbm9zcGFjZSA9IHRydWU7XG4gICAgICB2YXIgZmlyc3RXaWR0aCA9IGRlZmF1bHRXaWR0aDtcblxuICAgICAgZm9yICh2YXIgZ2x5cGggaW4gZ2x5cGhzV2lkdGhzKSB7XG4gICAgICAgIHZhciBnbHlwaFdpZHRoID0gZ2x5cGhzV2lkdGhzW2dseXBoXTtcblxuICAgICAgICBpZiAoIWdseXBoV2lkdGgpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmlyc3RXaWR0aCkge1xuICAgICAgICAgIGZpcnN0V2lkdGggPSBnbHlwaFdpZHRoO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0V2lkdGggIT09IGdseXBoV2lkdGgpIHtcbiAgICAgICAgICBpc01vbm9zcGFjZSA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc01vbm9zcGFjZSkge1xuICAgICAgICBwcm9wZXJ0aWVzLmZsYWdzIHw9IF9mb250cy5Gb250RmxhZ3MuRml4ZWRQaXRjaDtcbiAgICAgIH1cblxuICAgICAgcHJvcGVydGllcy5kZWZhdWx0V2lkdGggPSBkZWZhdWx0V2lkdGg7XG4gICAgICBwcm9wZXJ0aWVzLndpZHRocyA9IGdseXBoc1dpZHRocztcbiAgICAgIHByb3BlcnRpZXMuZGVmYXVsdFZNZXRyaWNzID0gZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgcHJvcGVydGllcy52bWV0cmljcyA9IGdseXBoc1ZNZXRyaWNzO1xuICAgIH0sXG4gICAgaXNTZXJpZkZvbnQ6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfaXNTZXJpZkZvbnQoYmFzZUZvbnROYW1lKSB7XG4gICAgICB2YXIgZm9udE5hbWVXb1N0eWxlID0gYmFzZUZvbnROYW1lLnNwbGl0KFwiLVwiKVswXTtcbiAgICAgIHJldHVybiBmb250TmFtZVdvU3R5bGUgaW4gKDAsIF9zdGFuZGFyZF9mb250cy5nZXRTZXJpZkZvbnRzKSgpIHx8IGZvbnROYW1lV29TdHlsZS5zZWFyY2goL3NlcmlmL2dpKSAhPT0gLTE7XG4gICAgfSxcbiAgICBnZXRCYXNlRm9udE1ldHJpY3M6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfZ2V0QmFzZUZvbnRNZXRyaWNzKG5hbWUpIHtcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSAwO1xuICAgICAgdmFyIHdpZHRocyA9IFtdO1xuICAgICAgdmFyIG1vbm9zcGFjZSA9IGZhbHNlO1xuICAgICAgdmFyIHN0ZEZvbnRNYXAgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN0ZEZvbnRNYXApKCk7XG4gICAgICB2YXIgbG9va3VwTmFtZSA9IHN0ZEZvbnRNYXBbbmFtZV0gfHwgbmFtZTtcbiAgICAgIHZhciBNZXRyaWNzID0gKDAsIF9tZXRyaWNzLmdldE1ldHJpY3MpKCk7XG5cbiAgICAgIGlmICghKGxvb2t1cE5hbWUgaW4gTWV0cmljcykpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTZXJpZkZvbnQobmFtZSkpIHtcbiAgICAgICAgICBsb29rdXBOYW1lID0gXCJUaW1lcy1Sb21hblwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvb2t1cE5hbWUgPSBcIkhlbHZldGljYVwiO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBnbHlwaFdpZHRocyA9IE1ldHJpY3NbbG9va3VwTmFtZV07XG5cbiAgICAgIGlmICgoMCwgX3V0aWwuaXNOdW0pKGdseXBoV2lkdGhzKSkge1xuICAgICAgICBkZWZhdWx0V2lkdGggPSBnbHlwaFdpZHRocztcbiAgICAgICAgbW9ub3NwYWNlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRocyA9IGdseXBoV2lkdGhzKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlZmF1bHRXaWR0aCxcbiAgICAgICAgbW9ub3NwYWNlLFxuICAgICAgICB3aWR0aHNcbiAgICAgIH07XG4gICAgfSxcbiAgICBidWlsZENoYXJDb2RlVG9XaWR0aDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9idWxpbGRDaGFyQ29kZVRvV2lkdGgod2lkdGhzQnlHbHlwaE5hbWUsIHByb3BlcnRpZXMpIHtcbiAgICAgIHZhciB3aWR0aHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdmFyIGRpZmZlcmVuY2VzID0gcHJvcGVydGllcy5kaWZmZXJlbmNlcztcbiAgICAgIHZhciBlbmNvZGluZyA9IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nO1xuXG4gICAgICBmb3IgKHZhciBjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgMjU2OyBjaGFyQ29kZSsrKSB7XG4gICAgICAgIGlmIChjaGFyQ29kZSBpbiBkaWZmZXJlbmNlcyAmJiB3aWR0aHNCeUdseXBoTmFtZVtkaWZmZXJlbmNlc1tjaGFyQ29kZV1dKSB7XG4gICAgICAgICAgd2lkdGhzW2NoYXJDb2RlXSA9IHdpZHRoc0J5R2x5cGhOYW1lW2RpZmZlcmVuY2VzW2NoYXJDb2RlXV07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhckNvZGUgaW4gZW5jb2RpbmcgJiYgd2lkdGhzQnlHbHlwaE5hbWVbZW5jb2RpbmdbY2hhckNvZGVdXSkge1xuICAgICAgICAgIHdpZHRoc1tjaGFyQ29kZV0gPSB3aWR0aHNCeUdseXBoTmFtZVtlbmNvZGluZ1tjaGFyQ29kZV1dO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aWR0aHM7XG4gICAgfSxcbiAgICBwcmVFdmFsdWF0ZUZvbnQ6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfcHJlRXZhbHVhdGVGb250KGRpY3QpIHtcbiAgICAgIHZhciBiYXNlRGljdCA9IGRpY3Q7XG4gICAgICB2YXIgdHlwZSA9IGRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJpbnZhbGlkIGZvbnQgU3VidHlwZVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbXBvc2l0ZSA9IGZhbHNlO1xuICAgICAgdmFyIHVpbnQ4YXJyYXk7XG5cbiAgICAgIGlmICh0eXBlLm5hbWUgPT09IFwiVHlwZTBcIikge1xuICAgICAgICB2YXIgZGYgPSBkaWN0LmdldChcIkRlc2NlbmRhbnRGb250c1wiKTtcblxuICAgICAgICBpZiAoIWRmKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRGVzY2VuZGFudCBmb250cyBhcmUgbm90IHNwZWNpZmllZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3QgPSBBcnJheS5pc0FycmF5KGRmKSA/IHRoaXMueHJlZi5mZXRjaElmUmVmKGRmWzBdKSA6IGRmO1xuICAgICAgICB0eXBlID0gZGljdC5nZXQoXCJTdWJ0eXBlXCIpO1xuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodHlwZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJpbnZhbGlkIGZvbnQgU3VidHlwZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBvc2l0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGljdC5nZXQoXCJGb250RGVzY3JpcHRvclwiKTtcblxuICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgdmFyIGhhc2ggPSBuZXcgX211cm11cmhhc2guTXVybXVySGFzaDNfNjQoKTtcbiAgICAgICAgdmFyIGVuY29kaW5nID0gYmFzZURpY3QuZ2V0UmF3KFwiRW5jb2RpbmdcIik7XG5cbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVuY29kaW5nKSkge1xuICAgICAgICAgIGhhc2gudXBkYXRlKGVuY29kaW5nLm5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgaGFzaC51cGRhdGUoZW5jb2RpbmcudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgdmFyIGtleXMgPSBlbmNvZGluZy5nZXRLZXlzKCk7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBrZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVuY29kaW5nLmdldFJhdyhrZXlzW2ldKTtcblxuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVudHJ5KSkge1xuICAgICAgICAgICAgICBoYXNoLnVwZGF0ZShlbnRyeS5uYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShlbnRyeSkpIHtcbiAgICAgICAgICAgICAgaGFzaC51cGRhdGUoZW50cnkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZW50cnkpKSB7XG4gICAgICAgICAgICAgIHZhciBkaWZmTGVuZ3RoID0gZW50cnkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgZGlmZkJ1ZiA9IG5ldyBBcnJheShkaWZmTGVuZ3RoKTtcblxuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRpZmZMZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBkaWZmRW50cnkgPSBlbnRyeVtqXTtcblxuICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkaWZmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICBkaWZmQnVmW2pdID0gZGlmZkVudHJ5Lm5hbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNOdW0pKGRpZmZFbnRyeSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzUmVmKShkaWZmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICBkaWZmQnVmW2pdID0gZGlmZkVudHJ5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGFzaC51cGRhdGUoZGlmZkJ1Zi5qb2luKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0Q2hhciA9IGRpY3QuZ2V0KFwiRmlyc3RDaGFyXCIpIHx8IDA7XG4gICAgICAgIGNvbnN0IGxhc3RDaGFyID0gZGljdC5nZXQoXCJMYXN0Q2hhclwiKSB8fCAoY29tcG9zaXRlID8gMHhmZmZmIDogMHhmZik7XG4gICAgICAgIGhhc2gudXBkYXRlKGAke2ZpcnN0Q2hhcn0tJHtsYXN0Q2hhcn1gKTtcbiAgICAgICAgdmFyIHRvVW5pY29kZSA9IGRpY3QuZ2V0KFwiVG9Vbmljb2RlXCIpIHx8IGJhc2VEaWN0LmdldChcIlRvVW5pY29kZVwiKTtcblxuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh0b1VuaWNvZGUpKSB7XG4gICAgICAgICAgdmFyIHN0cmVhbSA9IHRvVW5pY29kZS5zdHIgfHwgdG9Vbmljb2RlO1xuICAgICAgICAgIHVpbnQ4YXJyYXkgPSBzdHJlYW0uYnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoc3RyZWFtLmJ1ZmZlci5idWZmZXIsIDAsIHN0cmVhbS5idWZmZXJMZW5ndGgpIDogbmV3IFVpbnQ4QXJyYXkoc3RyZWFtLmJ5dGVzLmJ1ZmZlciwgc3RyZWFtLnN0YXJ0LCBzdHJlYW0uZW5kIC0gc3RyZWFtLnN0YXJ0KTtcbiAgICAgICAgICBoYXNoLnVwZGF0ZSh1aW50OGFycmF5KTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0b1VuaWNvZGUpKSB7XG4gICAgICAgICAgaGFzaC51cGRhdGUodG9Vbmljb2RlLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRocyA9IGRpY3QuZ2V0KFwiV2lkdGhzXCIpIHx8IGJhc2VEaWN0LmdldChcIldpZHRoc1wiKTtcblxuICAgICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgICAgdWludDhhcnJheSA9IG5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheSh3aWR0aHMpLmJ1ZmZlcik7XG4gICAgICAgICAgaGFzaC51cGRhdGUodWludDhhcnJheSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVzY3JpcHRvcixcbiAgICAgICAgZGljdCxcbiAgICAgICAgYmFzZURpY3QsXG4gICAgICAgIGNvbXBvc2l0ZSxcbiAgICAgICAgdHlwZTogdHlwZS5uYW1lLFxuICAgICAgICBoYXNoOiBoYXNoID8gaGFzaC5oZXhkaWdlc3QoKSA6IFwiXCJcbiAgICAgIH07XG4gICAgfSxcbiAgICB0cmFuc2xhdGVGb250OiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX3RyYW5zbGF0ZUZvbnQocHJlRXZhbHVhdGVkRm9udCkge1xuICAgICAgdmFyIGJhc2VEaWN0ID0gcHJlRXZhbHVhdGVkRm9udC5iYXNlRGljdDtcbiAgICAgIHZhciBkaWN0ID0gcHJlRXZhbHVhdGVkRm9udC5kaWN0O1xuICAgICAgdmFyIGNvbXBvc2l0ZSA9IHByZUV2YWx1YXRlZEZvbnQuY29tcG9zaXRlO1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcmVFdmFsdWF0ZWRGb250LmRlc2NyaXB0b3I7XG4gICAgICB2YXIgdHlwZSA9IHByZUV2YWx1YXRlZEZvbnQudHlwZTtcbiAgICAgIHZhciBtYXhDaGFySW5kZXggPSBjb21wb3NpdGUgPyAweGZmZmYgOiAweGZmO1xuICAgICAgdmFyIHByb3BlcnRpZXM7XG4gICAgICBjb25zdCBmaXJzdENoYXIgPSBkaWN0LmdldChcIkZpcnN0Q2hhclwiKSB8fCAwO1xuICAgICAgY29uc3QgbGFzdENoYXIgPSBkaWN0LmdldChcIkxhc3RDaGFyXCIpIHx8IG1heENoYXJJbmRleDtcblxuICAgICAgaWYgKCFkZXNjcmlwdG9yKSB7XG4gICAgICAgIGlmICh0eXBlID09PSBcIlR5cGUzXCIpIHtcbiAgICAgICAgICBkZXNjcmlwdG9yID0gbmV3IF9wcmltaXRpdmVzLkRpY3QobnVsbCk7XG4gICAgICAgICAgZGVzY3JpcHRvci5zZXQoXCJGb250TmFtZVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldCh0eXBlKSk7XG4gICAgICAgICAgZGVzY3JpcHRvci5zZXQoXCJGb250QkJveFwiLCBkaWN0LmdldEFycmF5KFwiRm9udEJCb3hcIikgfHwgWzAsIDAsIDAsIDBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYmFzZUZvbnROYW1lID0gZGljdC5nZXQoXCJCYXNlRm9udFwiKTtcblxuICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYmFzZUZvbnROYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQmFzZSBmb250IGlzIG5vdCBzcGVjaWZpZWRcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYmFzZUZvbnROYW1lID0gYmFzZUZvbnROYW1lLm5hbWUucmVwbGFjZSgvWyxfXS9nLCBcIi1cIik7XG4gICAgICAgICAgdmFyIG1ldHJpY3MgPSB0aGlzLmdldEJhc2VGb250TWV0cmljcyhiYXNlRm9udE5hbWUpO1xuICAgICAgICAgIHZhciBmb250TmFtZVdvU3R5bGUgPSBiYXNlRm9udE5hbWUuc3BsaXQoXCItXCIpWzBdO1xuICAgICAgICAgIHZhciBmbGFncyA9ICh0aGlzLmlzU2VyaWZGb250KGZvbnROYW1lV29TdHlsZSkgPyBfZm9udHMuRm9udEZsYWdzLlNlcmlmIDogMCkgfCAobWV0cmljcy5tb25vc3BhY2UgPyBfZm9udHMuRm9udEZsYWdzLkZpeGVkUGl0Y2ggOiAwKSB8ICgoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN5bWJvbHNGb250cykoKVtmb250TmFtZVdvU3R5bGVdID8gX2ZvbnRzLkZvbnRGbGFncy5TeW1ib2xpYyA6IF9mb250cy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO1xuICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZTogYmFzZUZvbnROYW1lLFxuICAgICAgICAgICAgd2lkdGhzOiBtZXRyaWNzLndpZHRocyxcbiAgICAgICAgICAgIGRlZmF1bHRXaWR0aDogbWV0cmljcy5kZWZhdWx0V2lkdGgsXG4gICAgICAgICAgICBmbGFncyxcbiAgICAgICAgICAgIGZpcnN0Q2hhcixcbiAgICAgICAgICAgIGxhc3RDaGFyXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB3aWR0aHMgPSBkaWN0LmdldChcIldpZHRoc1wiKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgZGljdCwgcHJvcGVydGllcykudGhlbihuZXdQcm9wZXJ0aWVzID0+IHtcbiAgICAgICAgICAgIGlmICh3aWR0aHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZ2x5cGhXaWR0aHMgPSBbXTtcbiAgICAgICAgICAgICAgbGV0IGogPSBmaXJzdENoYXI7XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gd2lkdGhzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBnbHlwaFdpZHRoc1tqKytdID0gdGhpcy54cmVmLmZldGNoSWZSZWYod2lkdGhzW2ldKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMud2lkdGhzID0gZ2x5cGhXaWR0aHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLndpZHRocyA9IHRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgobWV0cmljcy53aWR0aHMsIG5ld1Byb3BlcnRpZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Gb250KGJhc2VGb250TmFtZSwgbnVsbCwgbmV3UHJvcGVydGllcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGZvbnROYW1lID0gZGVzY3JpcHRvci5nZXQoXCJGb250TmFtZVwiKTtcbiAgICAgIHZhciBiYXNlRm9udCA9IGRpY3QuZ2V0KFwiQmFzZUZvbnRcIik7XG5cbiAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGZvbnROYW1lKSkge1xuICAgICAgICBmb250TmFtZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KGZvbnROYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoYmFzZUZvbnQpKSB7XG4gICAgICAgIGJhc2VGb250ID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQoYmFzZUZvbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSAhPT0gXCJUeXBlM1wiKSB7XG4gICAgICAgIHZhciBmb250TmFtZVN0ciA9IGZvbnROYW1lICYmIGZvbnROYW1lLm5hbWU7XG4gICAgICAgIHZhciBiYXNlRm9udFN0ciA9IGJhc2VGb250ICYmIGJhc2VGb250Lm5hbWU7XG5cbiAgICAgICAgaWYgKGZvbnROYW1lU3RyICE9PSBiYXNlRm9udFN0cikge1xuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgVGhlIEZvbnREZXNjcmlwdG9yXFwncyBGb250TmFtZSBpcyBcIiR7Zm9udE5hbWVTdHJ9XCIgYnV0IGAgKyBgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBGb250XFwncyBCYXNlRm9udCBcIiR7YmFzZUZvbnRTdHJ9XCIuYCk7XG5cbiAgICAgICAgICBpZiAoZm9udE5hbWVTdHIgJiYgYmFzZUZvbnRTdHIgJiYgYmFzZUZvbnRTdHIuc3RhcnRzV2l0aChmb250TmFtZVN0cikpIHtcbiAgICAgICAgICAgIGZvbnROYW1lID0gYmFzZUZvbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvbnROYW1lID0gZm9udE5hbWUgfHwgYmFzZUZvbnQ7XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZm9udE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcImludmFsaWQgZm9udCBuYW1lXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZm9udEZpbGUgPSBkZXNjcmlwdG9yLmdldChcIkZvbnRGaWxlXCIsIFwiRm9udEZpbGUyXCIsIFwiRm9udEZpbGUzXCIpO1xuXG4gICAgICBpZiAoZm9udEZpbGUpIHtcbiAgICAgICAgaWYgKGZvbnRGaWxlLmRpY3QpIHtcbiAgICAgICAgICB2YXIgc3VidHlwZSA9IGZvbnRGaWxlLmRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgICAgIGlmIChzdWJ0eXBlKSB7XG4gICAgICAgICAgICBzdWJ0eXBlID0gc3VidHlwZS5uYW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBsZW5ndGgxID0gZm9udEZpbGUuZGljdC5nZXQoXCJMZW5ndGgxXCIpO1xuICAgICAgICAgIHZhciBsZW5ndGgyID0gZm9udEZpbGUuZGljdC5nZXQoXCJMZW5ndGgyXCIpO1xuICAgICAgICAgIHZhciBsZW5ndGgzID0gZm9udEZpbGUuZGljdC5nZXQoXCJMZW5ndGgzXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5hbWU6IGZvbnROYW1lLm5hbWUsXG4gICAgICAgIHN1YnR5cGUsXG4gICAgICAgIGZpbGU6IGZvbnRGaWxlLFxuICAgICAgICBsZW5ndGgxLFxuICAgICAgICBsZW5ndGgyLFxuICAgICAgICBsZW5ndGgzLFxuICAgICAgICBsb2FkZWROYW1lOiBiYXNlRGljdC5sb2FkZWROYW1lLFxuICAgICAgICBjb21wb3NpdGUsXG4gICAgICAgIGZpeGVkUGl0Y2g6IGZhbHNlLFxuICAgICAgICBmb250TWF0cml4OiBkaWN0LmdldEFycmF5KFwiRm9udE1hdHJpeFwiKSB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWCxcbiAgICAgICAgZmlyc3RDaGFyOiBmaXJzdENoYXIgfHwgMCxcbiAgICAgICAgbGFzdENoYXI6IGxhc3RDaGFyIHx8IG1heENoYXJJbmRleCxcbiAgICAgICAgYmJveDogZGVzY3JpcHRvci5nZXRBcnJheShcIkZvbnRCQm94XCIpLFxuICAgICAgICBhc2NlbnQ6IGRlc2NyaXB0b3IuZ2V0KFwiQXNjZW50XCIpLFxuICAgICAgICBkZXNjZW50OiBkZXNjcmlwdG9yLmdldChcIkRlc2NlbnRcIiksXG4gICAgICAgIHhIZWlnaHQ6IGRlc2NyaXB0b3IuZ2V0KFwiWEhlaWdodFwiKSxcbiAgICAgICAgY2FwSGVpZ2h0OiBkZXNjcmlwdG9yLmdldChcIkNhcEhlaWdodFwiKSxcbiAgICAgICAgZmxhZ3M6IGRlc2NyaXB0b3IuZ2V0KFwiRmxhZ3NcIiksXG4gICAgICAgIGl0YWxpY0FuZ2xlOiBkZXNjcmlwdG9yLmdldChcIkl0YWxpY0FuZ2xlXCIpLFxuICAgICAgICBpc1R5cGUzRm9udDogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIgY01hcFByb21pc2U7XG5cbiAgICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgICAgdmFyIGNpZEVuY29kaW5nID0gYmFzZURpY3QuZ2V0KFwiRW5jb2RpbmdcIik7XG5cbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNpZEVuY29kaW5nKSkge1xuICAgICAgICAgIHByb3BlcnRpZXMuY2lkRW5jb2RpbmcgPSBjaWRFbmNvZGluZy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgY01hcFByb21pc2UgPSBfY21hcC5DTWFwRmFjdG9yeS5jcmVhdGUoe1xuICAgICAgICAgIGVuY29kaW5nOiBjaWRFbmNvZGluZyxcbiAgICAgICAgICBmZXRjaEJ1aWx0SW5DTWFwOiB0aGlzLmZldGNoQnVpbHRJbkNNYXAsXG4gICAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChjTWFwKSB7XG4gICAgICAgICAgcHJvcGVydGllcy5jTWFwID0gY01hcDtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnZlcnRpY2FsID0gcHJvcGVydGllcy5jTWFwLnZlcnRpY2FsO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNNYXBQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjTWFwUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGRpY3QsIGJhc2VEaWN0LCBwcm9wZXJ0aWVzKTtcbiAgICAgIH0pLnRoZW4obmV3UHJvcGVydGllcyA9PiB7XG4gICAgICAgIHRoaXMuZXh0cmFjdFdpZHRocyhkaWN0LCBkZXNjcmlwdG9yLCBuZXdQcm9wZXJ0aWVzKTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gXCJUeXBlM1wiKSB7XG4gICAgICAgICAgbmV3UHJvcGVydGllcy5pc1R5cGUzRm9udCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Gb250KGZvbnROYW1lLm5hbWUsIGZvbnRGaWxlLCBuZXdQcm9wZXJ0aWVzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzID0gZnVuY3Rpb24gKGZvbnQsIGdseXBocywgaGFuZGxlcikge1xuICAgIGZ1bmN0aW9uIGJ1aWxkUGF0aChmb250Q2hhcikge1xuICAgICAgaWYgKGZvbnQucmVuZGVyZXIuaGFzQnVpbHRQYXRoKGZvbnRDaGFyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIuc2VuZChcImNvbW1vbm9ialwiLCBbYCR7Zm9udC5sb2FkZWROYW1lfV9wYXRoXyR7Zm9udENoYXJ9YCwgXCJGb250UGF0aFwiLCBmb250LnJlbmRlcmVyLmdldFBhdGhKcyhmb250Q2hhcildKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGdseXBoIG9mIGdseXBocykge1xuICAgICAgYnVpbGRQYXRoKGdseXBoLmZvbnRDaGFyKTtcbiAgICAgIGNvbnN0IGFjY2VudCA9IGdseXBoLmFjY2VudDtcblxuICAgICAgaWYgKGFjY2VudCAmJiBhY2NlbnQuZm9udENoYXIpIHtcbiAgICAgICAgYnVpbGRQYXRoKGFjY2VudC5mb250Q2hhcik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIFBhcnRpYWxFdmFsdWF0b3IuZ2V0RmFsbGJhY2tGb250RGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fZmFsbGJhY2tGb250RGljdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZhbGxiYWNrRm9udERpY3Q7XG4gICAgfVxuXG4gICAgY29uc3QgZGljdCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KCk7XG4gICAgZGljdC5zZXQoXCJCYXNlRm9udFwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIlBERkpTLUZhbGxiYWNrRm9udFwiKSk7XG4gICAgZGljdC5zZXQoXCJUeXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRmFsbGJhY2tUeXBlXCIpKTtcbiAgICBkaWN0LnNldChcIlN1YnR5cGVcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJGYWxsYmFja1R5cGVcIikpO1xuICAgIGRpY3Quc2V0KFwiRW5jb2RpbmdcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJXaW5BbnNpRW5jb2RpbmdcIikpO1xuICAgIHJldHVybiB0aGlzLl9mYWxsYmFja0ZvbnREaWN0ID0gZGljdDtcbiAgfTtcblxuICByZXR1cm4gUGFydGlhbEV2YWx1YXRvcjtcbn0oKTtcblxuZXhwb3J0cy5QYXJ0aWFsRXZhbHVhdG9yID0gUGFydGlhbEV2YWx1YXRvcjtcblxuY2xhc3MgVHJhbnNsYXRlZEZvbnQge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgbG9hZGVkTmFtZSxcbiAgICBmb250LFxuICAgIGRpY3QsXG4gICAgZXh0cmFQcm9wZXJ0aWVzID0gZmFsc2VcbiAgfSkge1xuICAgIHRoaXMubG9hZGVkTmFtZSA9IGxvYWRlZE5hbWU7XG4gICAgdGhpcy5mb250ID0gZm9udDtcbiAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgIHRoaXMuX2V4dHJhUHJvcGVydGllcyA9IGV4dHJhUHJvcGVydGllcztcbiAgICB0aGlzLnR5cGUzTG9hZGVkID0gbnVsbDtcbiAgICB0aGlzLnNlbnQgPSBmYWxzZTtcbiAgfVxuXG4gIHNlbmQoaGFuZGxlcikge1xuICAgIGlmICh0aGlzLnNlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbnQgPSB0cnVlO1xuICAgIGhhbmRsZXIuc2VuZChcImNvbW1vbm9ialwiLCBbdGhpcy5sb2FkZWROYW1lLCBcIkZvbnRcIiwgdGhpcy5mb250LmV4cG9ydERhdGEodGhpcy5fZXh0cmFQcm9wZXJ0aWVzKV0pO1xuICB9XG5cbiAgZmFsbGJhY2soaGFuZGxlcikge1xuICAgIGlmICghdGhpcy5mb250LmRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZvbnQuZGlzYWJsZUZvbnRGYWNlID0gdHJ1ZTtcbiAgICBjb25zdCBnbHlwaHMgPSB0aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcztcbiAgICBQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCwgZ2x5cGhzLCBoYW5kbGVyKTtcbiAgfVxuXG4gIGxvYWRUeXBlM0RhdGEoZXZhbHVhdG9yLCByZXNvdXJjZXMsIHBhcmVudE9wZXJhdG9yTGlzdCwgdGFzaykge1xuICAgIGlmICghdGhpcy5mb250LmlzVHlwZTNGb250KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGJlIGEgVHlwZTMgZm9udC5cIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZTNMb2FkZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUzTG9hZGVkO1xuICAgIH1cblxuICAgIHZhciB0eXBlM09wdGlvbnMgPSBPYmplY3QuY3JlYXRlKGV2YWx1YXRvci5vcHRpb25zKTtcbiAgICB0eXBlM09wdGlvbnMuaWdub3JlRXJyb3JzID0gZmFsc2U7XG4gICAgdmFyIHR5cGUzRXZhbHVhdG9yID0gZXZhbHVhdG9yLmNsb25lKHR5cGUzT3B0aW9ucyk7XG4gICAgdHlwZTNFdmFsdWF0b3IucGFyc2luZ1R5cGUzRm9udCA9IHRydWU7XG4gICAgdmFyIHRyYW5zbGF0ZWRGb250ID0gdGhpcy5mb250O1xuICAgIHZhciBsb2FkQ2hhclByb2NzUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHZhciBjaGFyUHJvY3MgPSB0aGlzLmRpY3QuZ2V0KFwiQ2hhclByb2NzXCIpO1xuICAgIHZhciBmb250UmVzb3VyY2VzID0gdGhpcy5kaWN0LmdldChcIlJlc291cmNlc1wiKSB8fCByZXNvdXJjZXM7XG4gICAgdmFyIGNoYXJQcm9jS2V5cyA9IGNoYXJQcm9jcy5nZXRLZXlzKCk7XG4gICAgdmFyIGNoYXJQcm9jT3BlcmF0b3JMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2hhclByb2NLZXlzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgY29uc3Qga2V5ID0gY2hhclByb2NLZXlzW2ldO1xuICAgICAgbG9hZENoYXJQcm9jc1Byb21pc2UgPSBsb2FkQ2hhclByb2NzUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGdseXBoU3RyZWFtID0gY2hhclByb2NzLmdldChrZXkpO1xuICAgICAgICB2YXIgb3BlcmF0b3JMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuICAgICAgICByZXR1cm4gdHlwZTNFdmFsdWF0b3IuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgICBzdHJlYW06IGdseXBoU3RyZWFtLFxuICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgcmVzb3VyY2VzOiBmb250UmVzb3VyY2VzLFxuICAgICAgICAgIG9wZXJhdG9yTGlzdFxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjaGFyUHJvY09wZXJhdG9yTGlzdFtrZXldID0gb3BlcmF0b3JMaXN0LmdldElSKCk7XG4gICAgICAgICAgcGFyZW50T3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY2llcyhvcGVyYXRvckxpc3QuZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVHlwZTMgZm9udCByZXNvdXJjZSBcIiR7a2V5fVwiIGlzIG5vdCBhdmFpbGFibGUuYCk7XG4gICAgICAgICAgY29uc3QgZHVtbXlPcGVyYXRvckxpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCk7XG4gICAgICAgICAgY2hhclByb2NPcGVyYXRvckxpc3Rba2V5XSA9IGR1bW15T3BlcmF0b3JMaXN0LmdldElSKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlM0xvYWRlZCA9IGxvYWRDaGFyUHJvY3NQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgdHJhbnNsYXRlZEZvbnQuY2hhclByb2NPcGVyYXRvckxpc3QgPSBjaGFyUHJvY09wZXJhdG9yTGlzdDtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtcbiAgfVxuXG59XG5cbnZhciBTdGF0ZU1hbmFnZXIgPSBmdW5jdGlvbiBTdGF0ZU1hbmFnZXJDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBTdGF0ZU1hbmFnZXIoaW5pdGlhbFN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICB0aGlzLnN0YXRlU3RhY2sgPSBbXTtcbiAgfVxuXG4gIFN0YXRlTWFuYWdlci5wcm90b3R5cGUgPSB7XG4gICAgc2F2ZSgpIHtcbiAgICAgIHZhciBvbGQgPSB0aGlzLnN0YXRlO1xuICAgICAgdGhpcy5zdGF0ZVN0YWNrLnB1c2godGhpcy5zdGF0ZSk7XG4gICAgICB0aGlzLnN0YXRlID0gb2xkLmNsb25lKCk7XG4gICAgfSxcblxuICAgIHJlc3RvcmUoKSB7XG4gICAgICB2YXIgcHJldiA9IHRoaXMuc3RhdGVTdGFjay5wb3AoKTtcblxuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHByZXY7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHRyYW5zZm9ybShhcmdzKSB7XG4gICAgICB0aGlzLnN0YXRlLmN0bSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLCBhcmdzKTtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIFN0YXRlTWFuYWdlcjtcbn0oKTtcblxudmFyIFRleHRTdGF0ZSA9IGZ1bmN0aW9uIFRleHRTdGF0ZUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIFRleHRTdGF0ZSgpIHtcbiAgICB0aGlzLmN0bSA9IG5ldyBGbG9hdDMyQXJyYXkoX3V0aWwuSURFTlRJVFlfTUFUUklYKTtcbiAgICB0aGlzLmZvbnROYW1lID0gbnVsbDtcbiAgICB0aGlzLmZvbnRTaXplID0gMDtcbiAgICB0aGlzLmZvbnQgPSBudWxsO1xuICAgIHRoaXMuZm9udE1hdHJpeCA9IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgIHRoaXMudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWC5zbGljZSgpO1xuICAgIHRoaXMudGV4dExpbmVNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtcbiAgICB0aGlzLmNoYXJTcGFjaW5nID0gMDtcbiAgICB0aGlzLndvcmRTcGFjaW5nID0gMDtcbiAgICB0aGlzLmxlYWRpbmcgPSAwO1xuICAgIHRoaXMudGV4dEhTY2FsZSA9IDE7XG4gICAgdGhpcy50ZXh0UmlzZSA9IDA7XG4gIH1cblxuICBUZXh0U3RhdGUucHJvdG90eXBlID0ge1xuICAgIHNldFRleHRNYXRyaXg6IGZ1bmN0aW9uIFRleHRTdGF0ZV9zZXRUZXh0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIHZhciBtID0gdGhpcy50ZXh0TWF0cml4O1xuICAgICAgbVswXSA9IGE7XG4gICAgICBtWzFdID0gYjtcbiAgICAgIG1bMl0gPSBjO1xuICAgICAgbVszXSA9IGQ7XG4gICAgICBtWzRdID0gZTtcbiAgICAgIG1bNV0gPSBmO1xuICAgIH0sXG4gICAgc2V0VGV4dExpbmVNYXRyaXg6IGZ1bmN0aW9uIFRleHRTdGF0ZV9zZXRUZXh0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIHZhciBtID0gdGhpcy50ZXh0TGluZU1hdHJpeDtcbiAgICAgIG1bMF0gPSBhO1xuICAgICAgbVsxXSA9IGI7XG4gICAgICBtWzJdID0gYztcbiAgICAgIG1bM10gPSBkO1xuICAgICAgbVs0XSA9IGU7XG4gICAgICBtWzVdID0gZjtcbiAgICB9LFxuICAgIHRyYW5zbGF0ZVRleHRNYXRyaXg6IGZ1bmN0aW9uIFRleHRTdGF0ZV90cmFuc2xhdGVUZXh0TWF0cml4KHgsIHkpIHtcbiAgICAgIHZhciBtID0gdGhpcy50ZXh0TWF0cml4O1xuICAgICAgbVs0XSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICAgICAgbVs1XSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xuICAgIH0sXG4gICAgdHJhbnNsYXRlVGV4dExpbmVNYXRyaXg6IGZ1bmN0aW9uIFRleHRTdGF0ZV90cmFuc2xhdGVUZXh0TWF0cml4KHgsIHkpIHtcbiAgICAgIHZhciBtID0gdGhpcy50ZXh0TGluZU1hdHJpeDtcbiAgICAgIG1bNF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgICAgIG1bNV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcbiAgICB9LFxuICAgIGNhbGNUZXh0TGluZU1hdHJpeEFkdmFuY2U6IGZ1bmN0aW9uIFRleHRTdGF0ZV9jYWxjVGV4dExpbmVNYXRyaXhBZHZhbmNlKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIHZhciBmb250ID0gdGhpcy5mb250O1xuXG4gICAgICBpZiAoIWZvbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBtID0gdGhpcy50ZXh0TGluZU1hdHJpeDtcblxuICAgICAgaWYgKCEoYSA9PT0gbVswXSAmJiBiID09PSBtWzFdICYmIGMgPT09IG1bMl0gJiYgZCA9PT0gbVszXSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciB0eERpZmYgPSBlIC0gbVs0XSxcbiAgICAgICAgICB0eURpZmYgPSBmIC0gbVs1XTtcblxuICAgICAgaWYgKGZvbnQudmVydGljYWwgJiYgdHhEaWZmICE9PSAwIHx8ICFmb250LnZlcnRpY2FsICYmIHR5RGlmZiAhPT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHR4LFxuICAgICAgICAgIHR5LFxuICAgICAgICAgIGRlbm9taW5hdG9yID0gYSAqIGQgLSBiICogYztcblxuICAgICAgaWYgKGZvbnQudmVydGljYWwpIHtcbiAgICAgICAgdHggPSAtdHlEaWZmICogYyAvIGRlbm9taW5hdG9yO1xuICAgICAgICB0eSA9IHR5RGlmZiAqIGEgLyBkZW5vbWluYXRvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR4ID0gdHhEaWZmICogZCAvIGRlbm9taW5hdG9yO1xuICAgICAgICB0eSA9IC10eERpZmYgKiBiIC8gZGVub21pbmF0b3I7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB0eCxcbiAgICAgICAgaGVpZ2h0OiB0eSxcbiAgICAgICAgdmFsdWU6IGZvbnQudmVydGljYWwgPyB0eSA6IHR4XG4gICAgICB9O1xuICAgIH0sXG4gICAgY2FsY1JlbmRlck1hdHJpeDogZnVuY3Rpb24gVGV4dFN0YXRlX2NhbGNSZW5kZU1hdHJpeChjdG0pIHtcbiAgICAgIHZhciB0c20gPSBbdGhpcy5mb250U2l6ZSAqIHRoaXMudGV4dEhTY2FsZSwgMCwgMCwgdGhpcy5mb250U2l6ZSwgMCwgdGhpcy50ZXh0UmlzZV07XG4gICAgICByZXR1cm4gX3V0aWwuVXRpbC50cmFuc2Zvcm0oY3RtLCBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0aGlzLnRleHRNYXRyaXgsIHRzbSkpO1xuICAgIH0sXG4gICAgY2FycmlhZ2VSZXR1cm46IGZ1bmN0aW9uIFRleHRTdGF0ZV9jYXJyaWFnZVJldHVybigpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoMCwgLXRoaXMubGVhZGluZyk7XG4gICAgICB0aGlzLnRleHRNYXRyaXggPSB0aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7XG4gICAgfSxcbiAgICBjbG9uZTogZnVuY3Rpb24gVGV4dFN0YXRlX2Nsb25lKCkge1xuICAgICAgdmFyIGNsb25lID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgIGNsb25lLnRleHRNYXRyaXggPSB0aGlzLnRleHRNYXRyaXguc2xpY2UoKTtcbiAgICAgIGNsb25lLnRleHRMaW5lTWF0cml4ID0gdGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpO1xuICAgICAgY2xvbmUuZm9udE1hdHJpeCA9IHRoaXMuZm9udE1hdHJpeC5zbGljZSgpO1xuICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIFRleHRTdGF0ZTtcbn0oKTtcblxudmFyIEV2YWxTdGF0ZSA9IGZ1bmN0aW9uIEV2YWxTdGF0ZUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIEV2YWxTdGF0ZSgpIHtcbiAgICB0aGlzLmN0bSA9IG5ldyBGbG9hdDMyQXJyYXkoX3V0aWwuSURFTlRJVFlfTUFUUklYKTtcbiAgICB0aGlzLmZvbnQgPSBudWxsO1xuICAgIHRoaXMudGV4dFJlbmRlcmluZ01vZGUgPSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMO1xuICAgIHRoaXMuZmlsbENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtcbiAgICB0aGlzLnN0cm9rZUNvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtcbiAgfVxuXG4gIEV2YWxTdGF0ZS5wcm90b3R5cGUgPSB7XG4gICAgY2xvbmU6IGZ1bmN0aW9uIENhbnZhc0V4dHJhU3RhdGVfY2xvbmUoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBFdmFsU3RhdGU7XG59KCk7XG5cbnZhciBFdmFsdWF0b3JQcmVwcm9jZXNzb3IgPSBmdW5jdGlvbiBFdmFsdWF0b3JQcmVwcm9jZXNzb3JDbG9zdXJlKCkge1xuICB2YXIgZ2V0T1BNYXAgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQudyA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TGluZVdpZHRoLFxuICAgICAgbnVtQXJnczogMSxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuSiA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TGluZUNhcCxcbiAgICAgIG51bUFyZ3M6IDEsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LmogPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldExpbmVKb2luLFxuICAgICAgbnVtQXJnczogMSxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuTSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TWl0ZXJMaW1pdCxcbiAgICAgIG51bUFyZ3M6IDEsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LmQgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldERhc2gsXG4gICAgICBudW1BcmdzOiAyLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5yaSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LFxuICAgICAgbnVtQXJnczogMSxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuaSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmxhdG5lc3MsXG4gICAgICBudW1BcmdzOiAxLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5ncyA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0R1N0YXRlLFxuICAgICAgbnVtQXJnczogMSxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQucSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2F2ZSxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LlEgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnJlc3RvcmUsXG4gICAgICBudW1BcmdzOiAwLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5jbSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMudHJhbnNmb3JtLFxuICAgICAgbnVtQXJnczogNixcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQubSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMubW92ZVRvLFxuICAgICAgbnVtQXJnczogMixcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQubCA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMubGluZVRvLFxuICAgICAgbnVtQXJnczogMixcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuYyA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuY3VydmVUbyxcbiAgICAgIG51bUFyZ3M6IDYsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LnYgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLmN1cnZlVG8yLFxuICAgICAgbnVtQXJnczogNCxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQueSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuY3VydmVUbzMsXG4gICAgICBudW1BcmdzOiA0LFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5oID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZVBhdGgsXG4gICAgICBudW1BcmdzOiAwLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5yZSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMucmVjdGFuZ2xlLFxuICAgICAgbnVtQXJnczogNCxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuUyA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc3Ryb2tlLFxuICAgICAgbnVtQXJnczogMCxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQucyA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuY2xvc2VTdHJva2UsXG4gICAgICBudW1BcmdzOiAwLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5mID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5maWxsLFxuICAgICAgbnVtQXJnczogMCxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuRiA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuZmlsbCxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0W1wiZipcIl0gPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLmVvRmlsbCxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LkIgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLmZpbGxTdHJva2UsXG4gICAgICBudW1BcmdzOiAwLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdFtcIkIqXCJdID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5lb0ZpbGxTdHJva2UsXG4gICAgICBudW1BcmdzOiAwLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5iID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZUZpbGxTdHJva2UsXG4gICAgICBudW1BcmdzOiAwLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdFtcImIqXCJdID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0Lm4gPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLmVuZFBhdGgsXG4gICAgICBudW1BcmdzOiAwLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5XID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5jbGlwLFxuICAgICAgbnVtQXJnczogMCxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHRbXCJXKlwiXSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuZW9DbGlwLFxuICAgICAgbnVtQXJnczogMCxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuQlQgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLmJlZ2luVGV4dCxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LkVUID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5lbmRUZXh0LFxuICAgICAgbnVtQXJnczogMCxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuVGMgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldENoYXJTcGFjaW5nLFxuICAgICAgbnVtQXJnczogMSxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuVHcgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldFdvcmRTcGFjaW5nLFxuICAgICAgbnVtQXJnczogMSxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuVHogPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldEhTY2FsZSxcbiAgICAgIG51bUFyZ3M6IDEsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LlRMID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMZWFkaW5nLFxuICAgICAgbnVtQXJnczogMSxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuVGYgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldEZvbnQsXG4gICAgICBudW1BcmdzOiAyLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5UciA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGUsXG4gICAgICBudW1BcmdzOiAxLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5UcyA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0VGV4dFJpc2UsXG4gICAgICBudW1BcmdzOiAxLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5UZCA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMubW92ZVRleHQsXG4gICAgICBudW1BcmdzOiAyLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5URCA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TGVhZGluZ01vdmVUZXh0LFxuICAgICAgbnVtQXJnczogMixcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuVG0gPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldFRleHRNYXRyaXgsXG4gICAgICBudW1BcmdzOiA2LFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdFtcIlQqXCJdID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5uZXh0TGluZSxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LlRqID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5zaG93VGV4dCxcbiAgICAgIG51bUFyZ3M6IDEsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LlRKID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5zaG93U3BhY2VkVGV4dCxcbiAgICAgIG51bUFyZ3M6IDEsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0W1wiJ1wiXSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMubmV4dExpbmVTaG93VGV4dCxcbiAgICAgIG51bUFyZ3M6IDEsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0WydcIiddID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dCxcbiAgICAgIG51bUFyZ3M6IDMsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LmQwID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5zZXRDaGFyV2lkdGgsXG4gICAgICBudW1BcmdzOiAyLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5kMSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0Q2hhcldpZHRoQW5kQm91bmRzLFxuICAgICAgbnVtQXJnczogNixcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuQ1MgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2UsXG4gICAgICBudW1BcmdzOiAxLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5jcyA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbENvbG9yU3BhY2UsXG4gICAgICBudW1BcmdzOiAxLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5TQyA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3IsXG4gICAgICBudW1BcmdzOiA0LFxuICAgICAgdmFyaWFibGVBcmdzOiB0cnVlXG4gICAgfTtcbiAgICB0LlNDTiA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3JOLFxuICAgICAgbnVtQXJnczogMzMsXG4gICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICB9O1xuICAgIHQuc2MgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxDb2xvcixcbiAgICAgIG51bUFyZ3M6IDQsXG4gICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICB9O1xuICAgIHQuc2NuID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsQ29sb3JOLFxuICAgICAgbnVtQXJnczogMzMsXG4gICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICB9O1xuICAgIHQuRyA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlR3JheSxcbiAgICAgIG51bUFyZ3M6IDEsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LmcgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxHcmF5LFxuICAgICAgbnVtQXJnczogMSxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuUkcgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yLFxuICAgICAgbnVtQXJnczogMyxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQucmcgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcixcbiAgICAgIG51bUFyZ3M6IDMsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LksgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixcbiAgICAgIG51bUFyZ3M6IDQsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LmsgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxDTVlLQ29sb3IsXG4gICAgICBudW1BcmdzOiA0LFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5zaCA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuc2hhZGluZ0ZpbGwsXG4gICAgICBudW1BcmdzOiAxLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5CSSA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5JbmxpbmVJbWFnZSxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LklEID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbkltYWdlRGF0YSxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LkVJID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5lbmRJbmxpbmVJbWFnZSxcbiAgICAgIG51bUFyZ3M6IDEsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LkRvID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5wYWludFhPYmplY3QsXG4gICAgICBudW1BcmdzOiAxLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5NUCA9IHtcbiAgICAgIGlkOiBfdXRpbC5PUFMubWFya1BvaW50LFxuICAgICAgbnVtQXJnczogMSxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuRFAgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLm1hcmtQb2ludFByb3BzLFxuICAgICAgbnVtQXJnczogMixcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuQk1DID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsXG4gICAgICBudW1BcmdzOiAxLFxuICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgIH07XG4gICAgdC5CREMgPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFxuICAgICAgbnVtQXJnczogMixcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuRU1DID0ge1xuICAgICAgaWQ6IF91dGlsLk9QUy5lbmRNYXJrZWRDb250ZW50LFxuICAgICAgbnVtQXJnczogMCxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuQlggPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLmJlZ2luQ29tcGF0LFxuICAgICAgbnVtQXJnczogMCxcbiAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICB9O1xuICAgIHQuRVggPSB7XG4gICAgICBpZDogX3V0aWwuT1BTLmVuZENvbXBhdCxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgfTtcbiAgICB0LkJNID0gbnVsbDtcbiAgICB0LkJEID0gbnVsbDtcbiAgICB0LnRydWUgPSBudWxsO1xuICAgIHQuZmEgPSBudWxsO1xuICAgIHQuZmFsID0gbnVsbDtcbiAgICB0LmZhbHMgPSBudWxsO1xuICAgIHQuZmFsc2UgPSBudWxsO1xuICAgIHQubnUgPSBudWxsO1xuICAgIHQubnVsID0gbnVsbDtcbiAgICB0Lm51bGwgPSBudWxsO1xuICB9KTtcbiAgY29uc3QgTUFYX0lOVkFMSURfUEFUSF9PUFMgPSAyMDtcblxuICBmdW5jdGlvbiBFdmFsdWF0b3JQcmVwcm9jZXNzb3Ioc3RyZWFtLCB4cmVmLCBzdGF0ZU1hbmFnZXIpIHtcbiAgICB0aGlzLm9wTWFwID0gZ2V0T1BNYXAoKTtcbiAgICB0aGlzLnBhcnNlciA9IG5ldyBfcGFyc2VyLlBhcnNlcih7XG4gICAgICBsZXhlcjogbmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtLCB0aGlzLm9wTWFwKSxcbiAgICAgIHhyZWZcbiAgICB9KTtcbiAgICB0aGlzLnN0YXRlTWFuYWdlciA9IHN0YXRlTWFuYWdlcjtcbiAgICB0aGlzLm5vblByb2Nlc3NlZEFyZ3MgPSBbXTtcbiAgICB0aGlzLl9udW1JbnZhbGlkUGF0aE9QUyA9IDA7XG4gIH1cblxuICBFdmFsdWF0b3JQcmVwcm9jZXNzb3IucHJvdG90eXBlID0ge1xuICAgIGdldCBzYXZlZFN0YXRlc0RlcHRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLnN0YXRlU3RhY2subGVuZ3RoO1xuICAgIH0sXG5cbiAgICByZWFkOiBmdW5jdGlvbiBFdmFsdWF0b3JQcmVwcm9jZXNzb3JfcmVhZChvcGVyYXRpb24pIHtcbiAgICAgIHZhciBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBvYmogPSB0aGlzLnBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuQ21kKSB7XG4gICAgICAgICAgdmFyIGNtZCA9IG9iai5jbWQ7XG4gICAgICAgICAgdmFyIG9wU3BlYyA9IHRoaXMub3BNYXBbY21kXTtcblxuICAgICAgICAgIGlmICghb3BTcGVjKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFVua25vd24gY29tbWFuZCBcIiR7Y21kfVwiLmApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGZuID0gb3BTcGVjLmlkO1xuICAgICAgICAgIHZhciBudW1BcmdzID0gb3BTcGVjLm51bUFyZ3M7XG4gICAgICAgICAgdmFyIGFyZ3NMZW5ndGggPSBhcmdzICE9PSBudWxsID8gYXJncy5sZW5ndGggOiAwO1xuXG4gICAgICAgICAgaWYgKCFvcFNwZWMudmFyaWFibGVBcmdzKSB7XG4gICAgICAgICAgICBpZiAoYXJnc0xlbmd0aCAhPT0gbnVtQXJncykge1xuICAgICAgICAgICAgICB2YXIgbm9uUHJvY2Vzc2VkQXJncyA9IHRoaXMubm9uUHJvY2Vzc2VkQXJncztcblxuICAgICAgICAgICAgICB3aGlsZSAoYXJnc0xlbmd0aCA+IG51bUFyZ3MpIHtcbiAgICAgICAgICAgICAgICBub25Qcm9jZXNzZWRBcmdzLnB1c2goYXJncy5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICBhcmdzTGVuZ3RoLS07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB3aGlsZSAoYXJnc0xlbmd0aCA8IG51bUFyZ3MgJiYgbm9uUHJvY2Vzc2VkQXJncy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJncyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChub25Qcm9jZXNzZWRBcmdzLnBvcCgpKTtcbiAgICAgICAgICAgICAgICBhcmdzTGVuZ3RoKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFyZ3NMZW5ndGggPCBudW1BcmdzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxNc2cgPSBgY29tbWFuZCAke2NtZH06IGV4cGVjdGVkICR7bnVtQXJnc30gYXJncywgYCArIGBidXQgcmVjZWl2ZWQgJHthcmdzTGVuZ3RofSBhcmdzLmA7XG5cbiAgICAgICAgICAgICAgaWYgKGZuID49IF91dGlsLk9QUy5tb3ZlVG8gJiYgZm4gPD0gX3V0aWwuT1BTLmVuZFBhdGggJiYgKyt0aGlzLl9udW1JbnZhbGlkUGF0aE9QUyA+IE1BWF9JTlZBTElEX1BBVEhfT1BTKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkICR7cGFydGlhbE1zZ31gKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgU2tpcHBpbmcgJHtwYXJ0aWFsTXNnfWApO1xuXG4gICAgICAgICAgICAgIGlmIChhcmdzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYXJncy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChhcmdzTGVuZ3RoID4gbnVtQXJncykge1xuICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBDb21tYW5kICR7Y21kfTogZXhwZWN0ZWQgWzAsICR7bnVtQXJnc31dIGFyZ3MsIGAgKyBgYnV0IHJlY2VpdmVkICR7YXJnc0xlbmd0aH0gYXJncy5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnByZXByb2Nlc3NDb21tYW5kKGZuLCBhcmdzKTtcbiAgICAgICAgICBvcGVyYXRpb24uZm4gPSBmbjtcbiAgICAgICAgICBvcGVyYXRpb24uYXJncyA9IGFyZ3M7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqID09PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKGFyZ3MgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGFyZ3MgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmdzLnB1c2gob2JqKTtcblxuICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJUb28gbWFueSBhcmd1bWVudHNcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBwcmVwcm9jZXNzQ29tbWFuZDogZnVuY3Rpb24gRXZhbHVhdG9yUHJlcHJvY2Vzc29yX3ByZXByb2Nlc3NDb21tYW5kKGZuLCBhcmdzKSB7XG4gICAgICBzd2l0Y2ggKGZuIHwgMCkge1xuICAgICAgICBjYXNlIF91dGlsLk9QUy5zYXZlOlxuICAgICAgICAgIHRoaXMuc3RhdGVNYW5hZ2VyLnNhdmUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLk9QUy5yZXN0b3JlOlxuICAgICAgICAgIHRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLk9QUy50cmFuc2Zvcm06XG4gICAgICAgICAgdGhpcy5zdGF0ZU1hbmFnZXIudHJhbnNmb3JtKGFyZ3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIEV2YWx1YXRvclByZXByb2Nlc3Nvcjtcbn0oKTtcblxuLyoqKi8gfSksXG4vKiAyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5DTWFwRmFjdG9yeSA9IGV4cG9ydHMuSWRlbnRpdHlDTWFwID0gZXhwb3J0cy5DTWFwID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMTEpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTIpO1xuXG52YXIgQlVJTFRfSU5fQ01BUFMgPSBbXCJBZG9iZS1HQjEtVUNTMlwiLCBcIkFkb2JlLUNOUzEtVUNTMlwiLCBcIkFkb2JlLUphcGFuMS1VQ1MyXCIsIFwiQWRvYmUtS29yZWExLVVDUzJcIiwgXCI3OC1FVUMtSFwiLCBcIjc4LUVVQy1WXCIsIFwiNzgtSFwiLCBcIjc4LVJLU0otSFwiLCBcIjc4LVJLU0otVlwiLCBcIjc4LVZcIiwgXCI3OG1zLVJLU0otSFwiLCBcIjc4bXMtUktTSi1WXCIsIFwiODNwdi1SS1NKLUhcIiwgXCI5MG1zLVJLU0otSFwiLCBcIjkwbXMtUktTSi1WXCIsIFwiOTBtc3AtUktTSi1IXCIsIFwiOTBtc3AtUktTSi1WXCIsIFwiOTBwdi1SS1NKLUhcIiwgXCI5MHB2LVJLU0otVlwiLCBcIkFkZC1IXCIsIFwiQWRkLVJLU0otSFwiLCBcIkFkZC1SS1NKLVZcIiwgXCJBZGQtVlwiLCBcIkFkb2JlLUNOUzEtMFwiLCBcIkFkb2JlLUNOUzEtMVwiLCBcIkFkb2JlLUNOUzEtMlwiLCBcIkFkb2JlLUNOUzEtM1wiLCBcIkFkb2JlLUNOUzEtNFwiLCBcIkFkb2JlLUNOUzEtNVwiLCBcIkFkb2JlLUNOUzEtNlwiLCBcIkFkb2JlLUdCMS0wXCIsIFwiQWRvYmUtR0IxLTFcIiwgXCJBZG9iZS1HQjEtMlwiLCBcIkFkb2JlLUdCMS0zXCIsIFwiQWRvYmUtR0IxLTRcIiwgXCJBZG9iZS1HQjEtNVwiLCBcIkFkb2JlLUphcGFuMS0wXCIsIFwiQWRvYmUtSmFwYW4xLTFcIiwgXCJBZG9iZS1KYXBhbjEtMlwiLCBcIkFkb2JlLUphcGFuMS0zXCIsIFwiQWRvYmUtSmFwYW4xLTRcIiwgXCJBZG9iZS1KYXBhbjEtNVwiLCBcIkFkb2JlLUphcGFuMS02XCIsIFwiQWRvYmUtS29yZWExLTBcIiwgXCJBZG9iZS1Lb3JlYTEtMVwiLCBcIkFkb2JlLUtvcmVhMS0yXCIsIFwiQjUtSFwiLCBcIkI1LVZcIiwgXCJCNXBjLUhcIiwgXCJCNXBjLVZcIiwgXCJDTlMtRVVDLUhcIiwgXCJDTlMtRVVDLVZcIiwgXCJDTlMxLUhcIiwgXCJDTlMxLVZcIiwgXCJDTlMyLUhcIiwgXCJDTlMyLVZcIiwgXCJFVEhLLUI1LUhcIiwgXCJFVEhLLUI1LVZcIiwgXCJFVGVuLUI1LUhcIiwgXCJFVGVuLUI1LVZcIiwgXCJFVGVubXMtQjUtSFwiLCBcIkVUZW5tcy1CNS1WXCIsIFwiRVVDLUhcIiwgXCJFVUMtVlwiLCBcIkV4dC1IXCIsIFwiRXh0LVJLU0otSFwiLCBcIkV4dC1SS1NKLVZcIiwgXCJFeHQtVlwiLCBcIkdCLUVVQy1IXCIsIFwiR0ItRVVDLVZcIiwgXCJHQi1IXCIsIFwiR0ItVlwiLCBcIkdCSy1FVUMtSFwiLCBcIkdCSy1FVUMtVlwiLCBcIkdCSzJLLUhcIiwgXCJHQksySy1WXCIsIFwiR0JLcC1FVUMtSFwiLCBcIkdCS3AtRVVDLVZcIiwgXCJHQlQtRVVDLUhcIiwgXCJHQlQtRVVDLVZcIiwgXCJHQlQtSFwiLCBcIkdCVC1WXCIsIFwiR0JUcGMtRVVDLUhcIiwgXCJHQlRwYy1FVUMtVlwiLCBcIkdCcGMtRVVDLUhcIiwgXCJHQnBjLUVVQy1WXCIsIFwiSFwiLCBcIkhLZGxhLUI1LUhcIiwgXCJIS2RsYS1CNS1WXCIsIFwiSEtkbGItQjUtSFwiLCBcIkhLZGxiLUI1LVZcIiwgXCJIS2djY3MtQjUtSFwiLCBcIkhLZ2Njcy1CNS1WXCIsIFwiSEttMzE0LUI1LUhcIiwgXCJIS20zMTQtQjUtVlwiLCBcIkhLbTQ3MS1CNS1IXCIsIFwiSEttNDcxLUI1LVZcIiwgXCJIS3Njcy1CNS1IXCIsIFwiSEtzY3MtQjUtVlwiLCBcIkhhbmtha3VcIiwgXCJIaXJhZ2FuYVwiLCBcIktTQy1FVUMtSFwiLCBcIktTQy1FVUMtVlwiLCBcIktTQy1IXCIsIFwiS1NDLUpvaGFiLUhcIiwgXCJLU0MtSm9oYWItVlwiLCBcIktTQy1WXCIsIFwiS1NDbXMtVUhDLUhcIiwgXCJLU0Ntcy1VSEMtSFctSFwiLCBcIktTQ21zLVVIQy1IVy1WXCIsIFwiS1NDbXMtVUhDLVZcIiwgXCJLU0NwYy1FVUMtSFwiLCBcIktTQ3BjLUVVQy1WXCIsIFwiS2F0YWthbmFcIiwgXCJOV1AtSFwiLCBcIk5XUC1WXCIsIFwiUktTSi1IXCIsIFwiUktTSi1WXCIsIFwiUm9tYW5cIiwgXCJVbmlDTlMtVUNTMi1IXCIsIFwiVW5pQ05TLVVDUzItVlwiLCBcIlVuaUNOUy1VVEYxNi1IXCIsIFwiVW5pQ05TLVVURjE2LVZcIiwgXCJVbmlDTlMtVVRGMzItSFwiLCBcIlVuaUNOUy1VVEYzMi1WXCIsIFwiVW5pQ05TLVVURjgtSFwiLCBcIlVuaUNOUy1VVEY4LVZcIiwgXCJVbmlHQi1VQ1MyLUhcIiwgXCJVbmlHQi1VQ1MyLVZcIiwgXCJVbmlHQi1VVEYxNi1IXCIsIFwiVW5pR0ItVVRGMTYtVlwiLCBcIlVuaUdCLVVURjMyLUhcIiwgXCJVbmlHQi1VVEYzMi1WXCIsIFwiVW5pR0ItVVRGOC1IXCIsIFwiVW5pR0ItVVRGOC1WXCIsIFwiVW5pSklTLVVDUzItSFwiLCBcIlVuaUpJUy1VQ1MyLUhXLUhcIiwgXCJVbmlKSVMtVUNTMi1IVy1WXCIsIFwiVW5pSklTLVVDUzItVlwiLCBcIlVuaUpJUy1VVEYxNi1IXCIsIFwiVW5pSklTLVVURjE2LVZcIiwgXCJVbmlKSVMtVVRGMzItSFwiLCBcIlVuaUpJUy1VVEYzMi1WXCIsIFwiVW5pSklTLVVURjgtSFwiLCBcIlVuaUpJUy1VVEY4LVZcIiwgXCJVbmlKSVMyMDA0LVVURjE2LUhcIiwgXCJVbmlKSVMyMDA0LVVURjE2LVZcIiwgXCJVbmlKSVMyMDA0LVVURjMyLUhcIiwgXCJVbmlKSVMyMDA0LVVURjMyLVZcIiwgXCJVbmlKSVMyMDA0LVVURjgtSFwiLCBcIlVuaUpJUzIwMDQtVVRGOC1WXCIsIFwiVW5pSklTUHJvLVVDUzItSFctVlwiLCBcIlVuaUpJU1Byby1VQ1MyLVZcIiwgXCJVbmlKSVNQcm8tVVRGOC1WXCIsIFwiVW5pSklTWDAyMTMtVVRGMzItSFwiLCBcIlVuaUpJU1gwMjEzLVVURjMyLVZcIiwgXCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItSFwiLCBcIlVuaUpJU1gwMjEzMjAwNC1VVEYzMi1WXCIsIFwiVW5pS1MtVUNTMi1IXCIsIFwiVW5pS1MtVUNTMi1WXCIsIFwiVW5pS1MtVVRGMTYtSFwiLCBcIlVuaUtTLVVURjE2LVZcIiwgXCJVbmlLUy1VVEYzMi1IXCIsIFwiVW5pS1MtVVRGMzItVlwiLCBcIlVuaUtTLVVURjgtSFwiLCBcIlVuaUtTLVVURjgtVlwiLCBcIlZcIiwgXCJXUC1TeW1ib2xcIl07XG5jb25zdCBNQVhfTUFQX1JBTkdFID0gMiAqKiAyNCAtIDE7XG5cbmNsYXNzIENNYXAge1xuICBjb25zdHJ1Y3RvcihidWlsdEluQ01hcCA9IGZhbHNlKSB7XG4gICAgdGhpcy5jb2Rlc3BhY2VSYW5nZXMgPSBbW10sIFtdLCBbXSwgW11dO1xuICAgIHRoaXMubnVtQ29kZXNwYWNlUmFuZ2VzID0gMDtcbiAgICB0aGlzLl9tYXAgPSBbXTtcbiAgICB0aGlzLm5hbWUgPSBcIlwiO1xuICAgIHRoaXMudmVydGljYWwgPSBmYWxzZTtcbiAgICB0aGlzLnVzZUNNYXAgPSBudWxsO1xuICAgIHRoaXMuYnVpbHRJbkNNYXAgPSBidWlsdEluQ01hcDtcbiAgfVxuXG4gIGFkZENvZGVzcGFjZVJhbmdlKG4sIGxvdywgaGlnaCkge1xuICAgIHRoaXMuY29kZXNwYWNlUmFuZ2VzW24gLSAxXS5wdXNoKGxvdywgaGlnaCk7XG4gICAgdGhpcy5udW1Db2Rlc3BhY2VSYW5nZXMrKztcbiAgfVxuXG4gIG1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KSB7XG4gICAgaWYgKGhpZ2ggLSBsb3cgPiBNQVhfTUFQX1JBTkdFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtYXBDaWRSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS5cIik7XG4gICAgfVxuXG4gICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgICB0aGlzLl9tYXBbbG93KytdID0gZHN0TG93Kys7XG4gICAgfVxuICB9XG5cbiAgbWFwQmZSYW5nZShsb3csIGhpZ2gsIGRzdExvdykge1xuICAgIGlmIChoaWdoIC0gbG93ID4gTUFYX01BUF9SQU5HRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWFwQmZSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS5cIik7XG4gICAgfVxuXG4gICAgdmFyIGxhc3RCeXRlID0gZHN0TG93Lmxlbmd0aCAtIDE7XG5cbiAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICAgIHRoaXMuX21hcFtsb3crK10gPSBkc3RMb3c7XG4gICAgICBkc3RMb3cgPSBkc3RMb3cuc3Vic3RyaW5nKDAsIGxhc3RCeXRlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoZHN0TG93LmNoYXJDb2RlQXQobGFzdEJ5dGUpICsgMSk7XG4gICAgfVxuICB9XG5cbiAgbWFwQmZSYW5nZVRvQXJyYXkobG93LCBoaWdoLCBhcnJheSkge1xuICAgIGlmIChoaWdoIC0gbG93ID4gTUFYX01BUF9SQU5HRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWFwQmZSYW5nZVRvQXJyYXkgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGlpID0gYXJyYXkubGVuZ3RoO1xuICAgIGxldCBpID0gMDtcblxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpIDwgaWkpIHtcbiAgICAgIHRoaXMuX21hcFtsb3ddID0gYXJyYXlbaSsrXTtcbiAgICAgICsrbG93O1xuICAgIH1cbiAgfVxuXG4gIG1hcE9uZShzcmMsIGRzdCkge1xuICAgIHRoaXMuX21hcFtzcmNdID0gZHN0O1xuICB9XG5cbiAgbG9va3VwKGNvZGUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwW2NvZGVdO1xuICB9XG5cbiAgY29udGFpbnMoY29kZSkge1xuICAgIHJldHVybiB0aGlzLl9tYXBbY29kZV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLl9tYXA7XG4gICAgY29uc3QgbGVuZ3RoID0gbWFwLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobWFwW2ldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjYWxsYmFjayhpLCBtYXBbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgaSBpbiBtYXApIHtcbiAgICAgICAgY2FsbGJhY2soaSwgbWFwW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFyQ29kZU9mKHZhbHVlKSB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5fbWFwO1xuXG4gICAgaWYgKG1hcC5sZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgcmV0dXJuIG1hcC5pbmRleE9mKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgaWYgKG1hcFtjaGFyQ29kZV0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgZ2V0TWFwKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXA7XG4gIH1cblxuICByZWFkQ2hhckNvZGUoc3RyLCBvZmZzZXQsIG91dCkge1xuICAgIGxldCBjID0gMDtcbiAgICBjb25zdCBjb2Rlc3BhY2VSYW5nZXMgPSB0aGlzLmNvZGVzcGFjZVJhbmdlcztcblxuICAgIGZvciAobGV0IG4gPSAwLCBubiA9IGNvZGVzcGFjZVJhbmdlcy5sZW5ndGg7IG4gPCBubjsgbisrKSB7XG4gICAgICBjID0gKGMgPDwgOCB8IHN0ci5jaGFyQ29kZUF0KG9mZnNldCArIG4pKSA+Pj4gMDtcbiAgICAgIGNvbnN0IGNvZGVzcGFjZVJhbmdlID0gY29kZXNwYWNlUmFuZ2VzW25dO1xuXG4gICAgICBmb3IgKGxldCBrID0gMCwga2sgPSBjb2Rlc3BhY2VSYW5nZS5sZW5ndGg7IGsgPCBrazspIHtcbiAgICAgICAgY29uc3QgbG93ID0gY29kZXNwYWNlUmFuZ2VbaysrXTtcbiAgICAgICAgY29uc3QgaGlnaCA9IGNvZGVzcGFjZVJhbmdlW2srK107XG5cbiAgICAgICAgaWYgKGMgPj0gbG93ICYmIGMgPD0gaGlnaCkge1xuICAgICAgICAgIG91dC5jaGFyY29kZSA9IGM7XG4gICAgICAgICAgb3V0Lmxlbmd0aCA9IG4gKyAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG91dC5jaGFyY29kZSA9IDA7XG4gICAgb3V0Lmxlbmd0aCA9IDE7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXAubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzSWRlbnRpdHlDTWFwKCkge1xuICAgIGlmICghKHRoaXMubmFtZSA9PT0gXCJJZGVudGl0eS1IXCIgfHwgdGhpcy5uYW1lID09PSBcIklkZW50aXR5LVZcIikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFwLmxlbmd0aCAhPT0gMHgxMDAwMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMHgxMDAwMDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5fbWFwW2ldICE9PSBpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ01hcCA9IENNYXA7XG5cbmNsYXNzIElkZW50aXR5Q01hcCBleHRlbmRzIENNYXAge1xuICBjb25zdHJ1Y3Rvcih2ZXJ0aWNhbCwgbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy52ZXJ0aWNhbCA9IHZlcnRpY2FsO1xuICAgIHRoaXMuYWRkQ29kZXNwYWNlUmFuZ2UobiwgMCwgMHhmZmZmKTtcbiAgfVxuXG4gIG1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcInNob3VsZCBub3QgY2FsbCBtYXBDaWRSYW5nZVwiKTtcbiAgfVxuXG4gIG1hcEJmUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2VcIik7XG4gIH1cblxuICBtYXBCZlJhbmdlVG9BcnJheShsb3csIGhpZ2gsIGFycmF5KSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlVG9BcnJheVwiKTtcbiAgfVxuXG4gIG1hcE9uZShzcmMsIGRzdCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkT25lXCIpO1xuICB9XG5cbiAgbG9va3VwKGNvZGUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjb2RlKSAmJiBjb2RlIDw9IDB4ZmZmZiA/IGNvZGUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb250YWlucyhjb2RlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgY29kZSA8PSAweGZmZmY7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMHhmZmZmOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKGksIGkpO1xuICAgIH1cbiAgfVxuXG4gIGNoYXJDb2RlT2YodmFsdWUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPD0gMHhmZmZmID8gdmFsdWUgOiAtMTtcbiAgfVxuXG4gIGdldE1hcCgpIHtcbiAgICBjb25zdCBtYXAgPSBuZXcgQXJyYXkoMHgxMDAwMCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAweGZmZmY7IGkrKykge1xuICAgICAgbWFwW2ldID0gaTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gMHgxMDAwMDtcbiAgfVxuXG4gIGdldCBpc0lkZW50aXR5Q01hcCgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwic2hvdWxkIG5vdCBhY2Nlc3MgLmlzSWRlbnRpdHlDTWFwXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5JZGVudGl0eUNNYXAgPSBJZGVudGl0eUNNYXA7XG5cbnZhciBCaW5hcnlDTWFwUmVhZGVyID0gZnVuY3Rpb24gQmluYXJ5Q01hcFJlYWRlckNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGhleFRvSW50KGEsIHNpemUpIHtcbiAgICB2YXIgbiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzaXplOyBpKyspIHtcbiAgICAgIG4gPSBuIDw8IDggfCBhW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBuID4+PiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gaGV4VG9TdHIoYSwgc2l6ZSkge1xuICAgIGlmIChzaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhWzBdLCBhWzFdKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZSA9PT0gMykge1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYVswXSwgYVsxXSwgYVsyXSwgYVszXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYS5zdWJhcnJheSgwLCBzaXplICsgMSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkSGV4KGEsIGIsIHNpemUpIHtcbiAgICB2YXIgYyA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gc2l6ZTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGMgKz0gYVtpXSArIGJbaV07XG4gICAgICBhW2ldID0gYyAmIDI1NTtcbiAgICAgIGMgPj49IDg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5jSGV4KGEsIHNpemUpIHtcbiAgICB2YXIgYyA9IDE7XG5cbiAgICBmb3IgKHZhciBpID0gc2l6ZTsgaSA+PSAwICYmIGMgPiAwOyBpLS0pIHtcbiAgICAgIGMgKz0gYVtpXTtcbiAgICAgIGFbaV0gPSBjICYgMjU1O1xuICAgICAgYyA+Pj0gODtcbiAgICB9XG4gIH1cblxuICB2YXIgTUFYX05VTV9TSVpFID0gMTY7XG4gIHZhciBNQVhfRU5DT0RFRF9OVU1fU0laRSA9IDE5O1xuXG4gIGZ1bmN0aW9uIEJpbmFyeUNNYXBTdHJlYW0oZGF0YSkge1xuICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy5lbmQgPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLnRtcEJ1ZiA9IG5ldyBVaW50OEFycmF5KE1BWF9FTkNPREVEX05VTV9TSVpFKTtcbiAgfVxuXG4gIEJpbmFyeUNNYXBTdHJlYW0ucHJvdG90eXBlID0ge1xuICAgIHJlYWRCeXRlKCkge1xuICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMuZW5kKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdO1xuICAgIH0sXG5cbiAgICByZWFkTnVtYmVyKCkge1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIGxhc3Q7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSB0aGlzLnJlYWRCeXRlKCk7XG5cbiAgICAgICAgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwidW5leHBlY3RlZCBFT0YgaW4gYmNtYXBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0ID0gIShiICYgMHg4MCk7XG4gICAgICAgIG4gPSBuIDw8IDcgfCBiICYgMHg3ZjtcbiAgICAgIH0gd2hpbGUgKCFsYXN0KTtcblxuICAgICAgcmV0dXJuIG47XG4gICAgfSxcblxuICAgIHJlYWRTaWduZWQoKSB7XG4gICAgICB2YXIgbiA9IHRoaXMucmVhZE51bWJlcigpO1xuICAgICAgcmV0dXJuIG4gJiAxID8gfihuID4+PiAxKSA6IG4gPj4+IDE7XG4gICAgfSxcblxuICAgIHJlYWRIZXgobnVtLCBzaXplKSB7XG4gICAgICBudW0uc2V0KHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMucG9zLCB0aGlzLnBvcyArIHNpemUgKyAxKSk7XG4gICAgICB0aGlzLnBvcyArPSBzaXplICsgMTtcbiAgICB9LFxuXG4gICAgcmVhZEhleE51bWJlcihudW0sIHNpemUpIHtcbiAgICAgIHZhciBsYXN0O1xuICAgICAgdmFyIHN0YWNrID0gdGhpcy50bXBCdWYsXG4gICAgICAgICAgc3AgPSAwO1xuXG4gICAgICBkbyB7XG4gICAgICAgIHZhciBiID0gdGhpcy5yZWFkQnl0ZSgpO1xuXG4gICAgICAgIGlmIChiIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdCA9ICEoYiAmIDB4ODApO1xuICAgICAgICBzdGFja1tzcCsrXSA9IGIgJiAweDdmO1xuICAgICAgfSB3aGlsZSAoIWxhc3QpO1xuXG4gICAgICB2YXIgaSA9IHNpemUsXG4gICAgICAgICAgYnVmZmVyID0gMCxcbiAgICAgICAgICBidWZmZXJTaXplID0gMDtcblxuICAgICAgd2hpbGUgKGkgPj0gMCkge1xuICAgICAgICB3aGlsZSAoYnVmZmVyU2l6ZSA8IDggJiYgc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgIGJ1ZmZlciA9IHN0YWNrWy0tc3BdIDw8IGJ1ZmZlclNpemUgfCBidWZmZXI7XG4gICAgICAgICAgYnVmZmVyU2l6ZSArPSA3O1xuICAgICAgICB9XG5cbiAgICAgICAgbnVtW2ldID0gYnVmZmVyICYgMjU1O1xuICAgICAgICBpLS07XG4gICAgICAgIGJ1ZmZlciA+Pj0gODtcbiAgICAgICAgYnVmZmVyU2l6ZSAtPSA4O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZWFkSGV4U2lnbmVkKG51bSwgc2l6ZSkge1xuICAgICAgdGhpcy5yZWFkSGV4TnVtYmVyKG51bSwgc2l6ZSk7XG4gICAgICB2YXIgc2lnbiA9IG51bVtzaXplXSAmIDEgPyAyNTUgOiAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzaXplOyBpKyspIHtcbiAgICAgICAgYyA9IChjICYgMSkgPDwgOCB8IG51bVtpXTtcbiAgICAgICAgbnVtW2ldID0gYyA+PiAxIF4gc2lnbjtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVhZFN0cmluZygpIHtcbiAgICAgIHZhciBsZW4gPSB0aGlzLnJlYWROdW1iZXIoKTtcbiAgICAgIHZhciBzID0gXCJcIjtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkTnVtYmVyKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgfTtcblxuICBmdW5jdGlvbiBwcm9jZXNzQmluYXJ5Q01hcChkYXRhLCBjTWFwLCBleHRlbmQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHN0cmVhbSA9IG5ldyBCaW5hcnlDTWFwU3RyZWFtKGRhdGEpO1xuICAgICAgdmFyIGhlYWRlciA9IHN0cmVhbS5yZWFkQnl0ZSgpO1xuICAgICAgY01hcC52ZXJ0aWNhbCA9ICEhKGhlYWRlciAmIDEpO1xuICAgICAgdmFyIHVzZUNNYXAgPSBudWxsO1xuICAgICAgdmFyIHN0YXJ0ID0gbmV3IFVpbnQ4QXJyYXkoTUFYX05VTV9TSVpFKTtcbiAgICAgIHZhciBlbmQgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpO1xuICAgICAgdmFyIGNoYXIgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpO1xuICAgICAgdmFyIGNoYXJDb2RlID0gbmV3IFVpbnQ4QXJyYXkoTUFYX05VTV9TSVpFKTtcbiAgICAgIHZhciB0bXAgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpO1xuICAgICAgdmFyIGNvZGU7XG4gICAgICB2YXIgYjtcblxuICAgICAgd2hpbGUgKChiID0gc3RyZWFtLnJlYWRCeXRlKCkpID49IDApIHtcbiAgICAgICAgdmFyIHR5cGUgPSBiID4+IDU7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IDcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGIgJiAweDFmKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHVzZUNNYXAgPSBzdHJlYW0ucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZXF1ZW5jZSA9ICEhKGIgJiAweDEwKTtcbiAgICAgICAgdmFyIGRhdGFTaXplID0gYiAmIDE1O1xuXG4gICAgICAgIGlmIChkYXRhU2l6ZSArIDEgPiBNQVhfTlVNX1NJWkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzQmluYXJ5Q01hcDogSW52YWxpZCBkYXRhU2l6ZS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdWNzMkRhdGFTaXplID0gMTtcbiAgICAgICAgdmFyIHN1Yml0ZW1zQ291bnQgPSBzdHJlYW0ucmVhZE51bWJlcigpO1xuICAgICAgICB2YXIgaTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleChzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgY01hcC5hZGRDb2Rlc3BhY2VSYW5nZShkYXRhU2l6ZSArIDEsIGhleFRvSW50KHN0YXJ0LCBkYXRhU2l6ZSksIGhleFRvSW50KGVuZCwgZGF0YVNpemUpKTtcblxuICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChzdGFydCwgZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBjTWFwLmFkZENvZGVzcGFjZVJhbmdlKGRhdGFTaXplICsgMSwgaGV4VG9JbnQoc3RhcnQsIGRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCBkYXRhU2l6ZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICBzdHJlYW0ucmVhZE51bWJlcigpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGluY0hleChlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgYWRkSGV4KHN0YXJ0LCBlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoY2hhciwgZGF0YVNpemUpO1xuICAgICAgICAgICAgY29kZSA9IHN0cmVhbS5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICBjTWFwLm1hcE9uZShoZXhUb0ludChjaGFyLCBkYXRhU2l6ZSksIGNvZGUpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGluY0hleChjaGFyLCBkYXRhU2l6ZSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFzZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHRtcCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgIGFkZEhleChjaGFyLCB0bXAsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZFNpZ25lZCgpICsgKGNvZGUgKyAxKTtcbiAgICAgICAgICAgICAgY01hcC5tYXBPbmUoaGV4VG9JbnQoY2hhciwgZGF0YVNpemUpLCBjb2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleChzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgY29kZSA9IHN0cmVhbS5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICBjTWFwLm1hcENpZFJhbmdlKGhleFRvSW50KHN0YXJ0LCBkYXRhU2l6ZSksIGhleFRvSW50KGVuZCwgZGF0YVNpemUpLCBjb2RlKTtcblxuICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoZW5kLCBkYXRhU2l6ZSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFzZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgYWRkSGV4KHN0YXJ0LCBlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydC5zZXQoZW5kKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBjb2RlID0gc3RyZWFtLnJlYWROdW1iZXIoKTtcbiAgICAgICAgICAgICAgY01hcC5tYXBDaWRSYW5nZShoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSwgY29kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoY2hhciwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICBjTWFwLm1hcE9uZShoZXhUb0ludChjaGFyLCB1Y3MyRGF0YVNpemUpLCBoZXhUb1N0cihjaGFyQ29kZSwgZGF0YVNpemUpKTtcblxuICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoY2hhciwgdWNzMkRhdGFTaXplKTtcblxuICAgICAgICAgICAgICBpZiAoIXNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIodG1wLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgIGFkZEhleChjaGFyLCB0bXAsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpbmNIZXgoY2hhckNvZGUsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhTaWduZWQodG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChjaGFyQ29kZSwgdG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGNNYXAubWFwT25lKGhleFRvSW50KGNoYXIsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KHN0YXJ0LCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleChjaGFyQ29kZSwgZGF0YVNpemUpO1xuICAgICAgICAgICAgY01hcC5tYXBCZlJhbmdlKGhleFRvSW50KHN0YXJ0LCB1Y3MyRGF0YVNpemUpLCBoZXhUb0ludChlbmQsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGluY0hleChlbmQsIHVjczJEYXRhU2l6ZSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFzZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHN0YXJ0LCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgIGFkZEhleChzdGFydCwgZW5kLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0LnNldChlbmQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoY2hhckNvZGUsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgY01hcC5tYXBCZlJhbmdlKGhleFRvSW50KHN0YXJ0LCB1Y3MyRGF0YVNpemUpLCBoZXhUb0ludChlbmQsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwicHJvY2Vzc0JpbmFyeUNNYXA6IFVua25vd24gdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHVzZUNNYXApIHtcbiAgICAgICAgcmVzb2x2ZShleHRlbmQodXNlQ01hcCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoY01hcCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBCaW5hcnlDTWFwUmVhZGVyKCkge31cblxuICBCaW5hcnlDTWFwUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICBwcm9jZXNzOiBwcm9jZXNzQmluYXJ5Q01hcFxuICB9O1xuICByZXR1cm4gQmluYXJ5Q01hcFJlYWRlcjtcbn0oKTtcblxudmFyIENNYXBGYWN0b3J5ID0gZnVuY3Rpb24gQ01hcEZhY3RvcnlDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBzdHJUb0ludChzdHIpIHtcbiAgICB2YXIgYSA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgYSA9IGEgPDwgOCB8IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIH1cblxuICAgIHJldHVybiBhID4+PiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0U3RyaW5nKG9iaikge1xuICAgIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShvYmopKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLlwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RJbnQob2JqKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBpbnQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQmZDaGFyKGNNYXAsIGxleGVyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcImVuZGJmY2hhclwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgdmFyIHNyYyA9IHN0clRvSW50KG9iaik7XG4gICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgdmFyIGRzdCA9IG9iajtcbiAgICAgIGNNYXAubWFwT25lKHNyYywgZHN0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUJmUmFuZ2UoY01hcCwgbGV4ZXIpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRU9GKShvYmopKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwiZW5kYmZyYW5nZVwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgdmFyIGxvdyA9IHN0clRvSW50KG9iaik7XG4gICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgdmFyIGhpZ2ggPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikgfHwgKDAsIF91dGlsLmlzU3RyaW5nKShvYmopKSB7XG4gICAgICAgIHZhciBkc3RMb3cgPSBOdW1iZXIuaXNJbnRlZ2VyKG9iaikgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKG9iaikgOiBvYmo7XG4gICAgICAgIGNNYXAubWFwQmZSYW5nZShsb3csIGhpZ2gsIGRzdExvdyk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcIltcIikpIHtcbiAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwiXVwiKSAmJiAhKDAsIF9wcmltaXRpdmVzLmlzRU9GKShvYmopKSB7XG4gICAgICAgICAgYXJyYXkucHVzaChvYmopO1xuICAgICAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY01hcC5tYXBCZlJhbmdlVG9BcnJheShsb3csIGhpZ2gsIGFycmF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgYmYgcmFuZ2UuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDaWRDaGFyKGNNYXAsIGxleGVyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcImVuZGNpZGNoYXJcIikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgIHZhciBzcmMgPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICBleHBlY3RJbnQob2JqKTtcbiAgICAgIHZhciBkc3QgPSBvYmo7XG4gICAgICBjTWFwLm1hcE9uZShzcmMsIGRzdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDaWRSYW5nZShjTWFwLCBsZXhlcikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJlbmRjaWRyYW5nZVwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgdmFyIGxvdyA9IHN0clRvSW50KG9iaik7XG4gICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgdmFyIGhpZ2ggPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICBleHBlY3RJbnQob2JqKTtcbiAgICAgIHZhciBkc3RMb3cgPSBvYmo7XG4gICAgICBjTWFwLm1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNvZGVzcGFjZVJhbmdlKGNNYXAsIGxleGVyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcImVuZGNvZGVzcGFjZXJhbmdlXCIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoMCwgX3V0aWwuaXNTdHJpbmcpKG9iaikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBsb3cgPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShvYmopKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGlnaCA9IHN0clRvSW50KG9iaik7XG4gICAgICBjTWFwLmFkZENvZGVzcGFjZVJhbmdlKG9iai5sZW5ndGgsIGxvdywgaGlnaCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBjb2Rlc3BhY2UgcmFuZ2UuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VXTW9kZShjTWFwLCBsZXhlcikge1xuICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgIGNNYXAudmVydGljYWwgPSAhIW9iajtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNNYXBOYW1lKGNNYXAsIGxleGVyKSB7XG4gICAgdmFyIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG9iaikgJiYgKDAsIF91dGlsLmlzU3RyaW5nKShvYmoubmFtZSkpIHtcbiAgICAgIGNNYXAubmFtZSA9IG9iai5uYW1lO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ01hcChjTWFwLCBsZXhlciwgZmV0Y2hCdWlsdEluQ01hcCwgdXNlQ01hcCkge1xuICAgIHZhciBwcmV2aW91cztcbiAgICB2YXIgZW1iZWRkZWRVc2VDTWFwO1xuXG4gICAgb2JqTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRU9GKShvYmopKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkob2JqKSkge1xuICAgICAgICAgIGlmIChvYmoubmFtZSA9PT0gXCJXTW9kZVwiKSB7XG4gICAgICAgICAgICBwYXJzZVdNb2RlKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9iai5uYW1lID09PSBcIkNNYXBOYW1lXCIpIHtcbiAgICAgICAgICAgIHBhcnNlQ01hcE5hbWUoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByZXZpb3VzID0gb2JqO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqKSkge1xuICAgICAgICAgIHN3aXRjaCAob2JqLmNtZCkge1xuICAgICAgICAgICAgY2FzZSBcImVuZGNtYXBcIjpcbiAgICAgICAgICAgICAgYnJlYWsgb2JqTG9vcDtcblxuICAgICAgICAgICAgY2FzZSBcInVzZWNtYXBcIjpcbiAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHByZXZpb3VzKSkge1xuICAgICAgICAgICAgICAgIGVtYmVkZGVkVXNlQ01hcCA9IHByZXZpb3VzLm5hbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImJlZ2luY29kZXNwYWNlcmFuZ2VcIjpcbiAgICAgICAgICAgICAgcGFyc2VDb2Rlc3BhY2VSYW5nZShjTWFwLCBsZXhlcik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwiYmVnaW5iZmNoYXJcIjpcbiAgICAgICAgICAgICAgcGFyc2VCZkNoYXIoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImJlZ2luY2lkY2hhclwiOlxuICAgICAgICAgICAgICBwYXJzZUNpZENoYXIoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImJlZ2luYmZyYW5nZVwiOlxuICAgICAgICAgICAgICBwYXJzZUJmUmFuZ2UoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImJlZ2luY2lkcmFuZ2VcIjpcbiAgICAgICAgICAgICAgcGFyc2VDaWRSYW5nZShjTWFwLCBsZXhlcik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkludmFsaWQgY01hcCBkYXRhOiBcIiArIGV4KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF1c2VDTWFwICYmIGVtYmVkZGVkVXNlQ01hcCkge1xuICAgICAgdXNlQ01hcCA9IGVtYmVkZGVkVXNlQ01hcDtcbiAgICB9XG5cbiAgICBpZiAodXNlQ01hcCkge1xuICAgICAgcmV0dXJuIGV4dGVuZENNYXAoY01hcCwgZmV0Y2hCdWlsdEluQ01hcCwgdXNlQ01hcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjTWFwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dGVuZENNYXAoY01hcCwgZmV0Y2hCdWlsdEluQ01hcCwgdXNlQ01hcCkge1xuICAgIHJldHVybiBjcmVhdGVCdWlsdEluQ01hcCh1c2VDTWFwLCBmZXRjaEJ1aWx0SW5DTWFwKS50aGVuKGZ1bmN0aW9uIChuZXdDTWFwKSB7XG4gICAgICBjTWFwLnVzZUNNYXAgPSBuZXdDTWFwO1xuXG4gICAgICBpZiAoY01hcC5udW1Db2Rlc3BhY2VSYW5nZXMgPT09IDApIHtcbiAgICAgICAgdmFyIHVzZUNvZGVzcGFjZVJhbmdlcyA9IGNNYXAudXNlQ01hcC5jb2Rlc3BhY2VSYW5nZXM7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1c2VDb2Rlc3BhY2VSYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjTWFwLmNvZGVzcGFjZVJhbmdlc1tpXSA9IHVzZUNvZGVzcGFjZVJhbmdlc1tpXS5zbGljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY01hcC5udW1Db2Rlc3BhY2VSYW5nZXMgPSBjTWFwLnVzZUNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzO1xuICAgICAgfVxuXG4gICAgICBjTWFwLnVzZUNNYXAuZm9yRWFjaChmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoIWNNYXAuY29udGFpbnMoa2V5KSkge1xuICAgICAgICAgIGNNYXAubWFwT25lKGtleSwgY01hcC51c2VDTWFwLmxvb2t1cChrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY01hcDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUJ1aWx0SW5DTWFwKG5hbWUsIGZldGNoQnVpbHRJbkNNYXApIHtcbiAgICBpZiAobmFtZSA9PT0gXCJJZGVudGl0eS1IXCIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IElkZW50aXR5Q01hcChmYWxzZSwgMikpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gXCJJZGVudGl0eS1WXCIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IElkZW50aXR5Q01hcCh0cnVlLCAyKSk7XG4gICAgfVxuXG4gICAgaWYgKCFCVUlMVF9JTl9DTUFQUy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVua25vd24gQ01hcCBuYW1lOiBcIiArIG5hbWUpKTtcbiAgICB9XG5cbiAgICBpZiAoIWZldGNoQnVpbHRJbkNNYXApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC5cIikpO1xuICAgIH1cblxuICAgIHJldHVybiBmZXRjaEJ1aWx0SW5DTWFwKG5hbWUpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBjTWFwRGF0YSA9IGRhdGEuY01hcERhdGEsXG4gICAgICAgICAgY29tcHJlc3Npb25UeXBlID0gZGF0YS5jb21wcmVzc2lvblR5cGU7XG4gICAgICB2YXIgY01hcCA9IG5ldyBDTWFwKHRydWUpO1xuXG4gICAgICBpZiAoY29tcHJlc3Npb25UeXBlID09PSBfdXRpbC5DTWFwQ29tcHJlc3Npb25UeXBlLkJJTkFSWSkge1xuICAgICAgICByZXR1cm4gbmV3IEJpbmFyeUNNYXBSZWFkZXIoKS5wcm9jZXNzKGNNYXBEYXRhLCBjTWFwLCBmdW5jdGlvbiAodXNlQ01hcCkge1xuICAgICAgICAgIHJldHVybiBleHRlbmRDTWFwKGNNYXAsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXByZXNzaW9uVHlwZSA9PT0gX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5OT05FKSB7XG4gICAgICAgIHZhciBsZXhlciA9IG5ldyBfcGFyc2VyLkxleGVyKG5ldyBfc3RyZWFtLlN0cmVhbShjTWFwRGF0YSkpO1xuICAgICAgICByZXR1cm4gcGFyc2VDTWFwKGNNYXAsIGxleGVyLCBmZXRjaEJ1aWx0SW5DTWFwLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlRPRE86IE9ubHkgQklOQVJZL05PTkUgQ01hcCBjb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlwiKSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGNyZWF0ZShwYXJhbXMpIHtcbiAgICAgIHZhciBlbmNvZGluZyA9IHBhcmFtcy5lbmNvZGluZztcbiAgICAgIHZhciBmZXRjaEJ1aWx0SW5DTWFwID0gcGFyYW1zLmZldGNoQnVpbHRJbkNNYXA7XG4gICAgICB2YXIgdXNlQ01hcCA9IHBhcmFtcy51c2VDTWFwO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZW5jb2RpbmcpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWlsdEluQ01hcChlbmNvZGluZy5uYW1lLCBmZXRjaEJ1aWx0SW5DTWFwKTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShlbmNvZGluZykpIHtcbiAgICAgICAgdmFyIGNNYXAgPSBuZXcgQ01hcCgpO1xuICAgICAgICB2YXIgbGV4ZXIgPSBuZXcgX3BhcnNlci5MZXhlcihlbmNvZGluZyk7XG4gICAgICAgIHJldHVybiBwYXJzZUNNYXAoY01hcCwgbGV4ZXIsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApLnRoZW4oZnVuY3Rpb24gKHBhcnNlZENNYXApIHtcbiAgICAgICAgICBpZiAocGFyc2VkQ01hcC5pc0lkZW50aXR5Q01hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1aWx0SW5DTWFwKHBhcnNlZENNYXAubmFtZSwgZmV0Y2hCdWlsdEluQ01hcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZENNYXA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyByZXF1aXJlZC5cIik7XG4gICAgfVxuXG4gIH07XG59KCk7XG5cbmV4cG9ydHMuQ01hcEZhY3RvcnkgPSBDTWFwRmFjdG9yeTtcblxuLyoqKi8gfSksXG4vKiAyOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRGb250VHlwZSA9IGdldEZvbnRUeXBlO1xuZXhwb3J0cy5JZGVudGl0eVRvVW5pY29kZU1hcCA9IGV4cG9ydHMuVG9Vbmljb2RlTWFwID0gZXhwb3J0cy5Gb250RmxhZ3MgPSBleHBvcnRzLkZvbnQgPSBleHBvcnRzLkVycm9yRm9udCA9IGV4cG9ydHMuU0VBQ19BTkFMWVNJU19FTkFCTEVEID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NmZl9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMwKTtcblxudmFyIF9nbHlwaGxpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMzKTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMyKTtcblxudmFyIF9zdGFuZGFyZF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oMzQpO1xuXG52YXIgX3VuaWNvZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM1KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxudmFyIF9mb250X3JlbmRlcmVyID0gX193X3BkZmpzX3JlcXVpcmVfXygzNik7XG5cbnZhciBfY21hcCA9IF9fd19wZGZqc19yZXF1aXJlX18oMjgpO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTIpO1xuXG52YXIgX3R5cGUxX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMzcpO1xuXG5jb25zdCBQUklWQVRFX1VTRV9BUkVBUyA9IFtbMHhlMDAwLCAweGY4ZmZdLCBbMHgxMDAwMDAsIDB4MTBmZmZkXV07XG52YXIgUERGX0dMWVBIX1NQQUNFX1VOSVRTID0gMTAwMDtcbnZhciBTRUFDX0FOQUxZU0lTX0VOQUJMRUQgPSB0cnVlO1xuZXhwb3J0cy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQgPSBTRUFDX0FOQUxZU0lTX0VOQUJMRUQ7XG5jb25zdCBFWFBPUlRfREFUQV9QUk9QRVJUSUVTID0gW1wiYXNjZW50XCIsIFwiYmJveFwiLCBcImJsYWNrXCIsIFwiYm9sZFwiLCBcImNoYXJQcm9jT3BlcmF0b3JMaXN0XCIsIFwiY29tcG9zaXRlXCIsIFwiZGF0YVwiLCBcImRlZmF1bHRWTWV0cmljc1wiLCBcImRlZmF1bHRXaWR0aFwiLCBcImRlc2NlbnRcIiwgXCJmYWxsYmFja05hbWVcIiwgXCJmb250TWF0cml4XCIsIFwiZm9udFR5cGVcIiwgXCJpc01vbm9zcGFjZVwiLCBcImlzU2VyaWZGb250XCIsIFwiaXNUeXBlM0ZvbnRcIiwgXCJpdGFsaWNcIiwgXCJsb2FkZWROYW1lXCIsIFwibWltZXR5cGVcIiwgXCJtaXNzaW5nRmlsZVwiLCBcIm5hbWVcIiwgXCJyZW1lYXN1cmVcIiwgXCJzdWJ0eXBlXCIsIFwidHlwZVwiLCBcInZlcnRpY2FsXCJdO1xuY29uc3QgRVhQT1JUX0RBVEFfRVhUUkFfUFJPUEVSVElFUyA9IFtcImNNYXBcIiwgXCJkZWZhdWx0RW5jb2RpbmdcIiwgXCJkaWZmZXJlbmNlc1wiLCBcImlzU3ltYm9saWNGb250XCIsIFwic2VhY01hcFwiLCBcInRvRm9udENoYXJcIiwgXCJ0b1VuaWNvZGVcIiwgXCJ2bWV0cmljc1wiLCBcIndpZHRoc1wiXTtcbnZhciBGb250RmxhZ3MgPSB7XG4gIEZpeGVkUGl0Y2g6IDEsXG4gIFNlcmlmOiAyLFxuICBTeW1ib2xpYzogNCxcbiAgU2NyaXB0OiA4LFxuICBOb25zeW1ib2xpYzogMzIsXG4gIEl0YWxpYzogNjQsXG4gIEFsbENhcDogNjU1MzYsXG4gIFNtYWxsQ2FwOiAxMzEwNzIsXG4gIEZvcmNlQm9sZDogMjYyMTQ0XG59O1xuZXhwb3J0cy5Gb250RmxhZ3MgPSBGb250RmxhZ3M7XG52YXIgTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nID0gW1wiLm5vdGRlZlwiLCBcIi5udWxsXCIsIFwibm9ubWFya2luZ3JldHVyblwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3Rlc2luZ2xlXCIsIFwicGFyZW5sZWZ0XCIsIFwicGFyZW5yaWdodFwiLCBcImFzdGVyaXNrXCIsIFwicGx1c1wiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwic2xhc2hcIiwgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwidGhyZWVcIiwgXCJmb3VyXCIsIFwiZml2ZVwiLCBcInNpeFwiLCBcInNldmVuXCIsIFwiZWlnaHRcIiwgXCJuaW5lXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJsZXNzXCIsIFwiZXF1YWxcIiwgXCJncmVhdGVyXCIsIFwicXVlc3Rpb25cIiwgXCJhdFwiLCBcIkFcIiwgXCJCXCIsIFwiQ1wiLCBcIkRcIiwgXCJFXCIsIFwiRlwiLCBcIkdcIiwgXCJIXCIsIFwiSVwiLCBcIkpcIiwgXCJLXCIsIFwiTFwiLCBcIk1cIiwgXCJOXCIsIFwiT1wiLCBcIlBcIiwgXCJRXCIsIFwiUlwiLCBcIlNcIiwgXCJUXCIsIFwiVVwiLCBcIlZcIiwgXCJXXCIsIFwiWFwiLCBcIllcIiwgXCJaXCIsIFwiYnJhY2tldGxlZnRcIiwgXCJiYWNrc2xhc2hcIiwgXCJicmFja2V0cmlnaHRcIiwgXCJhc2NpaWNpcmN1bVwiLCBcInVuZGVyc2NvcmVcIiwgXCJncmF2ZVwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJBZGllcmVzaXNcIiwgXCJBcmluZ1wiLCBcIkNjZWRpbGxhXCIsIFwiRWFjdXRlXCIsIFwiTnRpbGRlXCIsIFwiT2RpZXJlc2lzXCIsIFwiVWRpZXJlc2lzXCIsIFwiYWFjdXRlXCIsIFwiYWdyYXZlXCIsIFwiYWNpcmN1bWZsZXhcIiwgXCJhZGllcmVzaXNcIiwgXCJhdGlsZGVcIiwgXCJhcmluZ1wiLCBcImNjZWRpbGxhXCIsIFwiZWFjdXRlXCIsIFwiZWdyYXZlXCIsIFwiZWNpcmN1bWZsZXhcIiwgXCJlZGllcmVzaXNcIiwgXCJpYWN1dGVcIiwgXCJpZ3JhdmVcIiwgXCJpY2lyY3VtZmxleFwiLCBcImlkaWVyZXNpc1wiLCBcIm50aWxkZVwiLCBcIm9hY3V0ZVwiLCBcIm9ncmF2ZVwiLCBcIm9jaXJjdW1mbGV4XCIsIFwib2RpZXJlc2lzXCIsIFwib3RpbGRlXCIsIFwidWFjdXRlXCIsIFwidWdyYXZlXCIsIFwidWNpcmN1bWZsZXhcIiwgXCJ1ZGllcmVzaXNcIiwgXCJkYWdnZXJcIiwgXCJkZWdyZWVcIiwgXCJjZW50XCIsIFwic3RlcmxpbmdcIiwgXCJzZWN0aW9uXCIsIFwiYnVsbGV0XCIsIFwicGFyYWdyYXBoXCIsIFwiZ2VybWFuZGJsc1wiLCBcInJlZ2lzdGVyZWRcIiwgXCJjb3B5cmlnaHRcIiwgXCJ0cmFkZW1hcmtcIiwgXCJhY3V0ZVwiLCBcImRpZXJlc2lzXCIsIFwibm90ZXF1YWxcIiwgXCJBRVwiLCBcIk9zbGFzaFwiLCBcImluZmluaXR5XCIsIFwicGx1c21pbnVzXCIsIFwibGVzc2VxdWFsXCIsIFwiZ3JlYXRlcmVxdWFsXCIsIFwieWVuXCIsIFwibXVcIiwgXCJwYXJ0aWFsZGlmZlwiLCBcInN1bW1hdGlvblwiLCBcInByb2R1Y3RcIiwgXCJwaVwiLCBcImludGVncmFsXCIsIFwib3JkZmVtaW5pbmVcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJPbWVnYVwiLCBcImFlXCIsIFwib3NsYXNoXCIsIFwicXVlc3Rpb25kb3duXCIsIFwiZXhjbGFtZG93blwiLCBcImxvZ2ljYWxub3RcIiwgXCJyYWRpY2FsXCIsIFwiZmxvcmluXCIsIFwiYXBwcm94ZXF1YWxcIiwgXCJEZWx0YVwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwibm9uYnJlYWtpbmdzcGFjZVwiLCBcIkFncmF2ZVwiLCBcIkF0aWxkZVwiLCBcIk90aWxkZVwiLCBcIk9FXCIsIFwib2VcIiwgXCJlbmRhc2hcIiwgXCJlbWRhc2hcIiwgXCJxdW90ZWRibGxlZnRcIiwgXCJxdW90ZWRibHJpZ2h0XCIsIFwicXVvdGVsZWZ0XCIsIFwicXVvdGVyaWdodFwiLCBcImRpdmlkZVwiLCBcImxvemVuZ2VcIiwgXCJ5ZGllcmVzaXNcIiwgXCJZZGllcmVzaXNcIiwgXCJmcmFjdGlvblwiLCBcImN1cnJlbmN5XCIsIFwiZ3VpbHNpbmdsbGVmdFwiLCBcImd1aWxzaW5nbHJpZ2h0XCIsIFwiZmlcIiwgXCJmbFwiLCBcImRhZ2dlcmRibFwiLCBcInBlcmlvZGNlbnRlcmVkXCIsIFwicXVvdGVzaW5nbGJhc2VcIiwgXCJxdW90ZWRibGJhc2VcIiwgXCJwZXJ0aG91c2FuZFwiLCBcIkFjaXJjdW1mbGV4XCIsIFwiRWNpcmN1bWZsZXhcIiwgXCJBYWN1dGVcIiwgXCJFZGllcmVzaXNcIiwgXCJFZ3JhdmVcIiwgXCJJYWN1dGVcIiwgXCJJY2lyY3VtZmxleFwiLCBcIklkaWVyZXNpc1wiLCBcIklncmF2ZVwiLCBcIk9hY3V0ZVwiLCBcIk9jaXJjdW1mbGV4XCIsIFwiYXBwbGVcIiwgXCJPZ3JhdmVcIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVncmF2ZVwiLCBcImRvdGxlc3NpXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJyaW5nXCIsIFwiY2VkaWxsYVwiLCBcImh1bmdhcnVtbGF1dFwiLCBcIm9nb25la1wiLCBcImNhcm9uXCIsIFwiTHNsYXNoXCIsIFwibHNsYXNoXCIsIFwiU2Nhcm9uXCIsIFwic2Nhcm9uXCIsIFwiWmNhcm9uXCIsIFwiemNhcm9uXCIsIFwiYnJva2VuYmFyXCIsIFwiRXRoXCIsIFwiZXRoXCIsIFwiWWFjdXRlXCIsIFwieWFjdXRlXCIsIFwiVGhvcm5cIiwgXCJ0aG9yblwiLCBcIm1pbnVzXCIsIFwibXVsdGlwbHlcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcIm9uZWhhbGZcIiwgXCJvbmVxdWFydGVyXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcImZyYW5jXCIsIFwiR2JyZXZlXCIsIFwiZ2JyZXZlXCIsIFwiSWRvdGFjY2VudFwiLCBcIlNjZWRpbGxhXCIsIFwic2NlZGlsbGFcIiwgXCJDYWN1dGVcIiwgXCJjYWN1dGVcIiwgXCJDY2Fyb25cIiwgXCJjY2Fyb25cIiwgXCJkY3JvYXRcIl07XG5cbmZ1bmN0aW9uIGFkanVzdFdpZHRocyhwcm9wZXJ0aWVzKSB7XG4gIGlmICghcHJvcGVydGllcy5mb250TWF0cml4KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb3BlcnRpZXMuZm9udE1hdHJpeFswXSA9PT0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVhbMF0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2NhbGUgPSAwLjAwMSAvIHByb3BlcnRpZXMuZm9udE1hdHJpeFswXTtcbiAgdmFyIGdseXBoc1dpZHRocyA9IHByb3BlcnRpZXMud2lkdGhzO1xuXG4gIGZvciAodmFyIGdseXBoIGluIGdseXBoc1dpZHRocykge1xuICAgIGdseXBoc1dpZHRoc1tnbHlwaF0gKj0gc2NhbGU7XG4gIH1cblxuICBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aCAqPSBzY2FsZTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VG9Vbmljb2RlKHByb3BlcnRpZXMsIGJ1aWx0SW5FbmNvZGluZykge1xuICBpZiAocHJvcGVydGllcy5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGJ1aWx0SW5FbmNvZGluZyA9PT0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydGllcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0b1VuaWNvZGUgPSBbXSxcbiAgICAgIGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuXG4gIGZvciAodmFyIGNoYXJDb2RlIGluIGJ1aWx0SW5FbmNvZGluZykge1xuICAgIHZhciBnbHlwaE5hbWUgPSBidWlsdEluRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgIHZhciB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkoZ2x5cGhOYW1lLCBnbHlwaHNVbmljb2RlTWFwKTtcblxuICAgIGlmICh1bmljb2RlICE9PSAtMSkge1xuICAgICAgdG9Vbmljb2RlW2NoYXJDb2RlXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodW5pY29kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvcGVydGllcy50b1VuaWNvZGUuYW1lbmQodG9Vbmljb2RlKTtcbn1cblxuZnVuY3Rpb24gZ2V0Rm9udFR5cGUodHlwZSwgc3VidHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwiVHlwZTFcIjpcbiAgICAgIHJldHVybiBzdWJ0eXBlID09PSBcIlR5cGUxQ1wiID8gX3V0aWwuRm9udFR5cGUuVFlQRTFDIDogX3V0aWwuRm9udFR5cGUuVFlQRTE7XG5cbiAgICBjYXNlIFwiQ0lERm9udFR5cGUwXCI6XG4gICAgICByZXR1cm4gc3VidHlwZSA9PT0gXCJDSURGb250VHlwZTBDXCIgPyBfdXRpbC5Gb250VHlwZS5DSURGT05UVFlQRTBDIDogX3V0aWwuRm9udFR5cGUuQ0lERk9OVFRZUEUwO1xuXG4gICAgY2FzZSBcIk9wZW5UeXBlXCI6XG4gICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuT1BFTlRZUEU7XG5cbiAgICBjYXNlIFwiVHJ1ZVR5cGVcIjpcbiAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5UUlVFVFlQRTtcblxuICAgIGNhc2UgXCJDSURGb250VHlwZTJcIjpcbiAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5DSURGT05UVFlQRTI7XG5cbiAgICBjYXNlIFwiTU1UeXBlMVwiOlxuICAgICAgcmV0dXJuIF91dGlsLkZvbnRUeXBlLk1NVFlQRTE7XG5cbiAgICBjYXNlIFwiVHlwZTBcIjpcbiAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5UWVBFMDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuVU5LTk9XTjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvdmVyR2x5cGhOYW1lKG5hbWUsIGdseXBoc1VuaWNvZGVNYXApIHtcbiAgaWYgKGdseXBoc1VuaWNvZGVNYXBbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgdmFyIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShuYW1lLCBnbHlwaHNVbmljb2RlTWFwKTtcblxuICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZ2x5cGhzVW5pY29kZU1hcCkge1xuICAgICAgaWYgKGdseXBoc1VuaWNvZGVNYXBba2V5XSA9PT0gdW5pY29kZSkge1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICgwLCBfdXRpbC5pbmZvKShcIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6IFwiICsgbmFtZSk7XG4gIHJldHVybiBuYW1lO1xufVxuXG52YXIgR2x5cGggPSBmdW5jdGlvbiBHbHlwaENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIEdseXBoKGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpIHtcbiAgICB0aGlzLmZvbnRDaGFyID0gZm9udENoYXI7XG4gICAgdGhpcy51bmljb2RlID0gdW5pY29kZTtcbiAgICB0aGlzLmFjY2VudCA9IGFjY2VudDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy52bWV0cmljID0gdm1ldHJpYztcbiAgICB0aGlzLm9wZXJhdG9yTGlzdElkID0gb3BlcmF0b3JMaXN0SWQ7XG4gICAgdGhpcy5pc1NwYWNlID0gaXNTcGFjZTtcbiAgICB0aGlzLmlzSW5Gb250ID0gaXNJbkZvbnQ7XG4gIH1cblxuICBHbHlwaC5wcm90b3R5cGUubWF0Y2hlc0ZvckNhY2hlID0gZnVuY3Rpb24gKGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpIHtcbiAgICByZXR1cm4gdGhpcy5mb250Q2hhciA9PT0gZm9udENoYXIgJiYgdGhpcy51bmljb2RlID09PSB1bmljb2RlICYmIHRoaXMuYWNjZW50ID09PSBhY2NlbnQgJiYgdGhpcy53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy52bWV0cmljID09PSB2bWV0cmljICYmIHRoaXMub3BlcmF0b3JMaXN0SWQgPT09IG9wZXJhdG9yTGlzdElkICYmIHRoaXMuaXNTcGFjZSA9PT0gaXNTcGFjZSAmJiB0aGlzLmlzSW5Gb250ID09PSBpc0luRm9udDtcbiAgfTtcblxuICByZXR1cm4gR2x5cGg7XG59KCk7XG5cbnZhciBUb1VuaWNvZGVNYXAgPSBmdW5jdGlvbiBUb1VuaWNvZGVNYXBDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBUb1VuaWNvZGVNYXAoY21hcCA9IFtdKSB7XG4gICAgdGhpcy5fbWFwID0gY21hcDtcbiAgfVxuXG4gIFRvVW5pY29kZU1hcC5wcm90b3R5cGUgPSB7XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tYXAubGVuZ3RoO1xuICAgIH0sXG5cbiAgICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiB0aGlzLl9tYXApIHtcbiAgICAgICAgY2FsbGJhY2soY2hhckNvZGUsIHRoaXMuX21hcFtjaGFyQ29kZV0uY2hhckNvZGVBdCgwKSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGhhcyhpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbWFwW2ldICE9PSB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIGdldChpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbWFwW2ldO1xuICAgIH0sXG5cbiAgICBjaGFyQ29kZU9mKHZhbHVlKSB7XG4gICAgICBjb25zdCBtYXAgPSB0aGlzLl9tYXA7XG5cbiAgICAgIGlmIChtYXAubGVuZ3RoIDw9IDB4MTAwMDApIHtcbiAgICAgICAgcmV0dXJuIG1hcC5pbmRleE9mKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBtYXApIHtcbiAgICAgICAgaWYgKG1hcFtjaGFyQ29kZV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGNoYXJDb2RlIHwgMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gLTE7XG4gICAgfSxcblxuICAgIGFtZW5kKG1hcCkge1xuICAgICAgZm9yICh2YXIgY2hhckNvZGUgaW4gbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcFtjaGFyQ29kZV0gPSBtYXBbY2hhckNvZGVdO1xuICAgICAgfVxuICAgIH1cblxuICB9O1xuICByZXR1cm4gVG9Vbmljb2RlTWFwO1xufSgpO1xuXG5leHBvcnRzLlRvVW5pY29kZU1hcCA9IFRvVW5pY29kZU1hcDtcblxudmFyIElkZW50aXR5VG9Vbmljb2RlTWFwID0gZnVuY3Rpb24gSWRlbnRpdHlUb1VuaWNvZGVNYXBDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBJZGVudGl0eVRvVW5pY29kZU1hcChmaXJzdENoYXIsIGxhc3RDaGFyKSB7XG4gICAgdGhpcy5maXJzdENoYXIgPSBmaXJzdENoYXI7XG4gICAgdGhpcy5sYXN0Q2hhciA9IGxhc3RDaGFyO1xuICB9XG5cbiAgSWRlbnRpdHlUb1VuaWNvZGVNYXAucHJvdG90eXBlID0ge1xuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0Q2hhciArIDEgLSB0aGlzLmZpcnN0Q2hhcjtcbiAgICB9LFxuXG4gICAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMuZmlyc3RDaGFyLCBpaSA9IHRoaXMubGFzdENoYXI7IGkgPD0gaWk7IGkrKykge1xuICAgICAgICBjYWxsYmFjayhpLCBpKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGFzKGkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpcnN0Q2hhciA8PSBpICYmIGkgPD0gdGhpcy5sYXN0Q2hhcjtcbiAgICB9LFxuXG4gICAgZ2V0KGkpIHtcbiAgICAgIGlmICh0aGlzLmZpcnN0Q2hhciA8PSBpICYmIGkgPD0gdGhpcy5sYXN0Q2hhcikge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgY2hhckNvZGVPZih2KSB7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2KSAmJiB2ID49IHRoaXMuZmlyc3RDaGFyICYmIHYgPD0gdGhpcy5sYXN0Q2hhciA/IHYgOiAtMTtcbiAgICB9LFxuXG4gICAgYW1lbmQobWFwKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIGFtZW5kKClcIik7XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBJZGVudGl0eVRvVW5pY29kZU1hcDtcbn0oKTtcblxuZXhwb3J0cy5JZGVudGl0eVRvVW5pY29kZU1hcCA9IElkZW50aXR5VG9Vbmljb2RlTWFwO1xuXG52YXIgT3BlblR5cGVGaWxlQnVpbGRlciA9IGZ1bmN0aW9uIE9wZW5UeXBlRmlsZUJ1aWxkZXJDbG9zdXJlKCkge1xuICBmdW5jdGlvbiB3cml0ZUludDE2KGRlc3QsIG9mZnNldCwgbnVtKSB7XG4gICAgZGVzdFtvZmZzZXRdID0gbnVtID4+IDggJiAweGZmO1xuICAgIGRlc3Rbb2Zmc2V0ICsgMV0gPSBudW0gJiAweGZmO1xuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVJbnQzMihkZXN0LCBvZmZzZXQsIG51bSkge1xuICAgIGRlc3Rbb2Zmc2V0XSA9IG51bSA+PiAyNCAmIDB4ZmY7XG4gICAgZGVzdFtvZmZzZXQgKyAxXSA9IG51bSA+PiAxNiAmIDB4ZmY7XG4gICAgZGVzdFtvZmZzZXQgKyAyXSA9IG51bSA+PiA4ICYgMHhmZjtcbiAgICBkZXN0W29mZnNldCArIDNdID0gbnVtICYgMHhmZjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlRGF0YShkZXN0LCBvZmZzZXQsIGRhdGEpIHtcbiAgICB2YXIgaSwgaWk7XG5cbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIGRlc3Quc2V0KGRhdGEsIG9mZnNldCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZm9yIChpID0gMCwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgZGVzdFtvZmZzZXQrK10gPSBkYXRhLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBkZXN0W29mZnNldCsrXSA9IGRhdGFbaV0gJiAweGZmO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIE9wZW5UeXBlRmlsZUJ1aWxkZXIoc2ZudCkge1xuICAgIHRoaXMuc2ZudCA9IHNmbnQ7XG4gICAgdGhpcy50YWJsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgT3BlblR5cGVGaWxlQnVpbGRlci5nZXRTZWFyY2hQYXJhbXMgPSBmdW5jdGlvbiBPcGVuVHlwZUZpbGVCdWlsZGVyX2dldFNlYXJjaFBhcmFtcyhlbnRyaWVzQ291bnQsIGVudHJ5U2l6ZSkge1xuICAgIHZhciBtYXhQb3dlcjIgPSAxLFxuICAgICAgICBsb2cyID0gMDtcblxuICAgIHdoaWxlICgobWF4UG93ZXIyIF4gZW50cmllc0NvdW50KSA+IG1heFBvd2VyMikge1xuICAgICAgbWF4UG93ZXIyIDw8PSAxO1xuICAgICAgbG9nMisrO1xuICAgIH1cblxuICAgIHZhciBzZWFyY2hSYW5nZSA9IG1heFBvd2VyMiAqIGVudHJ5U2l6ZTtcbiAgICByZXR1cm4ge1xuICAgICAgcmFuZ2U6IHNlYXJjaFJhbmdlLFxuICAgICAgZW50cnk6IGxvZzIsXG4gICAgICByYW5nZVNoaWZ0OiBlbnRyeVNpemUgKiBlbnRyaWVzQ291bnQgLSBzZWFyY2hSYW5nZVxuICAgIH07XG4gIH07XG5cbiAgdmFyIE9URl9IRUFERVJfU0laRSA9IDEyO1xuICB2YXIgT1RGX1RBQkxFX0VOVFJZX1NJWkUgPSAxNjtcbiAgT3BlblR5cGVGaWxlQnVpbGRlci5wcm90b3R5cGUgPSB7XG4gICAgdG9BcnJheTogZnVuY3Rpb24gT3BlblR5cGVGaWxlQnVpbGRlcl90b0FycmF5KCkge1xuICAgICAgdmFyIHNmbnQgPSB0aGlzLnNmbnQ7XG4gICAgICB2YXIgdGFibGVzID0gdGhpcy50YWJsZXM7XG4gICAgICB2YXIgdGFibGVzTmFtZXMgPSBPYmplY3Qua2V5cyh0YWJsZXMpO1xuICAgICAgdGFibGVzTmFtZXMuc29ydCgpO1xuICAgICAgdmFyIG51bVRhYmxlcyA9IHRhYmxlc05hbWVzLmxlbmd0aDtcbiAgICAgIHZhciBpLCBqLCBqaiwgdGFibGUsIHRhYmxlTmFtZTtcbiAgICAgIHZhciBvZmZzZXQgPSBPVEZfSEVBREVSX1NJWkUgKyBudW1UYWJsZXMgKiBPVEZfVEFCTEVfRU5UUllfU0laRTtcbiAgICAgIHZhciB0YWJsZU9mZnNldHMgPSBbb2Zmc2V0XTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bVRhYmxlczsgaSsrKSB7XG4gICAgICAgIHRhYmxlID0gdGFibGVzW3RhYmxlc05hbWVzW2ldXTtcbiAgICAgICAgdmFyIHBhZGRlZExlbmd0aCA9ICh0YWJsZS5sZW5ndGggKyAzICYgfjMpID4+PiAwO1xuICAgICAgICBvZmZzZXQgKz0gcGFkZGVkTGVuZ3RoO1xuICAgICAgICB0YWJsZU9mZnNldHMucHVzaChvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlsZSA9IG5ldyBVaW50OEFycmF5KG9mZnNldCk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICB0YWJsZSA9IHRhYmxlc1t0YWJsZXNOYW1lc1tpXV07XG4gICAgICAgIHdyaXRlRGF0YShmaWxlLCB0YWJsZU9mZnNldHNbaV0sIHRhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNmbnQgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIHNmbnQgPSAoMCwgX3V0aWwuc3RyaW5nMzIpKDB4MDAwMTAwMDApO1xuICAgICAgfVxuXG4gICAgICBmaWxlWzBdID0gc2ZudC5jaGFyQ29kZUF0KDApICYgMHhmZjtcbiAgICAgIGZpbGVbMV0gPSBzZm50LmNoYXJDb2RlQXQoMSkgJiAweGZmO1xuICAgICAgZmlsZVsyXSA9IHNmbnQuY2hhckNvZGVBdCgyKSAmIDB4ZmY7XG4gICAgICBmaWxlWzNdID0gc2ZudC5jaGFyQ29kZUF0KDMpICYgMHhmZjtcbiAgICAgIHdyaXRlSW50MTYoZmlsZSwgNCwgbnVtVGFibGVzKTtcbiAgICAgIHZhciBzZWFyY2hQYXJhbXMgPSBPcGVuVHlwZUZpbGVCdWlsZGVyLmdldFNlYXJjaFBhcmFtcyhudW1UYWJsZXMsIDE2KTtcbiAgICAgIHdyaXRlSW50MTYoZmlsZSwgNiwgc2VhcmNoUGFyYW1zLnJhbmdlKTtcbiAgICAgIHdyaXRlSW50MTYoZmlsZSwgOCwgc2VhcmNoUGFyYW1zLmVudHJ5KTtcbiAgICAgIHdyaXRlSW50MTYoZmlsZSwgMTAsIHNlYXJjaFBhcmFtcy5yYW5nZVNoaWZ0KTtcbiAgICAgIG9mZnNldCA9IE9URl9IRUFERVJfU0laRTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bVRhYmxlczsgaSsrKSB7XG4gICAgICAgIHRhYmxlTmFtZSA9IHRhYmxlc05hbWVzW2ldO1xuICAgICAgICBmaWxlW29mZnNldF0gPSB0YWJsZU5hbWUuY2hhckNvZGVBdCgwKSAmIDB4ZmY7XG4gICAgICAgIGZpbGVbb2Zmc2V0ICsgMV0gPSB0YWJsZU5hbWUuY2hhckNvZGVBdCgxKSAmIDB4ZmY7XG4gICAgICAgIGZpbGVbb2Zmc2V0ICsgMl0gPSB0YWJsZU5hbWUuY2hhckNvZGVBdCgyKSAmIDB4ZmY7XG4gICAgICAgIGZpbGVbb2Zmc2V0ICsgM10gPSB0YWJsZU5hbWUuY2hhckNvZGVBdCgzKSAmIDB4ZmY7XG4gICAgICAgIHZhciBjaGVja3N1bSA9IDA7XG5cbiAgICAgICAgZm9yIChqID0gdGFibGVPZmZzZXRzW2ldLCBqaiA9IHRhYmxlT2Zmc2V0c1tpICsgMV07IGogPCBqajsgaiArPSA0KSB7XG4gICAgICAgICAgdmFyIHF1YWQgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZmlsZSwgaik7XG4gICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bSArIHF1YWQgPj4+IDA7XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZUludDMyKGZpbGUsIG9mZnNldCArIDQsIGNoZWNrc3VtKTtcbiAgICAgICAgd3JpdGVJbnQzMihmaWxlLCBvZmZzZXQgKyA4LCB0YWJsZU9mZnNldHNbaV0pO1xuICAgICAgICB3cml0ZUludDMyKGZpbGUsIG9mZnNldCArIDEyLCB0YWJsZXNbdGFibGVOYW1lXS5sZW5ndGgpO1xuICAgICAgICBvZmZzZXQgKz0gT1RGX1RBQkxFX0VOVFJZX1NJWkU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH0sXG4gICAgYWRkVGFibGU6IGZ1bmN0aW9uIE9wZW5UeXBlRmlsZUJ1aWxkZXJfYWRkVGFibGUodGFnLCBkYXRhKSB7XG4gICAgICBpZiAodGFnIGluIHRoaXMudGFibGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhYmxlIFwiICsgdGFnICsgXCIgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGFibGVzW3RhZ10gPSBkYXRhO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIE9wZW5UeXBlRmlsZUJ1aWxkZXI7XG59KCk7XG5cbnZhciBGb250ID0gZnVuY3Rpb24gRm9udENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIEZvbnQobmFtZSwgZmlsZSwgcHJvcGVydGllcykge1xuICAgIHZhciBjaGFyQ29kZTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMubG9hZGVkTmFtZSA9IHByb3BlcnRpZXMubG9hZGVkTmFtZTtcbiAgICB0aGlzLmlzVHlwZTNGb250ID0gcHJvcGVydGllcy5pc1R5cGUzRm9udDtcbiAgICB0aGlzLm1pc3NpbmdGaWxlID0gZmFsc2U7XG4gICAgdGhpcy5nbHlwaENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmlzU2VyaWZGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5TZXJpZik7XG4gICAgdGhpcy5pc1N5bWJvbGljRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBGb250RmxhZ3MuU3ltYm9saWMpO1xuICAgIHRoaXMuaXNNb25vc3BhY2UgPSAhIShwcm9wZXJ0aWVzLmZsYWdzICYgRm9udEZsYWdzLkZpeGVkUGl0Y2gpO1xuICAgIHZhciB0eXBlID0gcHJvcGVydGllcy50eXBlO1xuICAgIHZhciBzdWJ0eXBlID0gcHJvcGVydGllcy5zdWJ0eXBlO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zdWJ0eXBlID0gc3VidHlwZTtcbiAgICBsZXQgZmFsbGJhY2tOYW1lID0gXCJzYW5zLXNlcmlmXCI7XG5cbiAgICBpZiAodGhpcy5pc01vbm9zcGFjZSkge1xuICAgICAgZmFsbGJhY2tOYW1lID0gXCJtb25vc3BhY2VcIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTZXJpZkZvbnQpIHtcbiAgICAgIGZhbGxiYWNrTmFtZSA9IFwic2VyaWZcIjtcbiAgICB9XG5cbiAgICB0aGlzLmZhbGxiYWNrTmFtZSA9IGZhbGxiYWNrTmFtZTtcbiAgICB0aGlzLmRpZmZlcmVuY2VzID0gcHJvcGVydGllcy5kaWZmZXJlbmNlcztcbiAgICB0aGlzLndpZHRocyA9IHByb3BlcnRpZXMud2lkdGhzO1xuICAgIHRoaXMuZGVmYXVsdFdpZHRoID0gcHJvcGVydGllcy5kZWZhdWx0V2lkdGg7XG4gICAgdGhpcy5jb21wb3NpdGUgPSBwcm9wZXJ0aWVzLmNvbXBvc2l0ZTtcbiAgICB0aGlzLmNNYXAgPSBwcm9wZXJ0aWVzLmNNYXA7XG4gICAgdGhpcy5hc2NlbnQgPSBwcm9wZXJ0aWVzLmFzY2VudCAvIFBERl9HTFlQSF9TUEFDRV9VTklUUztcbiAgICB0aGlzLmRlc2NlbnQgPSBwcm9wZXJ0aWVzLmRlc2NlbnQgLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7XG4gICAgdGhpcy5mb250TWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4O1xuICAgIHRoaXMuYmJveCA9IHByb3BlcnRpZXMuYmJveDtcbiAgICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nO1xuICAgIHRoaXMudG9Vbmljb2RlID0gcHJvcGVydGllcy50b1VuaWNvZGU7XG4gICAgdGhpcy5mYWxsYmFja1RvVW5pY29kZSA9IHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUgfHwgbmV3IFRvVW5pY29kZU1hcCgpO1xuICAgIHRoaXMudG9Gb250Q2hhciA9IFtdO1xuXG4gICAgaWYgKHByb3BlcnRpZXMudHlwZSA9PT0gXCJUeXBlM1wiKSB7XG4gICAgICBmb3IgKGNoYXJDb2RlID0gMDsgY2hhckNvZGUgPCAyNTY7IGNoYXJDb2RlKyspIHtcbiAgICAgICAgdGhpcy50b0ZvbnRDaGFyW2NoYXJDb2RlXSA9IHRoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdIHx8IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb250VHlwZSA9IF91dGlsLkZvbnRUeXBlLlRZUEUzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2lkRW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmNpZEVuY29kaW5nO1xuICAgIHRoaXMudmVydGljYWwgPSAhIXByb3BlcnRpZXMudmVydGljYWw7XG5cbiAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgdGhpcy52bWV0cmljcyA9IHByb3BlcnRpZXMudm1ldHJpY3M7XG4gICAgICB0aGlzLmRlZmF1bHRWTWV0cmljcyA9IHByb3BlcnRpZXMuZGVmYXVsdFZNZXRyaWNzO1xuICAgIH1cblxuICAgIGlmICghZmlsZSB8fCBmaWxlLmlzRW1wdHkpIHtcbiAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnRm9udCBmaWxlIGlzIGVtcHR5IGluIFwiJyArIG5hbWUgKyAnXCIgKCcgKyB0aGlzLmxvYWRlZE5hbWUgKyBcIilcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBbdHlwZSwgc3VidHlwZV0gPSBnZXRGb250RmlsZVR5cGUoZmlsZSwgcHJvcGVydGllcyk7XG5cbiAgICBpZiAodHlwZSAhPT0gdGhpcy50eXBlIHx8IHN1YnR5cGUgIT09IHRoaXMuc3VidHlwZSkge1xuICAgICAgKDAsIF91dGlsLmluZm8pKFwiSW5jb25zaXN0ZW50IGZvbnQgZmlsZSBUeXBlL1N1YlR5cGUsIGV4cGVjdGVkOiBcIiArIGAke3RoaXMudHlwZX0vJHt0aGlzLnN1YnR5cGV9IGJ1dCBmb3VuZDogJHt0eXBlfS8ke3N1YnR5cGV9LmApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB2YXIgZGF0YTtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJNTVR5cGUxXCI6XG4gICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiTU1UeXBlMSBmb250IChcIiArIG5hbWUgKyBcIiksIGZhbGxpbmcgYmFjayB0byBUeXBlMS5cIik7XG5cbiAgICAgICAgY2FzZSBcIlR5cGUxXCI6XG4gICAgICAgIGNhc2UgXCJDSURGb250VHlwZTBcIjpcbiAgICAgICAgICB0aGlzLm1pbWV0eXBlID0gXCJmb250L29wZW50eXBlXCI7XG4gICAgICAgICAgdmFyIGNmZiA9IHN1YnR5cGUgPT09IFwiVHlwZTFDXCIgfHwgc3VidHlwZSA9PT0gXCJDSURGb250VHlwZTBDXCIgPyBuZXcgQ0ZGRm9udChmaWxlLCBwcm9wZXJ0aWVzKSA6IG5ldyBUeXBlMUZvbnQobmFtZSwgZmlsZSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpO1xuICAgICAgICAgIGRhdGEgPSB0aGlzLmNvbnZlcnQobmFtZSwgY2ZmLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiT3BlblR5cGVcIjpcbiAgICAgICAgY2FzZSBcIlRydWVUeXBlXCI6XG4gICAgICAgIGNhc2UgXCJDSURGb250VHlwZTJcIjpcbiAgICAgICAgICB0aGlzLm1pbWV0eXBlID0gXCJmb250L29wZW50eXBlXCI7XG4gICAgICAgICAgZGF0YSA9IHRoaXMuY2hlY2tBbmRSZXBhaXIobmFtZSwgZmlsZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgICBpZiAodGhpcy5pc09wZW5UeXBlKSB7XG4gICAgICAgICAgICBhZGp1c3RXaWR0aHMocHJvcGVydGllcyk7XG4gICAgICAgICAgICB0eXBlID0gXCJPcGVuVHlwZVwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBGb250ICR7dHlwZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShlKTtcbiAgICAgIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuZm9udFR5cGUgPSBnZXRGb250VHlwZSh0eXBlLCBzdWJ0eXBlKTtcbiAgICB0aGlzLmZvbnRNYXRyaXggPSBwcm9wZXJ0aWVzLmZvbnRNYXRyaXg7XG4gICAgdGhpcy53aWR0aHMgPSBwcm9wZXJ0aWVzLndpZHRocztcbiAgICB0aGlzLmRlZmF1bHRXaWR0aCA9IHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoO1xuICAgIHRoaXMudG9Vbmljb2RlID0gcHJvcGVydGllcy50b1VuaWNvZGU7XG4gICAgdGhpcy5zZWFjTWFwID0gcHJvcGVydGllcy5zZWFjTWFwO1xuICB9XG5cbiAgRm9udC5nZXRGb250SUQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIElEID0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24gRm9udF9nZXRGb250SUQoKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKElEKyspO1xuICAgIH07XG4gIH0oKTtcblxuICBmdW5jdGlvbiBpbnQxNihiMCwgYjEpIHtcbiAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZVNpZ25lZEludDE2KGJ5dGVzLCBpbmRleCwgdmFsdWUpIHtcbiAgICBieXRlc1tpbmRleCArIDFdID0gdmFsdWU7XG4gICAgYnl0ZXNbaW5kZXhdID0gdmFsdWUgPj4+IDg7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduZWRJbnQxNihiMCwgYjEpIHtcbiAgICB2YXIgdmFsdWUgPSAoYjAgPDwgOCkgKyBiMTtcbiAgICByZXR1cm4gdmFsdWUgJiAxIDw8IDE1ID8gdmFsdWUgLSAweDEwMDAwIDogdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBpbnQzMihiMCwgYjEsIGIyLCBiMykge1xuICAgIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RyaW5nMTYodmFsdWUpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNhZmVTdHJpbmcxNih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA+IDB4N2ZmZikge1xuICAgICAgdmFsdWUgPSAweDdmZmY7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IC0weDgwMDApIHtcbiAgICAgIHZhbHVlID0gLTB4ODAwMDtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVHJ1ZVR5cGVGaWxlKGZpbGUpIHtcbiAgICB2YXIgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoNCk7XG4gICAgcmV0dXJuICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShoZWFkZXIsIDApID09PSAweDAwMDEwMDAwIHx8ICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShoZWFkZXIpID09PSBcInRydWVcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZShmaWxlKSB7XG4gICAgY29uc3QgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoNCk7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShoZWFkZXIpID09PSBcInR0Y2ZcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzT3BlblR5cGVGaWxlKGZpbGUpIHtcbiAgICB2YXIgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoNCk7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShoZWFkZXIpID09PSBcIk9UVE9cIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVHlwZTFGaWxlKGZpbGUpIHtcbiAgICB2YXIgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoMik7XG5cbiAgICBpZiAoaGVhZGVyWzBdID09PSAweDI1ICYmIGhlYWRlclsxXSA9PT0gMHgyMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGhlYWRlclswXSA9PT0gMHg4MCAmJiBoZWFkZXJbMV0gPT09IDB4MDEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ0ZGRmlsZShmaWxlKSB7XG4gICAgY29uc3QgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoNCk7XG5cbiAgICBpZiAoaGVhZGVyWzBdID49IDEgJiYgaGVhZGVyWzNdID49IDEgJiYgaGVhZGVyWzNdIDw9IDQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZvbnRGaWxlVHlwZShmaWxlLCB7XG4gICAgdHlwZSxcbiAgICBzdWJ0eXBlLFxuICAgIGNvbXBvc2l0ZVxuICB9KSB7XG4gICAgbGV0IGZpbGVUeXBlLCBmaWxlU3VidHlwZTtcblxuICAgIGlmIChpc1RydWVUeXBlRmlsZShmaWxlKSB8fCBpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZmlsZSkpIHtcbiAgICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgICAgZmlsZVR5cGUgPSBcIkNJREZvbnRUeXBlMlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZVR5cGUgPSBcIlRydWVUeXBlXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc09wZW5UeXBlRmlsZShmaWxlKSkge1xuICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICBmaWxlVHlwZSA9IFwiQ0lERm9udFR5cGUyXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlVHlwZSA9IFwiT3BlblR5cGVcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHlwZTFGaWxlKGZpbGUpKSB7XG4gICAgICBpZiAoY29tcG9zaXRlKSB7XG4gICAgICAgIGZpbGVUeXBlID0gXCJDSURGb250VHlwZTBcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVUeXBlID0gdHlwZSA9PT0gXCJNTVR5cGUxXCIgPyBcIk1NVHlwZTFcIiA6IFwiVHlwZTFcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQ0ZGRmlsZShmaWxlKSkge1xuICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICBmaWxlVHlwZSA9IFwiQ0lERm9udFR5cGUwXCI7XG4gICAgICAgIGZpbGVTdWJ0eXBlID0gXCJDSURGb250VHlwZTBDXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlVHlwZSA9IHR5cGUgPT09IFwiTU1UeXBlMVwiID8gXCJNTVR5cGUxXCIgOiBcIlR5cGUxXCI7XG4gICAgICAgIGZpbGVTdWJ0eXBlID0gXCJUeXBlMUNcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiZ2V0Rm9udEZpbGVUeXBlOiBVbmFibGUgdG8gZGV0ZWN0IGNvcnJlY3QgZm9udCBmaWxlIFR5cGUvU3VidHlwZS5cIik7XG4gICAgICBmaWxlVHlwZSA9IHR5cGU7XG4gICAgICBmaWxlU3VidHlwZSA9IHN1YnR5cGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtmaWxlVHlwZSwgZmlsZVN1YnR5cGVdO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRUb0ZvbnRDaGFyKGVuY29kaW5nLCBnbHlwaHNVbmljb2RlTWFwLCBkaWZmZXJlbmNlcykge1xuICAgIHZhciB0b0ZvbnRDaGFyID0gW10sXG4gICAgICAgIHVuaWNvZGU7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBlbmNvZGluZy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkoZW5jb2RpbmdbaV0sIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgdG9Gb250Q2hhcltpXSA9IHVuaWNvZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMpIHtcbiAgICAgIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShkaWZmZXJlbmNlc1tjaGFyQ29kZV0sIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgdG9Gb250Q2hhclsrY2hhckNvZGVdID0gdW5pY29kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9Gb250Q2hhcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkanVzdE1hcHBpbmcoY2hhckNvZGVUb0dseXBoSWQsIGhhc0dseXBoLCBuZXdHbHlwaFplcm9JZCkge1xuICAgIHZhciBuZXdNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciB0b0ZvbnRDaGFyID0gW107XG4gICAgdmFyIHByaXZhdGVVc2VBcmVhSW5kZXggPSAwO1xuICAgIHZhciBuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlID0gUFJJVkFURV9VU0VfQVJFQVNbcHJpdmF0ZVVzZUFyZWFJbmRleF1bMF07XG4gICAgdmFyIHByaXZhdGVVc2VPZmZldEVuZCA9IFBSSVZBVEVfVVNFX0FSRUFTW3ByaXZhdGVVc2VBcmVhSW5kZXhdWzFdO1xuXG4gICAgZm9yICh2YXIgb3JpZ2luYWxDaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkge1xuICAgICAgb3JpZ2luYWxDaGFyQ29kZSB8PSAwO1xuICAgICAgdmFyIGdseXBoSWQgPSBjaGFyQ29kZVRvR2x5cGhJZFtvcmlnaW5hbENoYXJDb2RlXTtcblxuICAgICAgaWYgKCFoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUgPiBwcml2YXRlVXNlT2ZmZXRFbmQpIHtcbiAgICAgICAgcHJpdmF0ZVVzZUFyZWFJbmRleCsrO1xuXG4gICAgICAgIGlmIChwcml2YXRlVXNlQXJlYUluZGV4ID49IFBSSVZBVEVfVVNFX0FSRUFTLmxlbmd0aCkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlJhbiBvdXQgb2Ygc3BhY2UgaW4gZm9udCBwcml2YXRlIHVzZSBhcmVhLlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVswXTtcbiAgICAgICAgcHJpdmF0ZVVzZU9mZmV0RW5kID0gUFJJVkFURV9VU0VfQVJFQVNbcHJpdmF0ZVVzZUFyZWFJbmRleF1bMV07XG4gICAgICB9XG5cbiAgICAgIHZhciBmb250Q2hhckNvZGUgPSBuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKys7XG5cbiAgICAgIGlmIChnbHlwaElkID09PSAwKSB7XG4gICAgICAgIGdseXBoSWQgPSBuZXdHbHlwaFplcm9JZDtcbiAgICAgIH1cblxuICAgICAgbmV3TWFwW2ZvbnRDaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgdG9Gb250Q2hhcltvcmlnaW5hbENoYXJDb2RlXSA9IGZvbnRDaGFyQ29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9Gb250Q2hhcixcbiAgICAgIGNoYXJDb2RlVG9HbHlwaElkOiBuZXdNYXAsXG4gICAgICBuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJhbmdlcyhnbHlwaHMsIG51bUdseXBocykge1xuICAgIHZhciBjb2RlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgY2hhckNvZGUgaW4gZ2x5cGhzKSB7XG4gICAgICBpZiAoZ2x5cGhzW2NoYXJDb2RlXSA+PSBudW1HbHlwaHMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvZGVzLnB1c2goe1xuICAgICAgICBmb250Q2hhckNvZGU6IGNoYXJDb2RlIHwgMCxcbiAgICAgICAgZ2x5cGhJZDogZ2x5cGhzW2NoYXJDb2RlXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29kZXMucHVzaCh7XG4gICAgICAgIGZvbnRDaGFyQ29kZTogMCxcbiAgICAgICAgZ2x5cGhJZDogMFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29kZXMuc29ydChmdW5jdGlvbiBmb250R2V0UmFuZ2VzU29ydChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5mb250Q2hhckNvZGUgLSBiLmZvbnRDaGFyQ29kZTtcbiAgICB9KTtcbiAgICB2YXIgcmFuZ2VzID0gW107XG4gICAgdmFyIGxlbmd0aCA9IGNvZGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbGVuZ3RoOykge1xuICAgICAgdmFyIHN0YXJ0ID0gY29kZXNbbl0uZm9udENoYXJDb2RlO1xuICAgICAgdmFyIGNvZGVJbmRpY2VzID0gW2NvZGVzW25dLmdseXBoSWRdO1xuICAgICAgKytuO1xuICAgICAgdmFyIGVuZCA9IHN0YXJ0O1xuXG4gICAgICB3aGlsZSAobiA8IGxlbmd0aCAmJiBlbmQgKyAxID09PSBjb2Rlc1tuXS5mb250Q2hhckNvZGUpIHtcbiAgICAgICAgY29kZUluZGljZXMucHVzaChjb2Rlc1tuXS5nbHlwaElkKTtcbiAgICAgICAgKytlbmQ7XG4gICAgICAgICsrbjtcblxuICAgICAgICBpZiAoZW5kID09PSAweGZmZmYpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByYW5nZXMucHVzaChbc3RhcnQsIGVuZCwgY29kZUluZGljZXNdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2VzO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ21hcFRhYmxlKGdseXBocywgbnVtR2x5cGhzKSB7XG4gICAgdmFyIHJhbmdlcyA9IGdldFJhbmdlcyhnbHlwaHMsIG51bUdseXBocyk7XG4gICAgdmFyIG51bVRhYmxlcyA9IHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV1bMV0gPiAweGZmZmYgPyAyIDogMTtcbiAgICB2YXIgY21hcCA9IFwiXFx4MDBcXHgwMFwiICsgc3RyaW5nMTYobnVtVGFibGVzKSArIFwiXFx4MDBcXHgwM1wiICsgXCJcXHgwMFxceDAxXCIgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKDQgKyBudW1UYWJsZXMgKiA4KTtcbiAgICB2YXIgaSwgaWksIGosIGpqO1xuXG4gICAgZm9yIChpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBpZiAocmFuZ2VzW2ldWzBdIDw9IDB4ZmZmZikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYm1wTGVuZ3RoID0gaSArIDE7XG5cbiAgICBpZiAocmFuZ2VzW2ldWzBdIDwgMHhmZmZmICYmIHJhbmdlc1tpXVsxXSA9PT0gMHhmZmZmKSB7XG4gICAgICByYW5nZXNbaV1bMV0gPSAweGZmZmU7XG4gICAgfVxuXG4gICAgdmFyIHRyYWlsaW5nUmFuZ2VzQ291bnQgPSByYW5nZXNbaV1bMV0gPCAweGZmZmYgPyAxIDogMDtcbiAgICB2YXIgc2VnQ291bnQgPSBibXBMZW5ndGggKyB0cmFpbGluZ1Jhbmdlc0NvdW50O1xuICAgIHZhciBzZWFyY2hQYXJhbXMgPSBPcGVuVHlwZUZpbGVCdWlsZGVyLmdldFNlYXJjaFBhcmFtcyhzZWdDb3VudCwgMik7XG4gICAgdmFyIHN0YXJ0Q291bnQgPSBcIlwiO1xuICAgIHZhciBlbmRDb3VudCA9IFwiXCI7XG4gICAgdmFyIGlkRGVsdGFzID0gXCJcIjtcbiAgICB2YXIgaWRSYW5nZU9mZnNldHMgPSBcIlwiO1xuICAgIHZhciBnbHlwaHNJZHMgPSBcIlwiO1xuICAgIHZhciBiaWFzID0gMDtcbiAgICB2YXIgcmFuZ2UsIHN0YXJ0LCBlbmQsIGNvZGVzO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBibXBMZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICByYW5nZSA9IHJhbmdlc1tpXTtcbiAgICAgIHN0YXJ0ID0gcmFuZ2VbMF07XG4gICAgICBlbmQgPSByYW5nZVsxXTtcbiAgICAgIHN0YXJ0Q291bnQgKz0gc3RyaW5nMTYoc3RhcnQpO1xuICAgICAgZW5kQ291bnQgKz0gc3RyaW5nMTYoZW5kKTtcbiAgICAgIGNvZGVzID0gcmFuZ2VbMl07XG4gICAgICB2YXIgY29udGlndW91cyA9IHRydWU7XG5cbiAgICAgIGZvciAoaiA9IDEsIGpqID0gY29kZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICBpZiAoY29kZXNbal0gIT09IGNvZGVzW2ogLSAxXSArIDEpIHtcbiAgICAgICAgICBjb250aWd1b3VzID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjb250aWd1b3VzKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSAoc2VnQ291bnQgLSBpKSAqIDIgKyBiaWFzICogMjtcbiAgICAgICAgYmlhcyArPSBlbmQgLSBzdGFydCArIDE7XG4gICAgICAgIGlkRGVsdGFzICs9IHN0cmluZzE2KDApO1xuICAgICAgICBpZFJhbmdlT2Zmc2V0cyArPSBzdHJpbmcxNihvZmZzZXQpO1xuXG4gICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29kZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICAgIGdseXBoc0lkcyArPSBzdHJpbmcxNihjb2Rlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBzdGFydENvZGUgPSBjb2Rlc1swXTtcbiAgICAgICAgaWREZWx0YXMgKz0gc3RyaW5nMTYoc3RhcnRDb2RlIC0gc3RhcnQgJiAweGZmZmYpO1xuICAgICAgICBpZFJhbmdlT2Zmc2V0cyArPSBzdHJpbmcxNigwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHJhaWxpbmdSYW5nZXNDb3VudCA+IDApIHtcbiAgICAgIGVuZENvdW50ICs9IFwiXFx4RkZcXHhGRlwiO1xuICAgICAgc3RhcnRDb3VudCArPSBcIlxceEZGXFx4RkZcIjtcbiAgICAgIGlkRGVsdGFzICs9IFwiXFx4MDBcXHgwMVwiO1xuICAgICAgaWRSYW5nZU9mZnNldHMgKz0gXCJcXHgwMFxceDAwXCI7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdDMxNCA9IFwiXFx4MDBcXHgwMFwiICsgc3RyaW5nMTYoMiAqIHNlZ0NvdW50KSArIHN0cmluZzE2KHNlYXJjaFBhcmFtcy5yYW5nZSkgKyBzdHJpbmcxNihzZWFyY2hQYXJhbXMuZW50cnkpICsgc3RyaW5nMTYoc2VhcmNoUGFyYW1zLnJhbmdlU2hpZnQpICsgZW5kQ291bnQgKyBcIlxceDAwXFx4MDBcIiArIHN0YXJ0Q291bnQgKyBpZERlbHRhcyArIGlkUmFuZ2VPZmZzZXRzICsgZ2x5cGhzSWRzO1xuICAgIHZhciBmb3JtYXQzMTAxMiA9IFwiXCI7XG4gICAgdmFyIGhlYWRlcjMxMDEyID0gXCJcIjtcblxuICAgIGlmIChudW1UYWJsZXMgPiAxKSB7XG4gICAgICBjbWFwICs9IFwiXFx4MDBcXHgwM1wiICsgXCJcXHgwMFxceDBBXCIgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKDQgKyBudW1UYWJsZXMgKiA4ICsgNCArIGZvcm1hdDMxNC5sZW5ndGgpO1xuICAgICAgZm9ybWF0MzEwMTIgPSBcIlwiO1xuXG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IHJhbmdlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHJhbmdlID0gcmFuZ2VzW2ldO1xuICAgICAgICBzdGFydCA9IHJhbmdlWzBdO1xuICAgICAgICBjb2RlcyA9IHJhbmdlWzJdO1xuICAgICAgICB2YXIgY29kZSA9IGNvZGVzWzBdO1xuXG4gICAgICAgIGZvciAoaiA9IDEsIGpqID0gY29kZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICAgIGlmIChjb2Rlc1tqXSAhPT0gY29kZXNbaiAtIDFdICsgMSkge1xuICAgICAgICAgICAgZW5kID0gcmFuZ2VbMF0gKyBqIC0gMTtcbiAgICAgICAgICAgIGZvcm1hdDMxMDEyICs9ICgwLCBfdXRpbC5zdHJpbmczMikoc3RhcnQpICsgKDAsIF91dGlsLnN0cmluZzMyKShlbmQpICsgKDAsIF91dGlsLnN0cmluZzMyKShjb2RlKTtcbiAgICAgICAgICAgIHN0YXJ0ID0gZW5kICsgMTtcbiAgICAgICAgICAgIGNvZGUgPSBjb2Rlc1tqXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQzMTAxMiArPSAoMCwgX3V0aWwuc3RyaW5nMzIpKHN0YXJ0KSArICgwLCBfdXRpbC5zdHJpbmczMikocmFuZ2VbMV0pICsgKDAsIF91dGlsLnN0cmluZzMyKShjb2RlKTtcbiAgICAgIH1cblxuICAgICAgaGVhZGVyMzEwMTIgPSBcIlxceDAwXFx4MENcIiArIFwiXFx4MDBcXHgwMFwiICsgKDAsIF91dGlsLnN0cmluZzMyKShmb3JtYXQzMTAxMi5sZW5ndGggKyAxNikgKyBcIlxceDAwXFx4MDBcXHgwMFxceDAwXCIgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGZvcm1hdDMxMDEyLmxlbmd0aCAvIDEyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY21hcCArIFwiXFx4MDBcXHgwNFwiICsgc3RyaW5nMTYoZm9ybWF0MzE0Lmxlbmd0aCArIDQpICsgZm9ybWF0MzE0ICsgaGVhZGVyMzEwMTIgKyBmb3JtYXQzMTAxMjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlT1MyVGFibGUob3MyLCBmaWxlKSB7XG4gICAgZmlsZS5wb3MgPSAoZmlsZS5zdGFydCB8fCAwKSArIG9zMi5vZmZzZXQ7XG4gICAgdmFyIHZlcnNpb24gPSBmaWxlLmdldFVpbnQxNigpO1xuICAgIGZpbGUuc2tpcCg2MCk7XG4gICAgdmFyIHNlbGVjdGlvbiA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgICBpZiAodmVyc2lvbiA8IDQgJiYgc2VsZWN0aW9uICYgMHgwMzAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0Q2hhciA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgdmFyIGxhc3RDaGFyID0gZmlsZS5nZXRVaW50MTYoKTtcblxuICAgIGlmIChmaXJzdENoYXIgPiBsYXN0Q2hhcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZpbGUuc2tpcCg2KTtcbiAgICB2YXIgdXNXaW5Bc2NlbnQgPSBmaWxlLmdldFVpbnQxNigpO1xuXG4gICAgaWYgKHVzV2luQXNjZW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb3MyLmRhdGFbOF0gPSBvczIuZGF0YVs5XSA9IDA7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPUzJUYWJsZShwcm9wZXJ0aWVzLCBjaGFyc3RyaW5ncywgb3ZlcnJpZGUpIHtcbiAgICBvdmVycmlkZSA9IG92ZXJyaWRlIHx8IHtcbiAgICAgIHVuaXRzUGVyRW06IDAsXG4gICAgICB5TWF4OiAwLFxuICAgICAgeU1pbjogMCxcbiAgICAgIGFzY2VudDogMCxcbiAgICAgIGRlc2NlbnQ6IDBcbiAgICB9O1xuICAgIHZhciB1bFVuaWNvZGVSYW5nZTEgPSAwO1xuICAgIHZhciB1bFVuaWNvZGVSYW5nZTIgPSAwO1xuICAgIHZhciB1bFVuaWNvZGVSYW5nZTMgPSAwO1xuICAgIHZhciB1bFVuaWNvZGVSYW5nZTQgPSAwO1xuICAgIHZhciBmaXJzdENoYXJJbmRleCA9IG51bGw7XG4gICAgdmFyIGxhc3RDaGFySW5kZXggPSAwO1xuXG4gICAgaWYgKGNoYXJzdHJpbmdzKSB7XG4gICAgICBmb3IgKHZhciBjb2RlIGluIGNoYXJzdHJpbmdzKSB7XG4gICAgICAgIGNvZGUgfD0gMDtcblxuICAgICAgICBpZiAoZmlyc3RDaGFySW5kZXggPiBjb2RlIHx8ICFmaXJzdENoYXJJbmRleCkge1xuICAgICAgICAgIGZpcnN0Q2hhckluZGV4ID0gY29kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0Q2hhckluZGV4IDwgY29kZSkge1xuICAgICAgICAgIGxhc3RDaGFySW5kZXggPSBjb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBvc2l0aW9uID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVSYW5nZUZvcikoY29kZSk7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMzIpIHtcbiAgICAgICAgICB1bFVuaWNvZGVSYW5nZTEgfD0gMSA8PCBwb3NpdGlvbjtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDY0KSB7XG4gICAgICAgICAgdWxVbmljb2RlUmFuZ2UyIHw9IDEgPDwgcG9zaXRpb24gLSAzMjtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDk2KSB7XG4gICAgICAgICAgdWxVbmljb2RlUmFuZ2UzIHw9IDEgPDwgcG9zaXRpb24gLSA2NDtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDEyMykge1xuICAgICAgICAgIHVsVW5pY29kZVJhbmdlNCB8PSAxIDw8IHBvc2l0aW9uIC0gOTY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5pY29kZSByYW5nZXMgQml0cyA+IDEyMyBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0Q2hhckluZGV4ID4gMHhmZmZmKSB7XG4gICAgICAgIGxhc3RDaGFySW5kZXggPSAweGZmZmY7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0Q2hhckluZGV4ID0gMDtcbiAgICAgIGxhc3RDaGFySW5kZXggPSAyNTU7XG4gICAgfVxuXG4gICAgdmFyIGJib3ggPSBwcm9wZXJ0aWVzLmJib3ggfHwgWzAsIDAsIDAsIDBdO1xuICAgIHZhciB1bml0c1BlckVtID0gb3ZlcnJpZGUudW5pdHNQZXJFbSB8fCAxIC8gKHByb3BlcnRpZXMuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWClbMF07XG4gICAgdmFyIHNjYWxlID0gcHJvcGVydGllcy5hc2NlbnRTY2FsZWQgPyAxLjAgOiB1bml0c1BlckVtIC8gUERGX0dMWVBIX1NQQUNFX1VOSVRTO1xuICAgIHZhciB0eXBvQXNjZW50ID0gb3ZlcnJpZGUuYXNjZW50IHx8IE1hdGgucm91bmQoc2NhbGUgKiAocHJvcGVydGllcy5hc2NlbnQgfHwgYmJveFszXSkpO1xuICAgIHZhciB0eXBvRGVzY2VudCA9IG92ZXJyaWRlLmRlc2NlbnQgfHwgTWF0aC5yb3VuZChzY2FsZSAqIChwcm9wZXJ0aWVzLmRlc2NlbnQgfHwgYmJveFsxXSkpO1xuXG4gICAgaWYgKHR5cG9EZXNjZW50ID4gMCAmJiBwcm9wZXJ0aWVzLmRlc2NlbnQgPiAwICYmIGJib3hbMV0gPCAwKSB7XG4gICAgICB0eXBvRGVzY2VudCA9IC10eXBvRGVzY2VudDtcbiAgICB9XG5cbiAgICB2YXIgd2luQXNjZW50ID0gb3ZlcnJpZGUueU1heCB8fCB0eXBvQXNjZW50O1xuICAgIHZhciB3aW5EZXNjZW50ID0gLW92ZXJyaWRlLnlNaW4gfHwgLXR5cG9EZXNjZW50O1xuICAgIHJldHVybiBcIlxceDAwXFx4MDNcIiArIFwiXFx4MDJcXHgyNFwiICsgXCJcXHgwMVxceEY0XCIgKyBcIlxceDAwXFx4MDVcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMlxceDhBXCIgKyBcIlxceDAyXFx4QkJcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDhDXCIgKyBcIlxceDAyXFx4OEFcIiArIFwiXFx4MDJcXHhCQlwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAxXFx4REZcIiArIFwiXFx4MDBcXHgzMVwiICsgXCJcXHgwMVxceDAyXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDA2XCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHByb3BlcnRpZXMuZml4ZWRQaXRjaCA/IDB4MDkgOiAweDAwKSArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXCIgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKHVsVW5pY29kZVJhbmdlMSkgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKHVsVW5pY29kZVJhbmdlMikgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKHVsVW5pY29kZVJhbmdlMykgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKHVsVW5pY29kZVJhbmdlNCkgKyBcIlxceDJBXFx4MzJcXHgzMVxceDJBXCIgKyBzdHJpbmcxNihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlID8gMSA6IDApICsgc3RyaW5nMTYoZmlyc3RDaGFySW5kZXggfHwgcHJvcGVydGllcy5maXJzdENoYXIpICsgc3RyaW5nMTYobGFzdENoYXJJbmRleCB8fCBwcm9wZXJ0aWVzLmxhc3RDaGFyKSArIHN0cmluZzE2KHR5cG9Bc2NlbnQpICsgc3RyaW5nMTYodHlwb0Rlc2NlbnQpICsgXCJcXHgwMFxceDY0XCIgKyBzdHJpbmcxNih3aW5Bc2NlbnQpICsgc3RyaW5nMTYod2luRGVzY2VudCkgKyBcIlxceDAwXFx4MDBcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcXHgwMFxceDAwXCIgKyBzdHJpbmcxNihwcm9wZXJ0aWVzLnhIZWlnaHQpICsgc3RyaW5nMTYocHJvcGVydGllcy5jYXBIZWlnaHQpICsgc3RyaW5nMTYoMCkgKyBzdHJpbmcxNihmaXJzdENoYXJJbmRleCB8fCBwcm9wZXJ0aWVzLmZpcnN0Q2hhcikgKyBcIlxceDAwXFx4MDNcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBvc3RUYWJsZShwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGFuZ2xlID0gTWF0aC5mbG9vcihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlICogMiAqKiAxNik7XG4gICAgcmV0dXJuIFwiXFx4MDBcXHgwM1xceDAwXFx4MDBcIiArICgwLCBfdXRpbC5zdHJpbmczMikoYW5nbGUpICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArICgwLCBfdXRpbC5zdHJpbmczMikocHJvcGVydGllcy5maXhlZFBpdGNoKSArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5hbWVUYWJsZShuYW1lLCBwcm90bykge1xuICAgIGlmICghcHJvdG8pIHtcbiAgICAgIHByb3RvID0gW1tdLCBbXV07XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZ3MgPSBbcHJvdG9bMF1bMF0gfHwgXCJPcmlnaW5hbCBsaWNlbmNlXCIsIHByb3RvWzBdWzFdIHx8IG5hbWUsIHByb3RvWzBdWzJdIHx8IFwiVW5rbm93blwiLCBwcm90b1swXVszXSB8fCBcInVuaXF1ZUlEXCIsIHByb3RvWzBdWzRdIHx8IG5hbWUsIHByb3RvWzBdWzVdIHx8IFwiVmVyc2lvbiAwLjExXCIsIHByb3RvWzBdWzZdIHx8IFwiXCIsIHByb3RvWzBdWzddIHx8IFwiVW5rbm93blwiLCBwcm90b1swXVs4XSB8fCBcIlVua25vd25cIiwgcHJvdG9bMF1bOV0gfHwgXCJVbmtub3duXCJdO1xuICAgIHZhciBzdHJpbmdzVW5pY29kZSA9IFtdO1xuICAgIHZhciBpLCBpaSwgaiwgamosIHN0cjtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBzdHIgPSBwcm90b1sxXVtpXSB8fCBzdHJpbmdzW2ldO1xuICAgICAgdmFyIHN0ckJ1ZlVuaWNvZGUgPSBbXTtcblxuICAgICAgZm9yIChqID0gMCwgamogPSBzdHIubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBzdHJCdWZVbmljb2RlLnB1c2goc3RyaW5nMTYoc3RyLmNoYXJDb2RlQXQoaikpKTtcbiAgICAgIH1cblxuICAgICAgc3RyaW5nc1VuaWNvZGUucHVzaChzdHJCdWZVbmljb2RlLmpvaW4oXCJcIikpO1xuICAgIH1cblxuICAgIHZhciBuYW1lcyA9IFtzdHJpbmdzLCBzdHJpbmdzVW5pY29kZV07XG4gICAgdmFyIHBsYXRmb3JtcyA9IFtcIlxceDAwXFx4MDFcIiwgXCJcXHgwMFxceDAzXCJdO1xuICAgIHZhciBlbmNvZGluZ3MgPSBbXCJcXHgwMFxceDAwXCIsIFwiXFx4MDBcXHgwMVwiXTtcbiAgICB2YXIgbGFuZ3VhZ2VzID0gW1wiXFx4MDBcXHgwMFwiLCBcIlxceDA0XFx4MDlcIl07XG4gICAgdmFyIG5hbWVzUmVjb3JkQ291bnQgPSBzdHJpbmdzLmxlbmd0aCAqIHBsYXRmb3Jtcy5sZW5ndGg7XG4gICAgdmFyIG5hbWVUYWJsZSA9IFwiXFx4MDBcXHgwMFwiICsgc3RyaW5nMTYobmFtZXNSZWNvcmRDb3VudCkgKyBzdHJpbmcxNihuYW1lc1JlY29yZENvdW50ICogMTIgKyA2KTtcbiAgICB2YXIgc3RyT2Zmc2V0ID0gMDtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gcGxhdGZvcm1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBzdHJzID0gbmFtZXNbaV07XG5cbiAgICAgIGZvciAoaiA9IDAsIGpqID0gc3Rycy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIHN0ciA9IHN0cnNbal07XG4gICAgICAgIHZhciBuYW1lUmVjb3JkID0gcGxhdGZvcm1zW2ldICsgZW5jb2RpbmdzW2ldICsgbGFuZ3VhZ2VzW2ldICsgc3RyaW5nMTYoaikgKyBzdHJpbmcxNihzdHIubGVuZ3RoKSArIHN0cmluZzE2KHN0ck9mZnNldCk7XG4gICAgICAgIG5hbWVUYWJsZSArPSBuYW1lUmVjb3JkO1xuICAgICAgICBzdHJPZmZzZXQgKz0gc3RyLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuYW1lVGFibGUgKz0gc3RyaW5ncy5qb2luKFwiXCIpICsgc3RyaW5nc1VuaWNvZGUuam9pbihcIlwiKTtcbiAgICByZXR1cm4gbmFtZVRhYmxlO1xuICB9XG5cbiAgRm9udC5wcm90b3R5cGUgPSB7XG4gICAgbmFtZTogbnVsbCxcbiAgICBmb250OiBudWxsLFxuICAgIG1pbWV0eXBlOiBudWxsLFxuICAgIGRpc2FibGVGb250RmFjZTogZmFsc2UsXG5cbiAgICBnZXQgcmVuZGVyZXIoKSB7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBfZm9udF9yZW5kZXJlci5Gb250UmVuZGVyZXJGYWN0b3J5LmNyZWF0ZSh0aGlzLCBTRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuXG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJyZW5kZXJlclwiLCByZW5kZXJlcik7XG4gICAgfSxcblxuICAgIGV4cG9ydERhdGEoZXh0cmFQcm9wZXJ0aWVzID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGV4cG9ydERhdGFQcm9wZXJ0aWVzID0gZXh0cmFQcm9wZXJ0aWVzID8gWy4uLkVYUE9SVF9EQVRBX1BST1BFUlRJRVMsIC4uLkVYUE9SVF9EQVRBX0VYVFJBX1BST1BFUlRJRVNdIDogRVhQT1JUX0RBVEFfUFJPUEVSVElFUztcbiAgICAgIGNvbnN0IGRhdGEgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgbGV0IHByb3BlcnR5LCB2YWx1ZTtcblxuICAgICAgZm9yIChwcm9wZXJ0eSBvZiBleHBvcnREYXRhUHJvcGVydGllcykge1xuICAgICAgICB2YWx1ZSA9IHRoaXNbcHJvcGVydHldO1xuXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGF0YVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuXG4gICAgZmFsbGJhY2tUb1N5c3RlbUZvbnQ6IGZ1bmN0aW9uIEZvbnRfZmFsbGJhY2tUb1N5c3RlbUZvbnQoKSB7XG4gICAgICB0aGlzLm1pc3NpbmdGaWxlID0gdHJ1ZTtcbiAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICB2YXIgc3VidHlwZSA9IHRoaXMuc3VidHlwZTtcbiAgICAgIGxldCBmb250TmFtZSA9IG5hbWUucmVwbGFjZSgvWyxfXS9nLCBcIi1cIikucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xuICAgICAgdmFyIHN0ZEZvbnRNYXAgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN0ZEZvbnRNYXApKCksXG4gICAgICAgICAgbm9uU3RkRm9udE1hcCA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0Tm9uU3RkRm9udE1hcCkoKTtcbiAgICAgIHZhciBpc1N0YW5kYXJkRm9udCA9ICEhc3RkRm9udE1hcFtmb250TmFtZV0gfHwgISEobm9uU3RkRm9udE1hcFtmb250TmFtZV0gJiYgc3RkRm9udE1hcFtub25TdGRGb250TWFwW2ZvbnROYW1lXV0pO1xuICAgICAgZm9udE5hbWUgPSBzdGRGb250TWFwW2ZvbnROYW1lXSB8fCBub25TdGRGb250TWFwW2ZvbnROYW1lXSB8fCBmb250TmFtZTtcbiAgICAgIHRoaXMuYm9sZCA9IGZvbnROYW1lLnNlYXJjaCgvYm9sZC9naSkgIT09IC0xO1xuICAgICAgdGhpcy5pdGFsaWMgPSBmb250TmFtZS5zZWFyY2goL29ibGlxdWUvZ2kpICE9PSAtMSB8fCBmb250TmFtZS5zZWFyY2goL2l0YWxpYy9naSkgIT09IC0xO1xuICAgICAgdGhpcy5ibGFjayA9IG5hbWUuc2VhcmNoKC9CbGFjay9nKSAhPT0gLTE7XG4gICAgICB0aGlzLnJlbWVhc3VyZSA9IE9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGggPiAwO1xuXG4gICAgICBpZiAoaXNTdGFuZGFyZEZvbnQgJiYgdHlwZSA9PT0gXCJDSURGb250VHlwZTJcIiAmJiB0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoXCJJZGVudGl0eS1cIikpIHtcbiAgICAgICAgY29uc3QgR2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzID0gKDAsIF9zdGFuZGFyZF9mb250cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCk7XG4gICAgICAgIGNvbnN0IG1hcCA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gR2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSB7XG4gICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSBHbHlwaE1hcEZvclN0YW5kYXJkRm9udHNbY2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKC9BcmlhbC0/QmxhY2svaS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgdmFyIFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2spIHtcbiAgICAgICAgICAgIG1hcFsrY2hhckNvZGVdID0gU3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrW2NoYXJDb2RlXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoL0NhbGlicmkvaS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgU3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpID0gKDAsIF9zdGFuZGFyZF9mb250cy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkpKCk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkge1xuICAgICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSBTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmlbY2hhckNvZGVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpc0lkZW50aXR5VW5pY29kZSA9IHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXA7XG5cbiAgICAgICAgaWYgKCFpc0lkZW50aXR5VW5pY29kZSkge1xuICAgICAgICAgIHRoaXMudG9Vbmljb2RlLmZvckVhY2goZnVuY3Rpb24gKGNoYXJDb2RlLCB1bmljb2RlQ2hhckNvZGUpIHtcbiAgICAgICAgICAgIG1hcFsrY2hhckNvZGVdID0gdW5pY29kZUNoYXJDb2RlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbWFwO1xuICAgICAgICB0aGlzLnRvVW5pY29kZSA9IG5ldyBUb1VuaWNvZGVNYXAobWFwKTtcbiAgICAgIH0gZWxzZSBpZiAoL1N5bWJvbC9pLnRlc3QoZm9udE5hbWUpKSB7XG4gICAgICAgIHRoaXMudG9Gb250Q2hhciA9IGJ1aWxkVG9Gb250Q2hhcihfZW5jb2RpbmdzLlN5bWJvbFNldEVuY29kaW5nLCAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpLCB0aGlzLmRpZmZlcmVuY2VzKTtcbiAgICAgIH0gZWxzZSBpZiAoL0RpbmdiYXRzL2kudGVzdChmb250TmFtZSkpIHtcbiAgICAgICAgaWYgKC9XaW5nZGluZ3MvaS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTm9uLWVtYmVkZGVkIFdpbmdkaW5ncyBmb250LCBmYWxsaW5nIGJhY2sgdG8gWmFwZkRpbmdiYXRzLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9Gb250Q2hhciA9IGJ1aWxkVG9Gb250Q2hhcihfZW5jb2RpbmdzLlphcGZEaW5nYmF0c0VuY29kaW5nLCAoMCwgX2dseXBobGlzdC5nZXREaW5nYmF0c0dseXBoc1VuaWNvZGUpKCksIHRoaXMuZGlmZmVyZW5jZXMpO1xuICAgICAgfSBlbHNlIGlmIChpc1N0YW5kYXJkRm9udCkge1xuICAgICAgICB0aGlzLnRvRm9udENoYXIgPSBidWlsZFRvRm9udENoYXIodGhpcy5kZWZhdWx0RW5jb2RpbmcsICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCksIHRoaXMuZGlmZmVyZW5jZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG4gICAgICAgIGNvbnN0IG1hcCA9IFtdO1xuICAgICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgdmFyIGdseXBoTmFtZSA9IHRoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdIHx8IHRoaXMuZGVmYXVsdEVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICAgICAgICAgIGNvbnN0IHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgdW5pY29kZUNoYXJDb2RlID0gdW5pY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IHVuaWNvZGVDaGFyQ29kZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29tcG9zaXRlICYmIHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXApIHtcbiAgICAgICAgICBpZiAoL1ZlcmRhbmEvaS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpIHtcbiAgICAgICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSBHbHlwaE1hcEZvclN0YW5kYXJkRm9udHNbY2hhckNvZGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9Gb250Q2hhciA9IG1hcDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2FkZWROYW1lID0gZm9udE5hbWUuc3BsaXQoXCItXCIpWzBdO1xuICAgICAgdGhpcy5mb250VHlwZSA9IGdldEZvbnRUeXBlKHR5cGUsIHN1YnR5cGUpO1xuICAgIH0sXG4gICAgY2hlY2tBbmRSZXBhaXI6IGZ1bmN0aW9uIEZvbnRfY2hlY2tBbmRSZXBhaXIobmFtZSwgZm9udCwgcHJvcGVydGllcykge1xuICAgICAgY29uc3QgVkFMSURfVEFCTEVTID0gW1wiT1MvMlwiLCBcImNtYXBcIiwgXCJoZWFkXCIsIFwiaGhlYVwiLCBcImhtdHhcIiwgXCJtYXhwXCIsIFwibmFtZVwiLCBcInBvc3RcIiwgXCJsb2NhXCIsIFwiZ2x5ZlwiLCBcImZwZ21cIiwgXCJwcmVwXCIsIFwiY3Z0IFwiLCBcIkNGRiBcIl07XG5cbiAgICAgIGZ1bmN0aW9uIHJlYWRUYWJsZXMoZmlsZSwgbnVtVGFibGVzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRhYmxlc1tcIk9TLzJcIl0gPSBudWxsO1xuICAgICAgICB0YWJsZXMuY21hcCA9IG51bGw7XG4gICAgICAgIHRhYmxlcy5oZWFkID0gbnVsbDtcbiAgICAgICAgdGFibGVzLmhoZWEgPSBudWxsO1xuICAgICAgICB0YWJsZXMuaG10eCA9IG51bGw7XG4gICAgICAgIHRhYmxlcy5tYXhwID0gbnVsbDtcbiAgICAgICAgdGFibGVzLm5hbWUgPSBudWxsO1xuICAgICAgICB0YWJsZXMucG9zdCA9IG51bGw7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gcmVhZFRhYmxlRW50cnkoZmlsZSk7XG5cbiAgICAgICAgICBpZiAoIVZBTElEX1RBQkxFUy5pbmNsdWRlcyh0YWJsZS50YWcpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGFibGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWJsZXNbdGFibGUudGFnXSA9IHRhYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhYmxlcztcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVhZFRhYmxlRW50cnkoZmlsZSkge1xuICAgICAgICB2YXIgdGFnID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGZpbGUuZ2V0Qnl0ZXMoNCkpO1xuICAgICAgICB2YXIgY2hlY2tzdW0gPSBmaWxlLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSBmaWxlLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgIHZhciBsZW5ndGggPSBmaWxlLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgIHZhciBwcmV2aW91c1Bvc2l0aW9uID0gZmlsZS5wb3M7XG4gICAgICAgIGZpbGUucG9zID0gZmlsZS5zdGFydCA/IGZpbGUuc3RhcnQgOiAwO1xuICAgICAgICBmaWxlLnNraXAob2Zmc2V0KTtcbiAgICAgICAgdmFyIGRhdGEgPSBmaWxlLmdldEJ5dGVzKGxlbmd0aCk7XG4gICAgICAgIGZpbGUucG9zID0gcHJldmlvdXNQb3NpdGlvbjtcblxuICAgICAgICBpZiAodGFnID09PSBcImhlYWRcIikge1xuICAgICAgICAgIGRhdGFbOF0gPSBkYXRhWzldID0gZGF0YVsxMF0gPSBkYXRhWzExXSA9IDA7XG4gICAgICAgICAgZGF0YVsxN10gfD0gMHgyMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGFnLFxuICAgICAgICAgIGNoZWNrc3VtLFxuICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWFkT3BlblR5cGVIZWFkZXIodHRmKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmVyc2lvbjogKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKHR0Zi5nZXRCeXRlcyg0KSksXG4gICAgICAgICAgbnVtVGFibGVzOiB0dGYuZ2V0VWludDE2KCksXG4gICAgICAgICAgc2VhcmNoUmFuZ2U6IHR0Zi5nZXRVaW50MTYoKSxcbiAgICAgICAgICBlbnRyeVNlbGVjdG9yOiB0dGYuZ2V0VWludDE2KCksXG4gICAgICAgICAgcmFuZ2VTaGlmdDogdHRmLmdldFVpbnQxNigpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25IZWFkZXIodHRjKSB7XG4gICAgICAgIGNvbnN0IHR0Y1RhZyA9ICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKSh0dGMuZ2V0Qnl0ZXMoNCkpO1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0dGNUYWcgPT09IFwidHRjZlwiLCBcIk11c3QgYmUgYSBUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQuXCIpO1xuICAgICAgICBjb25zdCBtYWpvclZlcnNpb24gPSB0dGMuZ2V0VWludDE2KCk7XG4gICAgICAgIGNvbnN0IG1pbm9yVmVyc2lvbiA9IHR0Yy5nZXRVaW50MTYoKTtcbiAgICAgICAgY29uc3QgbnVtRm9udHMgPSB0dGMuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0VGFibGUgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUZvbnRzOyBpKyspIHtcbiAgICAgICAgICBvZmZzZXRUYWJsZS5wdXNoKHR0Yy5nZXRJbnQzMigpID4+PiAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHtcbiAgICAgICAgICB0dGNUYWcsXG4gICAgICAgICAgbWFqb3JWZXJzaW9uLFxuICAgICAgICAgIG1pbm9yVmVyc2lvbixcbiAgICAgICAgICBudW1Gb250cyxcbiAgICAgICAgICBvZmZzZXRUYWJsZVxuICAgICAgICB9O1xuXG4gICAgICAgIHN3aXRjaCAobWFqb3JWZXJzaW9uKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIGhlYWRlcjtcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGhlYWRlci5kc2lnVGFnID0gdHRjLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgICBoZWFkZXIuZHNpZ0xlbmd0aCA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgICAgaGVhZGVyLmRzaWdPZmZzZXQgPSB0dGMuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICR7bWFqb3JWZXJzaW9ufS5gKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEodHRjLCBmb250TmFtZSkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgbnVtRm9udHMsXG4gICAgICAgICAgb2Zmc2V0VGFibGVcbiAgICAgICAgfSA9IHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25IZWFkZXIodHRjKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUZvbnRzOyBpKyspIHtcbiAgICAgICAgICB0dGMucG9zID0gKHR0Yy5zdGFydCB8fCAwKSArIG9mZnNldFRhYmxlW2ldO1xuICAgICAgICAgIGNvbnN0IHBvdGVudGlhbEhlYWRlciA9IHJlYWRPcGVuVHlwZUhlYWRlcih0dGMpO1xuICAgICAgICAgIGNvbnN0IHBvdGVudGlhbFRhYmxlcyA9IHJlYWRUYWJsZXModHRjLCBwb3RlbnRpYWxIZWFkZXIubnVtVGFibGVzKTtcblxuICAgICAgICAgIGlmICghcG90ZW50aWFsVGFibGVzLm5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250IG11c3QgY29udGFpbiBhIFwibmFtZVwiIHRhYmxlLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5hbWVUYWJsZSA9IHJlYWROYW1lVGFibGUocG90ZW50aWFsVGFibGVzLm5hbWUpO1xuXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gbmFtZVRhYmxlLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwLCBrayA9IG5hbWVUYWJsZVtqXS5sZW5ndGg7IGsgPCBrazsgaysrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5hbWVFbnRyeSA9IG5hbWVUYWJsZVtqXVtrXTtcblxuICAgICAgICAgICAgICBpZiAobmFtZUVudHJ5ICYmIG5hbWVFbnRyeS5yZXBsYWNlKC9cXHMvZywgXCJcIikgPT09IGZvbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogcG90ZW50aWFsSGVhZGVyLFxuICAgICAgICAgICAgICAgICAgdGFibGVzOiBwb3RlbnRpYWxUYWJsZXNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gXCIke2ZvbnROYW1lfVwiIGZvbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlYWRDbWFwVGFibGUoY21hcCwgZmlsZSwgaXNTeW1ib2xpY0ZvbnQsIGhhc0VuY29kaW5nKSB7XG4gICAgICAgIGlmICghY21hcCkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIk5vIGNtYXAgdGFibGUgYXZhaWxhYmxlLlwiKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGxhdGZvcm1JZDogLTEsXG4gICAgICAgICAgICBlbmNvZGluZ0lkOiAtMSxcbiAgICAgICAgICAgIG1hcHBpbmdzOiBbXSxcbiAgICAgICAgICAgIGhhc1Nob3J0Q21hcDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlZ21lbnQ7XG4gICAgICAgIHZhciBzdGFydCA9IChmaWxlLnN0YXJ0ID8gZmlsZS5zdGFydCA6IDApICsgY21hcC5vZmZzZXQ7XG4gICAgICAgIGZpbGUucG9zID0gc3RhcnQ7XG4gICAgICAgIGZpbGUuc2tpcCgyKTtcbiAgICAgICAgdmFyIG51bVRhYmxlcyA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgIHZhciBwb3RlbnRpYWxUYWJsZTtcbiAgICAgICAgdmFyIGNhbkJyZWFrID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICAgIHZhciBwbGF0Zm9ybUlkID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgICAgICB2YXIgZW5jb2RpbmdJZCA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgICAgdmFyIG9mZnNldCA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICB2YXIgdXNlVGFibGUgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChwb3RlbnRpYWxUYWJsZSAmJiBwb3RlbnRpYWxUYWJsZS5wbGF0Zm9ybUlkID09PSBwbGF0Zm9ybUlkICYmIHBvdGVudGlhbFRhYmxlLmVuY29kaW5nSWQgPT09IGVuY29kaW5nSWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwbGF0Zm9ybUlkID09PSAwICYmIGVuY29kaW5nSWQgPT09IDApIHtcbiAgICAgICAgICAgIHVzZVRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtSWQgPT09IDEgJiYgZW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgICAgdXNlVGFibGUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGxhdGZvcm1JZCA9PT0gMyAmJiBlbmNvZGluZ0lkID09PSAxICYmIChoYXNFbmNvZGluZyB8fCAhcG90ZW50aWFsVGFibGUpKSB7XG4gICAgICAgICAgICB1c2VUYWJsZSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICghaXNTeW1ib2xpY0ZvbnQpIHtcbiAgICAgICAgICAgICAgY2FuQnJlYWsgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNTeW1ib2xpY0ZvbnQgJiYgcGxhdGZvcm1JZCA9PT0gMyAmJiBlbmNvZGluZ0lkID09PSAwKSB7XG4gICAgICAgICAgICB1c2VUYWJsZSA9IHRydWU7XG4gICAgICAgICAgICBjYW5CcmVhayA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVzZVRhYmxlKSB7XG4gICAgICAgICAgICBwb3RlbnRpYWxUYWJsZSA9IHtcbiAgICAgICAgICAgICAgcGxhdGZvcm1JZCxcbiAgICAgICAgICAgICAgZW5jb2RpbmdJZCxcbiAgICAgICAgICAgICAgb2Zmc2V0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjYW5CcmVhaykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvdGVudGlhbFRhYmxlKSB7XG4gICAgICAgICAgZmlsZS5wb3MgPSBzdGFydCArIHBvdGVudGlhbFRhYmxlLm9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcG90ZW50aWFsVGFibGUgfHwgZmlsZS5wZWVrQnl0ZSgpID09PSAtMSkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkNvdWxkIG5vdCBmaW5kIGEgcHJlZmVycmVkIGNtYXAgdGFibGUuXCIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwbGF0Zm9ybUlkOiAtMSxcbiAgICAgICAgICAgIGVuY29kaW5nSWQ6IC0xLFxuICAgICAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICAgICAgaGFzU2hvcnRDbWFwOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZm9ybWF0ID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgICAgZmlsZS5za2lwKDIgKyAyKTtcbiAgICAgICAgdmFyIGhhc1Nob3J0Q21hcCA9IGZhbHNlO1xuICAgICAgICB2YXIgbWFwcGluZ3MgPSBbXTtcbiAgICAgICAgdmFyIGosIGdseXBoSWQ7XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gMCkge1xuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAyNTY7IGorKykge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gZmlsZS5nZXRCeXRlKCk7XG5cbiAgICAgICAgICAgIGlmICghaW5kZXgpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICBjaGFyQ29kZTogaixcbiAgICAgICAgICAgICAgZ2x5cGhJZDogaW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhc1Nob3J0Q21hcCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSA0KSB7XG4gICAgICAgICAgdmFyIHNlZ0NvdW50ID0gZmlsZS5nZXRVaW50MTYoKSA+PiAxO1xuICAgICAgICAgIGZpbGUuc2tpcCg2KTtcbiAgICAgICAgICB2YXIgc2VnSW5kZXgsXG4gICAgICAgICAgICAgIHNlZ21lbnRzID0gW107XG5cbiAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgIGVuZDogZmlsZS5nZXRVaW50MTYoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmlsZS5za2lwKDIpO1xuXG4gICAgICAgICAgZm9yIChzZWdJbmRleCA9IDA7IHNlZ0luZGV4IDwgc2VnQ291bnQ7IHNlZ0luZGV4KyspIHtcbiAgICAgICAgICAgIHNlZ21lbnRzW3NlZ0luZGV4XS5zdGFydCA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChzZWdJbmRleCA9IDA7IHNlZ0luZGV4IDwgc2VnQ291bnQ7IHNlZ0luZGV4KyspIHtcbiAgICAgICAgICAgIHNlZ21lbnRzW3NlZ0luZGV4XS5kZWx0YSA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG9mZnNldHNDb3VudCA9IDA7XG5cbiAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgc2VnbWVudCA9IHNlZ21lbnRzW3NlZ0luZGV4XTtcbiAgICAgICAgICAgIHZhciByYW5nZU9mZnNldCA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgIGlmICghcmFuZ2VPZmZzZXQpIHtcbiAgICAgICAgICAgICAgc2VnbWVudC5vZmZzZXRJbmRleCA9IC0xO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG9mZnNldEluZGV4ID0gKHJhbmdlT2Zmc2V0ID4+IDEpIC0gKHNlZ0NvdW50IC0gc2VnSW5kZXgpO1xuICAgICAgICAgICAgc2VnbWVudC5vZmZzZXRJbmRleCA9IG9mZnNldEluZGV4O1xuICAgICAgICAgICAgb2Zmc2V0c0NvdW50ID0gTWF0aC5tYXgob2Zmc2V0c0NvdW50LCBvZmZzZXRJbmRleCArIHNlZ21lbnQuZW5kIC0gc2VnbWVudC5zdGFydCArIDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBvZmZzZXRzID0gW107XG5cbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgb2Zmc2V0c0NvdW50OyBqKyspIHtcbiAgICAgICAgICAgIG9mZnNldHMucHVzaChmaWxlLmdldFVpbnQxNigpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgc2VnbWVudCA9IHNlZ21lbnRzW3NlZ0luZGV4XTtcbiAgICAgICAgICAgIHN0YXJ0ID0gc2VnbWVudC5zdGFydDtcbiAgICAgICAgICAgIHZhciBlbmQgPSBzZWdtZW50LmVuZDtcbiAgICAgICAgICAgIHZhciBkZWx0YSA9IHNlZ21lbnQuZGVsdGE7XG4gICAgICAgICAgICBvZmZzZXRJbmRleCA9IHNlZ21lbnQub2Zmc2V0SW5kZXg7XG5cbiAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGVuZDsgaisrKSB7XG4gICAgICAgICAgICAgIGlmIChqID09PSAweGZmZmYpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdseXBoSWQgPSBvZmZzZXRJbmRleCA8IDAgPyBqIDogb2Zmc2V0c1tvZmZzZXRJbmRleCArIGogLSBzdGFydF07XG4gICAgICAgICAgICAgIGdseXBoSWQgPSBnbHlwaElkICsgZGVsdGEgJiAweGZmZmY7XG4gICAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNoYXJDb2RlOiBqLFxuICAgICAgICAgICAgICAgIGdseXBoSWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gNikge1xuICAgICAgICAgIHZhciBmaXJzdENvZGUgPSBmaWxlLmdldFVpbnQxNigpO1xuICAgICAgICAgIHZhciBlbnRyeUNvdW50ID0gZmlsZS5nZXRVaW50MTYoKTtcblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBlbnRyeUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIGdseXBoSWQgPSBmaWxlLmdldFVpbnQxNigpO1xuICAgICAgICAgICAgdmFyIGNoYXJDb2RlID0gZmlyc3RDb2RlICsgajtcbiAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICBjaGFyQ29kZSxcbiAgICAgICAgICAgICAgZ2x5cGhJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcImNtYXAgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdDogXCIgKyBmb3JtYXQpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwbGF0Zm9ybUlkOiAtMSxcbiAgICAgICAgICAgIGVuY29kaW5nSWQ6IC0xLFxuICAgICAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICAgICAgaGFzU2hvcnRDbWFwOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBtYXBwaW5ncy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgcmV0dXJuIGEuY2hhckNvZGUgLSBiLmNoYXJDb2RlO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAobWFwcGluZ3NbaSAtIDFdLmNoYXJDb2RlID09PSBtYXBwaW5nc1tpXS5jaGFyQ29kZSkge1xuICAgICAgICAgICAgbWFwcGluZ3Muc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgaS0tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhdGZvcm1JZDogcG90ZW50aWFsVGFibGUucGxhdGZvcm1JZCxcbiAgICAgICAgICBlbmNvZGluZ0lkOiBwb3RlbnRpYWxUYWJsZS5lbmNvZGluZ0lkLFxuICAgICAgICAgIG1hcHBpbmdzLFxuICAgICAgICAgIGhhc1Nob3J0Q21hcFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzYW5pdGl6ZU1ldHJpY3MoZmlsZSwgaGVhZGVyLCBtZXRyaWNzLCBudW1HbHlwaHMsIGR1cEZpcnN0RW50cnkpIHtcbiAgICAgICAgaWYgKCFoZWFkZXIpIHtcbiAgICAgICAgICBpZiAobWV0cmljcykge1xuICAgICAgICAgICAgbWV0cmljcy5kYXRhID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmaWxlLnBvcyA9IChmaWxlLnN0YXJ0ID8gZmlsZS5zdGFydCA6IDApICsgaGVhZGVyLm9mZnNldDtcbiAgICAgICAgZmlsZS5wb3MgKz0gNDtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgZmlsZS5wb3MgKz0gODtcbiAgICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgICAgdmFyIG51bU9mTWV0cmljcyA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgaWYgKG51bU9mTWV0cmljcyA+IG51bUdseXBocykge1xuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlRoZSBudW1PZk1ldHJpY3MgKFwiICsgbnVtT2ZNZXRyaWNzICsgXCIpIHNob3VsZCBub3QgYmUgXCIgKyBcImdyZWF0ZXIgdGhhbiB0aGUgbnVtR2x5cGhzIChcIiArIG51bUdseXBocyArIFwiKVwiKTtcbiAgICAgICAgICBudW1PZk1ldHJpY3MgPSBudW1HbHlwaHM7XG4gICAgICAgICAgaGVhZGVyLmRhdGFbMzRdID0gKG51bU9mTWV0cmljcyAmIDB4ZmYwMCkgPj4gODtcbiAgICAgICAgICBoZWFkZXIuZGF0YVszNV0gPSBudW1PZk1ldHJpY3MgJiAweDAwZmY7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbnVtT2ZTaWRlYmVhcmluZ3MgPSBudW1HbHlwaHMgLSBudW1PZk1ldHJpY3M7XG4gICAgICAgIHZhciBudW1NaXNzaW5nID0gbnVtT2ZTaWRlYmVhcmluZ3MgLSAobWV0cmljcy5sZW5ndGggLSBudW1PZk1ldHJpY3MgKiA0ID4+IDEpO1xuXG4gICAgICAgIGlmIChudW1NaXNzaW5nID4gMCkge1xuICAgICAgICAgIHZhciBlbnRyaWVzID0gbmV3IFVpbnQ4QXJyYXkobWV0cmljcy5sZW5ndGggKyBudW1NaXNzaW5nICogMik7XG4gICAgICAgICAgZW50cmllcy5zZXQobWV0cmljcy5kYXRhKTtcblxuICAgICAgICAgIGlmIChkdXBGaXJzdEVudHJ5KSB7XG4gICAgICAgICAgICBlbnRyaWVzW21ldHJpY3MubGVuZ3RoXSA9IG1ldHJpY3MuZGF0YVsyXTtcbiAgICAgICAgICAgIGVudHJpZXNbbWV0cmljcy5sZW5ndGggKyAxXSA9IG1ldHJpY3MuZGF0YVszXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXRyaWNzLmRhdGEgPSBlbnRyaWVzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNhbml0aXplR2x5cGgoc291cmNlLCBzb3VyY2VTdGFydCwgc291cmNlRW5kLCBkZXN0LCBkZXN0U3RhcnQsIGhpbnRzVmFsaWQpIHtcbiAgICAgICAgdmFyIGdseXBoUHJvZmlsZSA9IHtcbiAgICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgICAgc2l6ZU9mSW5zdHJ1Y3Rpb25zOiAwXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNvdXJjZUVuZCAtIHNvdXJjZVN0YXJ0IDw9IDEyKSB7XG4gICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBnbHlmID0gc291cmNlLnN1YmFycmF5KHNvdXJjZVN0YXJ0LCBzb3VyY2VFbmQpO1xuICAgICAgICB2YXIgY29udG91cnNDb3VudCA9IHNpZ25lZEludDE2KGdseWZbMF0sIGdseWZbMV0pO1xuXG4gICAgICAgIGlmIChjb250b3Vyc0NvdW50IDwgMCkge1xuICAgICAgICAgIGNvbnRvdXJzQ291bnQgPSAtMTtcbiAgICAgICAgICB3cml0ZVNpZ25lZEludDE2KGdseWYsIDAsIGNvbnRvdXJzQ291bnQpO1xuICAgICAgICAgIGRlc3Quc2V0KGdseWYsIGRlc3RTdGFydCk7XG4gICAgICAgICAgZ2x5cGhQcm9maWxlLmxlbmd0aCA9IGdseWYubGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGogPSAxMCxcbiAgICAgICAgICAgIGZsYWdzQ291bnQgPSAwO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb250b3Vyc0NvdW50OyBpKyspIHtcbiAgICAgICAgICB2YXIgZW5kUG9pbnQgPSBnbHlmW2pdIDw8IDggfCBnbHlmW2ogKyAxXTtcbiAgICAgICAgICBmbGFnc0NvdW50ID0gZW5kUG9pbnQgKyAxO1xuICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbnNTdGFydCA9IGo7XG4gICAgICAgIHZhciBpbnN0cnVjdGlvbnNMZW5ndGggPSBnbHlmW2pdIDw8IDggfCBnbHlmW2ogKyAxXTtcbiAgICAgICAgZ2x5cGhQcm9maWxlLnNpemVPZkluc3RydWN0aW9ucyA9IGluc3RydWN0aW9uc0xlbmd0aDtcbiAgICAgICAgaiArPSAyICsgaW5zdHJ1Y3Rpb25zTGVuZ3RoO1xuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25zRW5kID0gajtcbiAgICAgICAgdmFyIGNvb3JkaW5hdGVzTGVuZ3RoID0gMDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmxhZ3NDb3VudDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGZsYWcgPSBnbHlmW2orK107XG5cbiAgICAgICAgICBpZiAoZmxhZyAmIDB4YzApIHtcbiAgICAgICAgICAgIGdseWZbaiAtIDFdID0gZmxhZyAmIDB4M2Y7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHhMZW5ndGggPSAyO1xuXG4gICAgICAgICAgaWYgKGZsYWcgJiAyKSB7XG4gICAgICAgICAgICB4TGVuZ3RoID0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZsYWcgJiAxNikge1xuICAgICAgICAgICAgeExlbmd0aCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHlMZW5ndGggPSAyO1xuXG4gICAgICAgICAgaWYgKGZsYWcgJiA0KSB7XG4gICAgICAgICAgICB5TGVuZ3RoID0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZsYWcgJiAzMikge1xuICAgICAgICAgICAgeUxlbmd0aCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeHlMZW5ndGggPSB4TGVuZ3RoICsgeUxlbmd0aDtcbiAgICAgICAgICBjb29yZGluYXRlc0xlbmd0aCArPSB4eUxlbmd0aDtcblxuICAgICAgICAgIGlmIChmbGFnICYgOCkge1xuICAgICAgICAgICAgdmFyIHJlcGVhdCA9IGdseWZbaisrXTtcbiAgICAgICAgICAgIGkgKz0gcmVwZWF0O1xuICAgICAgICAgICAgY29vcmRpbmF0ZXNMZW5ndGggKz0gcmVwZWF0ICogeHlMZW5ndGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvb3JkaW5hdGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBnbHlwaERhdGFMZW5ndGggPSBqICsgY29vcmRpbmF0ZXNMZW5ndGg7XG5cbiAgICAgICAgaWYgKGdseXBoRGF0YUxlbmd0aCA+IGdseWYubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGludHNWYWxpZCAmJiBpbnN0cnVjdGlvbnNMZW5ndGggPiAwKSB7XG4gICAgICAgICAgZGVzdC5zZXQoZ2x5Zi5zdWJhcnJheSgwLCBpbnN0cnVjdGlvbnNTdGFydCksIGRlc3RTdGFydCk7XG4gICAgICAgICAgZGVzdC5zZXQoWzAsIDBdLCBkZXN0U3RhcnQgKyBpbnN0cnVjdGlvbnNTdGFydCk7XG4gICAgICAgICAgZGVzdC5zZXQoZ2x5Zi5zdWJhcnJheShpbnN0cnVjdGlvbnNFbmQsIGdseXBoRGF0YUxlbmd0aCksIGRlc3RTdGFydCArIGluc3RydWN0aW9uc1N0YXJ0ICsgMik7XG4gICAgICAgICAgZ2x5cGhEYXRhTGVuZ3RoIC09IGluc3RydWN0aW9uc0xlbmd0aDtcblxuICAgICAgICAgIGlmIChnbHlmLmxlbmd0aCAtIGdseXBoRGF0YUxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgIGdseXBoRGF0YUxlbmd0aCA9IGdseXBoRGF0YUxlbmd0aCArIDMgJiB+MztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnbHlwaFByb2ZpbGUubGVuZ3RoID0gZ2x5cGhEYXRhTGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2x5Zi5sZW5ndGggLSBnbHlwaERhdGFMZW5ndGggPiAzKSB7XG4gICAgICAgICAgZ2x5cGhEYXRhTGVuZ3RoID0gZ2x5cGhEYXRhTGVuZ3RoICsgMyAmIH4zO1xuICAgICAgICAgIGRlc3Quc2V0KGdseWYuc3ViYXJyYXkoMCwgZ2x5cGhEYXRhTGVuZ3RoKSwgZGVzdFN0YXJ0KTtcbiAgICAgICAgICBnbHlwaFByb2ZpbGUubGVuZ3RoID0gZ2x5cGhEYXRhTGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0LnNldChnbHlmLCBkZXN0U3RhcnQpO1xuICAgICAgICBnbHlwaFByb2ZpbGUubGVuZ3RoID0gZ2x5Zi5sZW5ndGg7XG4gICAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNhbml0aXplSGVhZChoZWFkLCBudW1HbHlwaHMsIGxvY2FMZW5ndGgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBoZWFkLmRhdGE7XG4gICAgICAgIHZhciB2ZXJzaW9uID0gaW50MzIoZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSk7XG5cbiAgICAgICAgaWYgKHZlcnNpb24gPj4gMTYgIT09IDEpIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIHZlcnNpb24gaW4gaGVhZCB0YWJsZTogXCIgKyB2ZXJzaW9uKTtcbiAgICAgICAgICBkYXRhWzBdID0gMDtcbiAgICAgICAgICBkYXRhWzFdID0gMTtcbiAgICAgICAgICBkYXRhWzJdID0gMDtcbiAgICAgICAgICBkYXRhWzNdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbmRleFRvTG9jRm9ybWF0ID0gaW50MTYoZGF0YVs1MF0sIGRhdGFbNTFdKTtcblxuICAgICAgICBpZiAoaW5kZXhUb0xvY0Zvcm1hdCA8IDAgfHwgaW5kZXhUb0xvY0Zvcm1hdCA+IDEpIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIGluZGV4VG9Mb2NGb3JtYXQgaW4gaGVhZCB0YWJsZTogXCIgKyBpbmRleFRvTG9jRm9ybWF0KTtcbiAgICAgICAgICB2YXIgbnVtR2x5cGhzUGx1c09uZSA9IG51bUdseXBocyArIDE7XG5cbiAgICAgICAgICBpZiAobG9jYUxlbmd0aCA9PT0gbnVtR2x5cGhzUGx1c09uZSA8PCAxKSB7XG4gICAgICAgICAgICBkYXRhWzUwXSA9IDA7XG4gICAgICAgICAgICBkYXRhWzUxXSA9IDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChsb2NhTGVuZ3RoID09PSBudW1HbHlwaHNQbHVzT25lIDw8IDIpIHtcbiAgICAgICAgICAgIGRhdGFbNTBdID0gMDtcbiAgICAgICAgICAgIGRhdGFbNTFdID0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQ291bGQgbm90IGZpeCBpbmRleFRvTG9jRm9ybWF0OiBcIiArIGluZGV4VG9Mb2NGb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzYW5pdGl6ZUdseXBoTG9jYXRpb25zKGxvY2EsIGdseWYsIG51bUdseXBocywgaXNHbHlwaExvY2F0aW9uc0xvbmcsIGhpbnRzVmFsaWQsIGR1cEZpcnN0RW50cnksIG1heFNpemVPZkluc3RydWN0aW9ucykge1xuICAgICAgICB2YXIgaXRlbVNpemUsIGl0ZW1EZWNvZGUsIGl0ZW1FbmNvZGU7XG5cbiAgICAgICAgaWYgKGlzR2x5cGhMb2NhdGlvbnNMb25nKSB7XG4gICAgICAgICAgaXRlbVNpemUgPSA0O1xuXG4gICAgICAgICAgaXRlbURlY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhW29mZnNldF0gPDwgMjQgfCBkYXRhW29mZnNldCArIDFdIDw8IDE2IHwgZGF0YVtvZmZzZXQgKyAyXSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAzXTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaXRlbUVuY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlTG9uZyhkYXRhLCBvZmZzZXQsIHZhbHVlKSB7XG4gICAgICAgICAgICBkYXRhW29mZnNldF0gPSB2YWx1ZSA+Pj4gMjQgJiAweGZmO1xuICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyAxXSA9IHZhbHVlID4+IDE2ICYgMHhmZjtcbiAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+PiA4ICYgMHhmZjtcbiAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgM10gPSB2YWx1ZSAmIDB4ZmY7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtU2l6ZSA9IDI7XG5cbiAgICAgICAgICBpdGVtRGVjb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDkgfCBkYXRhW29mZnNldCArIDFdIDw8IDE7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGl0ZW1FbmNvZGUgPSBmdW5jdGlvbiBmb250SXRlbUVuY29kZShkYXRhLCBvZmZzZXQsIHZhbHVlKSB7XG4gICAgICAgICAgICBkYXRhW29mZnNldF0gPSB2YWx1ZSA+PiA5ICYgMHhmZjtcbiAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+PiAxICYgMHhmZjtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG51bUdseXBoc091dCA9IGR1cEZpcnN0RW50cnkgPyBudW1HbHlwaHMgKyAxIDogbnVtR2x5cGhzO1xuICAgICAgICB2YXIgbG9jYURhdGFTaXplID0gaXRlbVNpemUgKiAoMSArIG51bUdseXBoc091dCk7XG4gICAgICAgIHZhciBsb2NhRGF0YSA9IG5ldyBVaW50OEFycmF5KGxvY2FEYXRhU2l6ZSk7XG4gICAgICAgIGxvY2FEYXRhLnNldChsb2NhLmRhdGEuc3ViYXJyYXkoMCwgbG9jYURhdGFTaXplKSk7XG4gICAgICAgIGxvY2EuZGF0YSA9IGxvY2FEYXRhO1xuICAgICAgICB2YXIgb2xkR2x5ZkRhdGEgPSBnbHlmLmRhdGE7XG4gICAgICAgIHZhciBvbGRHbHlmRGF0YUxlbmd0aCA9IG9sZEdseWZEYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIG5ld0dseWZEYXRhID0gbmV3IFVpbnQ4QXJyYXkob2xkR2x5ZkRhdGFMZW5ndGgpO1xuICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBpdGVtRGVjb2RlKGxvY2FEYXRhLCAwKTtcbiAgICAgICAgdmFyIHdyaXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIG1pc3NpbmdHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBpdGVtRW5jb2RlKGxvY2FEYXRhLCAwLCB3cml0ZU9mZnNldCk7XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBpdGVtU2l6ZTsgaSA8IG51bUdseXBoczsgaSsrLCBqICs9IGl0ZW1TaXplKSB7XG4gICAgICAgICAgdmFyIGVuZE9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYURhdGEsIGopO1xuXG4gICAgICAgICAgaWYgKGVuZE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVuZE9mZnNldCA+IG9sZEdseWZEYXRhTGVuZ3RoICYmIChvbGRHbHlmRGF0YUxlbmd0aCArIDMgJiB+MykgPT09IGVuZE9mZnNldCkge1xuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gb2xkR2x5ZkRhdGFMZW5ndGg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVuZE9mZnNldCA+IG9sZEdseWZEYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IGVuZE9mZnNldDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZ2x5cGhQcm9maWxlID0gc2FuaXRpemVHbHlwaChvbGRHbHlmRGF0YSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbmV3R2x5ZkRhdGEsIHdyaXRlT2Zmc2V0LCBoaW50c1ZhbGlkKTtcbiAgICAgICAgICB2YXIgbmV3TGVuZ3RoID0gZ2x5cGhQcm9maWxlLmxlbmd0aDtcblxuICAgICAgICAgIGlmIChuZXdMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG1pc3NpbmdHbHlwaHNbaV0gPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChnbHlwaFByb2ZpbGUuc2l6ZU9mSW5zdHJ1Y3Rpb25zID4gbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgICAgICBtYXhTaXplT2ZJbnN0cnVjdGlvbnMgPSBnbHlwaFByb2ZpbGUuc2l6ZU9mSW5zdHJ1Y3Rpb25zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdyaXRlT2Zmc2V0ICs9IG5ld0xlbmd0aDtcbiAgICAgICAgICBpdGVtRW5jb2RlKGxvY2FEYXRhLCBqLCB3cml0ZU9mZnNldCk7XG4gICAgICAgICAgc3RhcnRPZmZzZXQgPSBlbmRPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod3JpdGVPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICB2YXIgc2ltcGxlR2x5cGggPSBuZXcgVWludDhBcnJheShbMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDBdKTtcblxuICAgICAgICAgIGZvciAoaSA9IDAsIGogPSBpdGVtU2l6ZTsgaSA8IG51bUdseXBoc091dDsgaSsrLCBqICs9IGl0ZW1TaXplKSB7XG4gICAgICAgICAgICBpdGVtRW5jb2RlKGxvY2FEYXRhLCBqLCBzaW1wbGVHbHlwaC5sZW5ndGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdseWYuZGF0YSA9IHNpbXBsZUdseXBoO1xuICAgICAgICB9IGVsc2UgaWYgKGR1cEZpcnN0RW50cnkpIHtcbiAgICAgICAgICB2YXIgZmlyc3RFbnRyeUxlbmd0aCA9IGl0ZW1EZWNvZGUobG9jYURhdGEsIGl0ZW1TaXplKTtcblxuICAgICAgICAgIGlmIChuZXdHbHlmRGF0YS5sZW5ndGggPiBmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpIHtcbiAgICAgICAgICAgIGdseWYuZGF0YSA9IG5ld0dseWZEYXRhLnN1YmFycmF5KDAsIGZpcnN0RW50cnlMZW5ndGggKyB3cml0ZU9mZnNldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdseWYuZGF0YSA9IG5ldyBVaW50OEFycmF5KGZpcnN0RW50cnlMZW5ndGggKyB3cml0ZU9mZnNldCk7XG4gICAgICAgICAgICBnbHlmLmRhdGEuc2V0KG5ld0dseWZEYXRhLnN1YmFycmF5KDAsIHdyaXRlT2Zmc2V0KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZ2x5Zi5kYXRhLnNldChuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoKSwgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgIGl0ZW1FbmNvZGUobG9jYS5kYXRhLCBsb2NhRGF0YS5sZW5ndGggLSBpdGVtU2l6ZSwgd3JpdGVPZmZzZXQgKyBmaXJzdEVudHJ5TGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnbHlmLmRhdGEgPSBuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCB3cml0ZU9mZnNldCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1pc3NpbmdHbHlwaHMsXG4gICAgICAgICAgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlYWRQb3N0U2NyaXB0VGFibGUocG9zdCwgcHJvcGVydGllc09iaiwgbWF4cE51bUdseXBocykge1xuICAgICAgICB2YXIgc3RhcnQgPSAoZm9udC5zdGFydCA/IGZvbnQuc3RhcnQgOiAwKSArIHBvc3Qub2Zmc2V0O1xuICAgICAgICBmb250LnBvcyA9IHN0YXJ0O1xuICAgICAgICB2YXIgbGVuZ3RoID0gcG9zdC5sZW5ndGgsXG4gICAgICAgICAgICBlbmQgPSBzdGFydCArIGxlbmd0aDtcbiAgICAgICAgdmFyIHZlcnNpb24gPSBmb250LmdldEludDMyKCk7XG4gICAgICAgIGZvbnQuc2tpcCgyOCk7XG4gICAgICAgIHZhciBnbHlwaE5hbWVzO1xuICAgICAgICB2YXIgdmFsaWQgPSB0cnVlO1xuICAgICAgICB2YXIgaTtcblxuICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgICAgICBjYXNlIDB4MDAwMTAwMDA6XG4gICAgICAgICAgICBnbHlwaE5hbWVzID0gTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4MDAwMjAwMDA6XG4gICAgICAgICAgICB2YXIgbnVtR2x5cGhzID0gZm9udC5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgaWYgKG51bUdseXBocyAhPT0gbWF4cE51bUdseXBocykge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGdseXBoTmFtZUluZGV4ZXMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7XG4gICAgICAgICAgICAgIHZhciBpbmRleCA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDMyNzY4KSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdseXBoTmFtZUluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjdXN0b21OYW1lcyA9IFtdO1xuICAgICAgICAgICAgdmFyIHN0ckJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICB3aGlsZSAoZm9udC5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgdmFyIHN0cmluZ0xlbmd0aCA9IGZvbnQuZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICBzdHJCdWYubGVuZ3RoID0gc3RyaW5nTGVuZ3RoO1xuXG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIHN0ckJ1ZltpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZm9udC5nZXRCeXRlKCkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3VzdG9tTmFtZXMucHVzaChzdHJCdWYuam9pbihcIlwiKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdseXBoTmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7XG4gICAgICAgICAgICAgIHZhciBqID0gZ2x5cGhOYW1lSW5kZXhlc1tpXTtcblxuICAgICAgICAgICAgICBpZiAoaiA8IDI1OCkge1xuICAgICAgICAgICAgICAgIGdseXBoTmFtZXMucHVzaChNYWNTdGFuZGFyZEdseXBoT3JkZXJpbmdbal0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZ2x5cGhOYW1lcy5wdXNoKGN1c3RvbU5hbWVzW2ogLSAyNThdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4MDAwMzAwMDA6XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbmtub3duL3Vuc3VwcG9ydGVkIHBvc3QgdGFibGUgdmVyc2lvbiBcIiArIHZlcnNpb24pO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNPYmouZGVmYXVsdEVuY29kaW5nKSB7XG4gICAgICAgICAgICAgIGdseXBoTmFtZXMgPSBwcm9wZXJ0aWVzT2JqLmRlZmF1bHRFbmNvZGluZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzT2JqLmdseXBoTmFtZXMgPSBnbHlwaE5hbWVzO1xuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlYWROYW1lVGFibGUobmFtZVRhYmxlKSB7XG4gICAgICAgIHZhciBzdGFydCA9IChmb250LnN0YXJ0ID8gZm9udC5zdGFydCA6IDApICsgbmFtZVRhYmxlLm9mZnNldDtcbiAgICAgICAgZm9udC5wb3MgPSBzdGFydDtcbiAgICAgICAgdmFyIG5hbWVzID0gW1tdLCBbXV07XG4gICAgICAgIHZhciBsZW5ndGggPSBuYW1lVGFibGUubGVuZ3RoLFxuICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBsZW5ndGg7XG4gICAgICAgIHZhciBmb3JtYXQgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICB2YXIgRk9STUFUXzBfSEVBREVSX0xFTkdUSCA9IDY7XG5cbiAgICAgICAgaWYgKGZvcm1hdCAhPT0gMCB8fCBsZW5ndGggPCBGT1JNQVRfMF9IRUFERVJfTEVOR1RIKSB7XG4gICAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG51bVJlY29yZHMgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICB2YXIgc3RyaW5nc1N0YXJ0ID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgdmFyIHJlY29yZHMgPSBbXTtcbiAgICAgICAgdmFyIE5BTUVfUkVDT1JEX0xFTkdUSCA9IDEyO1xuICAgICAgICB2YXIgaSwgaWk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVJlY29yZHMgJiYgZm9udC5wb3MgKyBOQU1FX1JFQ09SRF9MRU5HVEggPD0gZW5kOyBpKyspIHtcbiAgICAgICAgICB2YXIgciA9IHtcbiAgICAgICAgICAgIHBsYXRmb3JtOiBmb250LmdldFVpbnQxNigpLFxuICAgICAgICAgICAgZW5jb2Rpbmc6IGZvbnQuZ2V0VWludDE2KCksXG4gICAgICAgICAgICBsYW5ndWFnZTogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgIG5hbWU6IGZvbnQuZ2V0VWludDE2KCksXG4gICAgICAgICAgICBsZW5ndGg6IGZvbnQuZ2V0VWludDE2KCksXG4gICAgICAgICAgICBvZmZzZXQ6IGZvbnQuZ2V0VWludDE2KClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHIucGxhdGZvcm0gPT09IDEgJiYgci5lbmNvZGluZyA9PT0gMCAmJiByLmxhbmd1YWdlID09PSAwIHx8IHIucGxhdGZvcm0gPT09IDMgJiYgci5lbmNvZGluZyA9PT0gMSAmJiByLmxhbmd1YWdlID09PSAweDQwOSkge1xuICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gcmVjb3Jkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IHJlY29yZHNbaV07XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcG9zID0gc3RhcnQgKyBzdHJpbmdzU3RhcnQgKyByZWNvcmQub2Zmc2V0O1xuXG4gICAgICAgICAgaWYgKHBvcyArIHJlY29yZC5sZW5ndGggPiBlbmQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvbnQucG9zID0gcG9zO1xuICAgICAgICAgIHZhciBuYW1lSW5kZXggPSByZWNvcmQubmFtZTtcblxuICAgICAgICAgIGlmIChyZWNvcmQuZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIHZhciBzdHIgPSBcIlwiO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSByZWNvcmQubGVuZ3RoOyBqIDwgamo7IGogKz0gMikge1xuICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShmb250LmdldFVpbnQxNigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFtZXNbMV1bbmFtZUluZGV4XSA9IHN0cjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmFtZXNbMF1bbmFtZUluZGV4XSA9ICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShmb250LmdldEJ5dGVzKHJlY29yZC5sZW5ndGgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBUVE9wc1N0YWNrRGVsdGFzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC0yLCAtMiwgLTIsIC0yLCAwLCAwLCAtMiwgLTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMCwgMCwgLTEsIDAsIC0xLCAtMSwgLTEsIC0xLCAxLCAtMSwgLTk5OSwgMCwgMSwgMCwgLTEsIC0yLCAwLCAtMSwgLTIsIC0xLCAtMSwgMCwgLTEsIC0xLCAwLCAwLCAtOTk5LCAtOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTIsIC05OTksIC0yLCAtMiwgLTk5OSwgMCwgLTIsIC0yLCAwLCAwLCAtMiwgMCwgLTIsIDAsIDAsIDAsIC0yLCAtMSwgLTEsIDEsIDEsIDAsIDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAtMSwgMCwgLTEsIC0xLCAwLCAtOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAtMiwgLTk5OSwgLTk5OSwgLTk5OSwgLTk5OSwgLTk5OSwgLTEsIC0xLCAtMiwgLTIsIDAsIDAsIDAsIDAsIC0xLCAtMSwgLTk5OSwgLTIsIC0yLCAwLCAwLCAtMSwgLTIsIC0yLCAwLCAwLCAwLCAtMSwgLTEsIC0xLCAtMl07XG5cbiAgICAgIGZ1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtKHRhYmxlLCB0dENvbnRleHQpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0YWJsZS5kYXRhO1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbixcbiAgICAgICAgICAgIGIsXG4gICAgICAgICAgICBmdW5jSWQsXG4gICAgICAgICAgICBwYyxcbiAgICAgICAgICAgIGxhc3RFbmRmID0gMCxcbiAgICAgICAgICAgIGxhc3REZWZmID0gMDtcbiAgICAgICAgdmFyIHN0YWNrID0gW107XG4gICAgICAgIHZhciBjYWxsc3RhY2sgPSBbXTtcbiAgICAgICAgdmFyIGZ1bmN0aW9uc0NhbGxlZCA9IFtdO1xuICAgICAgICB2YXIgdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zID0gdHRDb250ZXh0LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucztcbiAgICAgICAgdmFyIGluRkRFRiA9IGZhbHNlLFxuICAgICAgICAgICAgaWZMZXZlbCA9IDAsXG4gICAgICAgICAgICBpbkVMU0UgPSAwO1xuXG4gICAgICAgIGZvciAodmFyIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTspIHtcbiAgICAgICAgICB2YXIgb3AgPSBkYXRhW2krK107XG5cbiAgICAgICAgICBpZiAob3AgPT09IDB4NDApIHtcbiAgICAgICAgICAgIG4gPSBkYXRhW2krK107XG5cbiAgICAgICAgICAgIGlmIChpbkZERUYgfHwgaW5FTFNFKSB7XG4gICAgICAgICAgICAgIGkgKz0gbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGRhdGFbaSsrXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDQxKSB7XG4gICAgICAgICAgICBuID0gZGF0YVtpKytdO1xuXG4gICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICBpICs9IG4gKiAyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgIGIgPSBkYXRhW2krK107XG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChiIDw8IDggfCBkYXRhW2krK10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICgob3AgJiAweGY4KSA9PT0gMHhiMCkge1xuICAgICAgICAgICAgbiA9IG9wIC0gMHhiMCArIDE7XG5cbiAgICAgICAgICAgIGlmIChpbkZERUYgfHwgaW5FTFNFKSB7XG4gICAgICAgICAgICAgIGkgKz0gbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGRhdGFbaSsrXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKChvcCAmIDB4ZjgpID09PSAweGI4KSB7XG4gICAgICAgICAgICBuID0gb3AgLSAweGI4ICsgMTtcblxuICAgICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHtcbiAgICAgICAgICAgICAgaSArPSBuICogMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBiID0gZGF0YVtpKytdO1xuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYiA8PCA4IHwgZGF0YVtpKytdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MmIgJiYgIXRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFpbkZERUYgJiYgIWluRUxTRSkge1xuICAgICAgICAgICAgICBmdW5jSWQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgICBpZiAoaXNOYU4oZnVuY0lkKSkge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlRUOiBDQUxMIGVtcHR5IHN0YWNrIChvciBpbnZhbGlkIGVudHJ5KS5cIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHRDb250ZXh0LmZ1bmN0aW9uc1VzZWRbZnVuY0lkXSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoZnVuY0lkIGluIHR0Q29udGV4dC5mdW5jdGlvbnNTdGFja0RlbHRhcykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbmV3U3RhY2tMZW5ndGggPSBzdGFjay5sZW5ndGggKyB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXNbZnVuY0lkXTtcblxuICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0YWNrTGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUVDogQ0FMTCBpbnZhbGlkIGZ1bmN0aW9ucyBzdGFjayBkZWx0YS5cIik7XG4gICAgICAgICAgICAgICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgc3RhY2subGVuZ3RoID0gbmV3U3RhY2tMZW5ndGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmdW5jSWQgaW4gdHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWQgJiYgIWZ1bmN0aW9uc0NhbGxlZC5pbmNsdWRlcyhmdW5jSWQpKSB7XG4gICAgICAgICAgICAgICAgICBjYWxsc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgIHN0YWNrVG9wOiBzdGFjay5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc0NhbGxlZC5wdXNoKGZ1bmNJZCk7XG4gICAgICAgICAgICAgICAgICBwYyA9IHR0Q29udGV4dC5mdW5jdGlvbnNEZWZpbmVkW2Z1bmNJZF07XG5cbiAgICAgICAgICAgICAgICAgIGlmICghcGMpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IENBTEwgbm9uLWV4aXN0ZW50IGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgICAgICAgICB0dENvbnRleHQuaGludHNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGRhdGEgPSBwYy5kYXRhO1xuICAgICAgICAgICAgICAgICAgaSA9IHBjLmk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgyYyAmJiAhdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUVDogbmVzdGVkIEZERUZzIG5vdCBhbGxvd2VkXCIpO1xuICAgICAgICAgICAgICB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbkZERUYgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdERlZmYgPSBpO1xuICAgICAgICAgICAgZnVuY0lkID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICB0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtmdW5jSWRdID0ge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MmQpIHtcbiAgICAgICAgICAgIGlmIChpbkZERUYpIHtcbiAgICAgICAgICAgICAgaW5GREVGID0gZmFsc2U7XG4gICAgICAgICAgICAgIGxhc3RFbmRmID0gaTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBjID0gY2FsbHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgIGlmICghcGMpIHtcbiAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUVDogRU5ERiBiYWQgc3RhY2tcIik7XG4gICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmdW5jSWQgPSBmdW5jdGlvbnNDYWxsZWQucG9wKCk7XG4gICAgICAgICAgICAgIGRhdGEgPSBwYy5kYXRhO1xuICAgICAgICAgICAgICBpID0gcGMuaTtcbiAgICAgICAgICAgICAgdHRDb250ZXh0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW2Z1bmNJZF0gPSBzdGFjay5sZW5ndGggLSBwYy5zdGFja1RvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDg5KSB7XG4gICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUVDogbmVzdGVkIElERUZzIG5vdCBhbGxvd2VkXCIpO1xuICAgICAgICAgICAgICB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbkZERUYgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdERlZmYgPSBpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4NTgpIHtcbiAgICAgICAgICAgICsraWZMZXZlbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDFiKSB7XG4gICAgICAgICAgICBpbkVMU0UgPSBpZkxldmVsO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4NTkpIHtcbiAgICAgICAgICAgIGlmIChpbkVMU0UgPT09IGlmTGV2ZWwpIHtcbiAgICAgICAgICAgICAgaW5FTFNFID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLS1pZkxldmVsO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MWMpIHtcbiAgICAgICAgICAgIGlmICghaW5GREVGICYmICFpbkVMU0UpIHtcbiAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgaSArPSBvZmZzZXQgLSAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFpbkZERUYgJiYgIWluRUxTRSkge1xuICAgICAgICAgICAgbGV0IHN0YWNrRGVsdGEgPSAwO1xuXG4gICAgICAgICAgICBpZiAob3AgPD0gMHg4ZSkge1xuICAgICAgICAgICAgICBzdGFja0RlbHRhID0gVFRPcHNTdGFja0RlbHRhc1tvcF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wID49IDB4YzAgJiYgb3AgPD0gMHhkZikge1xuICAgICAgICAgICAgICBzdGFja0RlbHRhID0gLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wID49IDB4ZTApIHtcbiAgICAgICAgICAgICAgc3RhY2tEZWx0YSA9IC0yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3AgPj0gMHg3MSAmJiBvcCA8PSAweDc1KSB7XG4gICAgICAgICAgICAgIG4gPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKG4pKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tEZWx0YSA9IC1uICogMjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAoc3RhY2tEZWx0YSA8IDAgJiYgc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgc3RhY2tEZWx0YSsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAoc3RhY2tEZWx0YSA+IDApIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChOYU4pO1xuICAgICAgICAgICAgICBzdGFja0RlbHRhLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHRDb250ZXh0LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyA9IHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucztcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBbZGF0YV07XG5cbiAgICAgICAgaWYgKGkgPiBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRlbnQucHVzaChuZXcgVWludDhBcnJheShpIC0gZGF0YS5sZW5ndGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0RGVmZiA+IGxhc3RFbmRmKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWxcIik7XG4gICAgICAgICAgY29udGVudC5wdXNoKG5ldyBVaW50OEFycmF5KFsweDIyLCAweDJkXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9sZFRUVGFibGUodGFibGUsIGNvbnRlbnQpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjaGVja0ludmFsaWRGdW5jdGlvbnModHRDb250ZXh0LCBtYXhGdW5jdGlvbkRlZnMpIHtcbiAgICAgICAgaWYgKHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoID4gbWF4RnVuY3Rpb25EZWZzKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZFwiKTtcbiAgICAgICAgICB0dENvbnRleHQuaGludHNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IHR0Q29udGV4dC5mdW5jdGlvbnNVc2VkLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICBpZiAoaiA+IG1heEZ1bmN0aW9uRGVmcykge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IGludmFsaWQgZnVuY3Rpb24gaWQ6IFwiICsgaik7XG4gICAgICAgICAgICB0dENvbnRleHQuaGludHNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0dENvbnRleHQuZnVuY3Rpb25zVXNlZFtqXSAmJiAhdHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWRbal0pIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiB1bmRlZmluZWQgZnVuY3Rpb246IFwiICsgaik7XG4gICAgICAgICAgICB0dENvbnRleHQuaGludHNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmb2xkVFRUYWJsZSh0YWJsZSwgY29udGVudCkge1xuICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdmFyIG5ld0xlbmd0aCA9IDA7XG4gICAgICAgICAgdmFyIGosIGpqO1xuXG4gICAgICAgICAgZm9yIChqID0gMCwgamogPSBjb250ZW50Lmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgIG5ld0xlbmd0aCArPSBjb250ZW50W2pdLmxlbmd0aDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdMZW5ndGggPSBuZXdMZW5ndGggKyAzICYgfjM7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KG5ld0xlbmd0aCk7XG4gICAgICAgICAgdmFyIHBvcyA9IDA7XG5cbiAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGNvbnRlbnQubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgcmVzdWx0LnNldChjb250ZW50W2pdLCBwb3MpO1xuICAgICAgICAgICAgcG9zICs9IGNvbnRlbnRbal0ubGVuZ3RoO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhYmxlLmRhdGEgPSByZXN1bHQ7XG4gICAgICAgICAgdGFibGUubGVuZ3RoID0gbmV3TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtcyhmcGdtLCBwcmVwLCBjdnQsIG1heEZ1bmN0aW9uRGVmcykge1xuICAgICAgICB2YXIgdHRDb250ZXh0ID0ge1xuICAgICAgICAgIGZ1bmN0aW9uc0RlZmluZWQ6IFtdLFxuICAgICAgICAgIGZ1bmN0aW9uc1VzZWQ6IFtdLFxuICAgICAgICAgIGZ1bmN0aW9uc1N0YWNrRGVsdGFzOiBbXSxcbiAgICAgICAgICB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM6IGZhbHNlLFxuICAgICAgICAgIGhpbnRzVmFsaWQ6IHRydWVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZnBnbSkge1xuICAgICAgICAgIHNhbml0aXplVFRQcm9ncmFtKGZwZ20sIHR0Q29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlcCkge1xuICAgICAgICAgIHNhbml0aXplVFRQcm9ncmFtKHByZXAsIHR0Q29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnBnbSkge1xuICAgICAgICAgIGNoZWNrSW52YWxpZEZ1bmN0aW9ucyh0dENvbnRleHQsIG1heEZ1bmN0aW9uRGVmcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3Z0ICYmIGN2dC5sZW5ndGggJiAxKSB7XG4gICAgICAgICAgdmFyIGN2dERhdGEgPSBuZXcgVWludDhBcnJheShjdnQubGVuZ3RoICsgMSk7XG4gICAgICAgICAgY3Z0RGF0YS5zZXQoY3Z0LmRhdGEpO1xuICAgICAgICAgIGN2dC5kYXRhID0gY3Z0RGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0dENvbnRleHQuaGludHNWYWxpZDtcbiAgICAgIH1cblxuICAgICAgZm9udCA9IG5ldyBfc3RyZWFtLlN0cmVhbShuZXcgVWludDhBcnJheShmb250LmdldEJ5dGVzKCkpKTtcbiAgICAgIGxldCBoZWFkZXIsIHRhYmxlcztcblxuICAgICAgaWYgKGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZShmb250KSkge1xuICAgICAgICBjb25zdCB0dGNEYXRhID0gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZm9udCwgdGhpcy5uYW1lKTtcbiAgICAgICAgaGVhZGVyID0gdHRjRGF0YS5oZWFkZXI7XG4gICAgICAgIHRhYmxlcyA9IHR0Y0RhdGEudGFibGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyID0gcmVhZE9wZW5UeXBlSGVhZGVyKGZvbnQpO1xuICAgICAgICB0YWJsZXMgPSByZWFkVGFibGVzKGZvbnQsIGhlYWRlci5udW1UYWJsZXMpO1xuICAgICAgfVxuXG4gICAgICBsZXQgY2ZmLCBjZmZGaWxlO1xuICAgICAgdmFyIGlzVHJ1ZVR5cGUgPSAhdGFibGVzW1wiQ0ZGIFwiXTtcblxuICAgICAgaWYgKCFpc1RydWVUeXBlKSB7XG4gICAgICAgIGNvbnN0IGlzQ29tcG9zaXRlID0gcHJvcGVydGllcy5jb21wb3NpdGUgJiYgKChwcm9wZXJ0aWVzLmNpZFRvR2lkTWFwIHx8IFtdKS5sZW5ndGggPiAwIHx8ICEocHJvcGVydGllcy5jTWFwIGluc3RhbmNlb2YgX2NtYXAuSWRlbnRpdHlDTWFwKSk7XG5cbiAgICAgICAgaWYgKGhlYWRlci52ZXJzaW9uID09PSBcIk9UVE9cIiAmJiAhaXNDb21wb3NpdGUgfHwgIXRhYmxlcy5oZWFkIHx8ICF0YWJsZXMuaGhlYSB8fCAhdGFibGVzLm1heHAgfHwgIXRhYmxlcy5wb3N0KSB7XG4gICAgICAgICAgY2ZmRmlsZSA9IG5ldyBfc3RyZWFtLlN0cmVhbSh0YWJsZXNbXCJDRkYgXCJdLmRhdGEpO1xuICAgICAgICAgIGNmZiA9IG5ldyBDRkZGb250KGNmZkZpbGUsIHByb3BlcnRpZXMpO1xuICAgICAgICAgIGFkanVzdFdpZHRocyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0KG5hbWUsIGNmZiwgcHJvcGVydGllcyk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgdGFibGVzLmdseWY7XG4gICAgICAgIGRlbGV0ZSB0YWJsZXMubG9jYTtcbiAgICAgICAgZGVsZXRlIHRhYmxlcy5mcGdtO1xuICAgICAgICBkZWxldGUgdGFibGVzLnByZXA7XG4gICAgICAgIGRlbGV0ZSB0YWJsZXNbXCJjdnQgXCJdO1xuICAgICAgICB0aGlzLmlzT3BlblR5cGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0YWJsZXMubG9jYSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJsb2NhXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRhYmxlcy5nbHlmKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdSZXF1aXJlZCBcImdseWZcIiB0YWJsZSBpcyBub3QgZm91bmQgLS0gdHJ5aW5nIHRvIHJlY292ZXIuJyk7XG4gICAgICAgICAgdGFibGVzLmdseWYgPSB7XG4gICAgICAgICAgICB0YWc6IFwiZ2x5ZlwiLFxuICAgICAgICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoMClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc09wZW5UeXBlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGFibGVzLm1heHApIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdSZXF1aXJlZCBcIm1heHBcIiB0YWJsZSBpcyBub3QgZm91bmQnKTtcbiAgICAgIH1cblxuICAgICAgZm9udC5wb3MgPSAoZm9udC5zdGFydCB8fCAwKSArIHRhYmxlcy5tYXhwLm9mZnNldDtcbiAgICAgIHZhciB2ZXJzaW9uID0gZm9udC5nZXRJbnQzMigpO1xuICAgICAgY29uc3QgbnVtR2x5cGhzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgIGxldCBudW1HbHlwaHNPdXQgPSBudW1HbHlwaHMgKyAxO1xuICAgICAgbGV0IGR1cEZpcnN0RW50cnkgPSB0cnVlO1xuXG4gICAgICBpZiAobnVtR2x5cGhzT3V0ID4gMHhmZmZmKSB7XG4gICAgICAgIGR1cEZpcnN0RW50cnkgPSBmYWxzZTtcbiAgICAgICAgbnVtR2x5cGhzT3V0ID0gbnVtR2x5cGhzO1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJOb3QgZW5vdWdoIHNwYWNlIGluIGdseWZzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC5cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBtYXhGdW5jdGlvbkRlZnMgPSAwO1xuICAgICAgdmFyIG1heFNpemVPZkluc3RydWN0aW9ucyA9IDA7XG5cbiAgICAgIGlmICh2ZXJzaW9uID49IDB4MDAwMTAwMDAgJiYgdGFibGVzLm1heHAubGVuZ3RoID49IDIyKSB7XG4gICAgICAgIGZvbnQucG9zICs9IDg7XG4gICAgICAgIHZhciBtYXhab25lcyA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgaWYgKG1heFpvbmVzID4gMikge1xuICAgICAgICAgIHRhYmxlcy5tYXhwLmRhdGFbMTRdID0gMDtcbiAgICAgICAgICB0YWJsZXMubWF4cC5kYXRhWzE1XSA9IDI7XG4gICAgICAgIH1cblxuICAgICAgICBmb250LnBvcyArPSA0O1xuICAgICAgICBtYXhGdW5jdGlvbkRlZnMgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICBmb250LnBvcyArPSA0O1xuICAgICAgICBtYXhTaXplT2ZJbnN0cnVjdGlvbnMgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgfVxuXG4gICAgICB0YWJsZXMubWF4cC5kYXRhWzRdID0gbnVtR2x5cGhzT3V0ID4+IDg7XG4gICAgICB0YWJsZXMubWF4cC5kYXRhWzVdID0gbnVtR2x5cGhzT3V0ICYgMjU1O1xuICAgICAgdmFyIGhpbnRzVmFsaWQgPSBzYW5pdGl6ZVRUUHJvZ3JhbXModGFibGVzLmZwZ20sIHRhYmxlcy5wcmVwLCB0YWJsZXNbXCJjdnQgXCJdLCBtYXhGdW5jdGlvbkRlZnMpO1xuXG4gICAgICBpZiAoIWhpbnRzVmFsaWQpIHtcbiAgICAgICAgZGVsZXRlIHRhYmxlcy5mcGdtO1xuICAgICAgICBkZWxldGUgdGFibGVzLnByZXA7XG4gICAgICAgIGRlbGV0ZSB0YWJsZXNbXCJjdnQgXCJdO1xuICAgICAgfVxuXG4gICAgICBzYW5pdGl6ZU1ldHJpY3MoZm9udCwgdGFibGVzLmhoZWEsIHRhYmxlcy5obXR4LCBudW1HbHlwaHNPdXQsIGR1cEZpcnN0RW50cnkpO1xuXG4gICAgICBpZiAoIXRhYmxlcy5oZWFkKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJoZWFkXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHNhbml0aXplSGVhZCh0YWJsZXMuaGVhZCwgbnVtR2x5cGhzLCBpc1RydWVUeXBlID8gdGFibGVzLmxvY2EubGVuZ3RoIDogMCk7XG4gICAgICB2YXIgbWlzc2luZ0dseXBocyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGlmIChpc1RydWVUeXBlKSB7XG4gICAgICAgIHZhciBpc0dseXBoTG9jYXRpb25zTG9uZyA9IGludDE2KHRhYmxlcy5oZWFkLmRhdGFbNTBdLCB0YWJsZXMuaGVhZC5kYXRhWzUxXSk7XG4gICAgICAgIHZhciBnbHlwaHNJbmZvID0gc2FuaXRpemVHbHlwaExvY2F0aW9ucyh0YWJsZXMubG9jYSwgdGFibGVzLmdseWYsIG51bUdseXBocywgaXNHbHlwaExvY2F0aW9uc0xvbmcsIGhpbnRzVmFsaWQsIGR1cEZpcnN0RW50cnksIG1heFNpemVPZkluc3RydWN0aW9ucyk7XG4gICAgICAgIG1pc3NpbmdHbHlwaHMgPSBnbHlwaHNJbmZvLm1pc3NpbmdHbHlwaHM7XG5cbiAgICAgICAgaWYgKHZlcnNpb24gPj0gMHgwMDAxMDAwMCAmJiB0YWJsZXMubWF4cC5sZW5ndGggPj0gMjIpIHtcbiAgICAgICAgICB0YWJsZXMubWF4cC5kYXRhWzI2XSA9IGdseXBoc0luZm8ubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID4+IDg7XG4gICAgICAgICAgdGFibGVzLm1heHAuZGF0YVsyN10gPSBnbHlwaHNJbmZvLm1heFNpemVPZkluc3RydWN0aW9ucyAmIDI1NTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRhYmxlcy5oaGVhKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJoaGVhXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YWJsZXMuaGhlYS5kYXRhWzEwXSA9PT0gMCAmJiB0YWJsZXMuaGhlYS5kYXRhWzExXSA9PT0gMCkge1xuICAgICAgICB0YWJsZXMuaGhlYS5kYXRhWzEwXSA9IDB4ZmY7XG4gICAgICAgIHRhYmxlcy5oaGVhLmRhdGFbMTFdID0gMHhmZjtcbiAgICAgIH1cblxuICAgICAgdmFyIG1ldHJpY3NPdmVycmlkZSA9IHtcbiAgICAgICAgdW5pdHNQZXJFbTogaW50MTYodGFibGVzLmhlYWQuZGF0YVsxOF0sIHRhYmxlcy5oZWFkLmRhdGFbMTldKSxcbiAgICAgICAgeU1heDogaW50MTYodGFibGVzLmhlYWQuZGF0YVs0Ml0sIHRhYmxlcy5oZWFkLmRhdGFbNDNdKSxcbiAgICAgICAgeU1pbjogc2lnbmVkSW50MTYodGFibGVzLmhlYWQuZGF0YVszOF0sIHRhYmxlcy5oZWFkLmRhdGFbMzldKSxcbiAgICAgICAgYXNjZW50OiBpbnQxNih0YWJsZXMuaGhlYS5kYXRhWzRdLCB0YWJsZXMuaGhlYS5kYXRhWzVdKSxcbiAgICAgICAgZGVzY2VudDogc2lnbmVkSW50MTYodGFibGVzLmhoZWEuZGF0YVs2XSwgdGFibGVzLmhoZWEuZGF0YVs3XSlcbiAgICAgIH07XG4gICAgICB0aGlzLmFzY2VudCA9IG1ldHJpY3NPdmVycmlkZS5hc2NlbnQgLyBtZXRyaWNzT3ZlcnJpZGUudW5pdHNQZXJFbTtcbiAgICAgIHRoaXMuZGVzY2VudCA9IG1ldHJpY3NPdmVycmlkZS5kZXNjZW50IC8gbWV0cmljc092ZXJyaWRlLnVuaXRzUGVyRW07XG5cbiAgICAgIGlmICh0YWJsZXMucG9zdCkge1xuICAgICAgICByZWFkUG9zdFNjcmlwdFRhYmxlKHRhYmxlcy5wb3N0LCBwcm9wZXJ0aWVzLCBudW1HbHlwaHMpO1xuICAgICAgfVxuXG4gICAgICB0YWJsZXMucG9zdCA9IHtcbiAgICAgICAgdGFnOiBcInBvc3RcIixcbiAgICAgICAgZGF0YTogY3JlYXRlUG9zdFRhYmxlKHByb3BlcnRpZXMpXG4gICAgICB9O1xuICAgICAgY29uc3QgY2hhckNvZGVUb0dseXBoSWQgPSBbXTtcblxuICAgICAgZnVuY3Rpb24gaGFzR2x5cGgoZ2x5cGhJZCkge1xuICAgICAgICByZXR1cm4gIW1pc3NpbmdHbHlwaHNbZ2x5cGhJZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICB2YXIgY2lkVG9HaWRNYXAgPSBwcm9wZXJ0aWVzLmNpZFRvR2lkTWFwIHx8IFtdO1xuICAgICAgICB2YXIgaXNDaWRUb0dpZE1hcEVtcHR5ID0gY2lkVG9HaWRNYXAubGVuZ3RoID09PSAwO1xuICAgICAgICBwcm9wZXJ0aWVzLmNNYXAuZm9yRWFjaChmdW5jdGlvbiAoY2hhckNvZGUsIGNpZCkge1xuICAgICAgICAgIGlmIChjaWQgPiAweGZmZmYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzVcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGdseXBoSWQgPSAtMTtcblxuICAgICAgICAgIGlmIChpc0NpZFRvR2lkTWFwRW1wdHkpIHtcbiAgICAgICAgICAgIGdseXBoSWQgPSBjaWQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaWRUb0dpZE1hcFtjaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGdseXBoSWQgPSBjaWRUb0dpZE1hcFtjaWRdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChnbHlwaElkID49IDAgJiYgZ2x5cGhJZCA8IG51bUdseXBocyAmJiBoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGNtYXBUYWJsZSA9IHJlYWRDbWFwVGFibGUodGFibGVzLmNtYXAsIGZvbnQsIHRoaXMuaXNTeW1ib2xpY0ZvbnQsIHByb3BlcnRpZXMuaGFzRW5jb2RpbmcpO1xuICAgICAgICB2YXIgY21hcFBsYXRmb3JtSWQgPSBjbWFwVGFibGUucGxhdGZvcm1JZDtcbiAgICAgICAgdmFyIGNtYXBFbmNvZGluZ0lkID0gY21hcFRhYmxlLmVuY29kaW5nSWQ7XG4gICAgICAgIHZhciBjbWFwTWFwcGluZ3MgPSBjbWFwVGFibGUubWFwcGluZ3M7XG4gICAgICAgIHZhciBjbWFwTWFwcGluZ3NMZW5ndGggPSBjbWFwTWFwcGluZ3MubGVuZ3RoO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc0VuY29kaW5nICYmIChjbWFwUGxhdGZvcm1JZCA9PT0gMyAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gMSB8fCBjbWFwUGxhdGZvcm1JZCA9PT0gMSAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gMCkgfHwgY21hcFBsYXRmb3JtSWQgPT09IC0xICYmIGNtYXBFbmNvZGluZ0lkID09PSAtMSAmJiAhISgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUpKSB7XG4gICAgICAgICAgdmFyIGJhc2VFbmNvZGluZyA9IFtdO1xuXG4gICAgICAgICAgaWYgKHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZSA9PT0gXCJNYWNSb21hbkVuY29kaW5nXCIgfHwgcHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lID09PSBcIldpbkFuc2lFbmNvZGluZ1wiKSB7XG4gICAgICAgICAgICBiYXNlRW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG5cbiAgICAgICAgICBmb3IgKGxldCBjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgMjU2OyBjaGFyQ29kZSsrKSB7XG4gICAgICAgICAgICB2YXIgZ2x5cGhOYW1lLCBzdGFuZGFyZEdseXBoTmFtZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGlmZmVyZW5jZXMgJiYgY2hhckNvZGUgaW4gdGhpcy5kaWZmZXJlbmNlcykge1xuICAgICAgICAgICAgICBnbHlwaE5hbWUgPSB0aGlzLmRpZmZlcmVuY2VzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhckNvZGUgaW4gYmFzZUVuY29kaW5nICYmIGJhc2VFbmNvZGluZ1tjaGFyQ29kZV0gIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgZ2x5cGhOYW1lID0gYmFzZUVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGdseXBoTmFtZSA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ2x5cGhOYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGFuZGFyZEdseXBoTmFtZSA9IHJlY292ZXJHbHlwaE5hbWUoZ2x5cGhOYW1lLCBnbHlwaHNVbmljb2RlTWFwKTtcbiAgICAgICAgICAgIHZhciB1bmljb2RlT3JDaGFyQ29kZTtcblxuICAgICAgICAgICAgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAzICYmIGNtYXBFbmNvZGluZ0lkID09PSAxKSB7XG4gICAgICAgICAgICAgIHVuaWNvZGVPckNoYXJDb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtzdGFuZGFyZEdseXBoTmFtZV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAxICYmIGNtYXBFbmNvZGluZ0lkID09PSAwKSB7XG4gICAgICAgICAgICAgIHVuaWNvZGVPckNoYXJDb2RlID0gX2VuY29kaW5ncy5NYWNSb21hbkVuY29kaW5nLmluZGV4T2Yoc3RhbmRhcmRHbHlwaE5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbWFwTWFwcGluZ3NMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBpZiAoY21hcE1hcHBpbmdzW2ldLmNoYXJDb2RlICE9PSB1bmljb2RlT3JDaGFyQ29kZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gY21hcE1hcHBpbmdzW2ldLmdseXBoSWQ7XG4gICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZm91bmQgJiYgcHJvcGVydGllcy5nbHlwaE5hbWVzKSB7XG4gICAgICAgICAgICAgIHZhciBnbHlwaElkID0gcHJvcGVydGllcy5nbHlwaE5hbWVzLmluZGV4T2YoZ2x5cGhOYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoZ2x5cGhJZCA9PT0gLTEgJiYgc3RhbmRhcmRHbHlwaE5hbWUgIT09IGdseXBoTmFtZSkge1xuICAgICAgICAgICAgICAgIGdseXBoSWQgPSBwcm9wZXJ0aWVzLmdseXBoTmFtZXMuaW5kZXhPZihzdGFuZGFyZEdseXBoTmFtZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZ2x5cGhJZCA+IDAgJiYgaGFzR2x5cGgoZ2x5cGhJZCkpIHtcbiAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAwICYmIGNtYXBFbmNvZGluZ0lkID09PSAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbWFwTWFwcGluZ3NMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY21hcE1hcHBpbmdzW2ldLmNoYXJDb2RlXSA9IGNtYXBNYXBwaW5nc1tpXS5nbHlwaElkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNtYXBNYXBwaW5nc0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgY2hhckNvZGUgPSBjbWFwTWFwcGluZ3NbaV0uY2hhckNvZGU7XG5cbiAgICAgICAgICAgIGlmIChjbWFwUGxhdGZvcm1JZCA9PT0gMyAmJiBjaGFyQ29kZSA+PSAweGYwMDAgJiYgY2hhckNvZGUgPD0gMHhmMGZmKSB7XG4gICAgICAgICAgICAgIGNoYXJDb2RlICY9IDB4ZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGNtYXBNYXBwaW5nc1tpXS5nbHlwaElkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhckNvZGVUb0dseXBoSWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNoYXJDb2RlVG9HbHlwaElkWzBdID0gMDtcbiAgICAgIH1cblxuICAgICAgbGV0IGdseXBoWmVyb0lkID0gbnVtR2x5cGhzT3V0IC0gMTtcblxuICAgICAgaWYgKCFkdXBGaXJzdEVudHJ5KSB7XG4gICAgICAgIGdseXBoWmVyb0lkID0gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld01hcHBpbmcgPSBhZGp1c3RNYXBwaW5nKGNoYXJDb2RlVG9HbHlwaElkLCBoYXNHbHlwaCwgZ2x5cGhaZXJvSWQpO1xuICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbmV3TWFwcGluZy50b0ZvbnRDaGFyO1xuICAgICAgdGFibGVzLmNtYXAgPSB7XG4gICAgICAgIHRhZzogXCJjbWFwXCIsXG4gICAgICAgIGRhdGE6IGNyZWF0ZUNtYXBUYWJsZShuZXdNYXBwaW5nLmNoYXJDb2RlVG9HbHlwaElkLCBudW1HbHlwaHNPdXQpXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXRhYmxlc1tcIk9TLzJcIl0gfHwgIXZhbGlkYXRlT1MyVGFibGUodGFibGVzW1wiT1MvMlwiXSwgZm9udCkpIHtcbiAgICAgICAgdGFibGVzW1wiT1MvMlwiXSA9IHtcbiAgICAgICAgICB0YWc6IFwiT1MvMlwiLFxuICAgICAgICAgIGRhdGE6IGNyZWF0ZU9TMlRhYmxlKHByb3BlcnRpZXMsIG5ld01hcHBpbmcuY2hhckNvZGVUb0dseXBoSWQsIG1ldHJpY3NPdmVycmlkZSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1RydWVUeXBlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2ZmRmlsZSA9IG5ldyBfc3RyZWFtLlN0cmVhbSh0YWJsZXNbXCJDRkYgXCJdLmRhdGEpO1xuICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGUGFyc2VyKGNmZkZpbGUsIHByb3BlcnRpZXMsIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7XG4gICAgICAgICAgY2ZmID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgICAgICAgY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtcbiAgICAgICAgICB2YXIgY29tcGlsZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGQ29tcGlsZXIoY2ZmKTtcbiAgICAgICAgICB0YWJsZXNbXCJDRkYgXCJdLmRhdGEgPSBjb21waWxlci5jb21waWxlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJGYWlsZWQgdG8gY29tcGlsZSBmb250IFwiICsgcHJvcGVydGllcy5sb2FkZWROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRhYmxlcy5uYW1lKSB7XG4gICAgICAgIHRhYmxlcy5uYW1lID0ge1xuICAgICAgICAgIHRhZzogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YTogY3JlYXRlTmFtZVRhYmxlKHRoaXMubmFtZSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuYW1lUHJvdG90eXBlID0gcmVhZE5hbWVUYWJsZSh0YWJsZXMubmFtZSk7XG4gICAgICAgIHRhYmxlcy5uYW1lLmRhdGEgPSBjcmVhdGVOYW1lVGFibGUobmFtZSwgbmFtZVByb3RvdHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWlsZGVyID0gbmV3IE9wZW5UeXBlRmlsZUJ1aWxkZXIoaGVhZGVyLnZlcnNpb24pO1xuXG4gICAgICBmb3IgKHZhciB0YWJsZVRhZyBpbiB0YWJsZXMpIHtcbiAgICAgICAgYnVpbGRlci5hZGRUYWJsZSh0YWJsZVRhZywgdGFibGVzW3RhYmxlVGFnXS5kYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1aWxkZXIudG9BcnJheSgpO1xuICAgIH0sXG4gICAgY29udmVydDogZnVuY3Rpb24gRm9udF9jb252ZXJ0KGZvbnROYW1lLCBmb250LCBwcm9wZXJ0aWVzKSB7XG4gICAgICBwcm9wZXJ0aWVzLmZpeGVkUGl0Y2ggPSBmYWxzZTtcblxuICAgICAgaWYgKHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nKSB7XG4gICAgICAgIGFkanVzdFRvVW5pY29kZShwcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBnbHlwaFplcm9JZCA9IDE7XG5cbiAgICAgIGlmIChmb250IGluc3RhbmNlb2YgQ0ZGRm9udCkge1xuICAgICAgICBnbHlwaFplcm9JZCA9IGZvbnQubnVtR2x5cGhzIC0gMTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1hcHBpbmcgPSBmb250LmdldEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzKTtcbiAgICAgIHZhciBuZXdNYXBwaW5nID0gYWRqdXN0TWFwcGluZyhtYXBwaW5nLCBmb250Lmhhc0dseXBoSWQuYmluZChmb250KSwgZ2x5cGhaZXJvSWQpO1xuICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbmV3TWFwcGluZy50b0ZvbnRDaGFyO1xuICAgICAgdmFyIG51bUdseXBocyA9IGZvbnQubnVtR2x5cGhzO1xuXG4gICAgICBmdW5jdGlvbiBnZXRDaGFyQ29kZXMoY2hhckNvZGVUb0dseXBoSWQsIGdseXBoSWQpIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlcyA9IG51bGw7XG5cbiAgICAgICAgZm9yICh2YXIgY2hhckNvZGUgaW4gY2hhckNvZGVUb0dseXBoSWQpIHtcbiAgICAgICAgICBpZiAoZ2x5cGhJZCA9PT0gY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdKSB7XG4gICAgICAgICAgICBpZiAoIWNoYXJDb2Rlcykge1xuICAgICAgICAgICAgICBjaGFyQ29kZXMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hhckNvZGVzLnB1c2goY2hhckNvZGUgfCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhckNvZGVzO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjcmVhdGVDaGFyQ29kZShjaGFyQ29kZVRvR2x5cGhJZCwgZ2x5cGhJZCkge1xuICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkge1xuICAgICAgICAgIGlmIChnbHlwaElkID09PSBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZFtuZXdNYXBwaW5nLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgcmV0dXJuIG5ld01hcHBpbmcubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSsrO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VhY3MgPSBmb250LnNlYWNzO1xuXG4gICAgICBpZiAoU0VBQ19BTkFMWVNJU19FTkFCTEVEICYmIHNlYWNzICYmIHNlYWNzLmxlbmd0aCkge1xuICAgICAgICB2YXIgbWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgICB2YXIgY2hhcnNldCA9IGZvbnQuZ2V0Q2hhcnNldCgpO1xuICAgICAgICB2YXIgc2VhY01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgZm9yICh2YXIgZ2x5cGhJZCBpbiBzZWFjcykge1xuICAgICAgICAgIGdseXBoSWQgfD0gMDtcbiAgICAgICAgICB2YXIgc2VhYyA9IHNlYWNzW2dseXBoSWRdO1xuICAgICAgICAgIHZhciBiYXNlR2x5cGhOYW1lID0gX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nW3NlYWNbMl1dO1xuICAgICAgICAgIHZhciBhY2NlbnRHbHlwaE5hbWUgPSBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2Rpbmdbc2VhY1szXV07XG4gICAgICAgICAgdmFyIGJhc2VHbHlwaElkID0gY2hhcnNldC5pbmRleE9mKGJhc2VHbHlwaE5hbWUpO1xuICAgICAgICAgIHZhciBhY2NlbnRHbHlwaElkID0gY2hhcnNldC5pbmRleE9mKGFjY2VudEdseXBoTmFtZSk7XG5cbiAgICAgICAgICBpZiAoYmFzZUdseXBoSWQgPCAwIHx8IGFjY2VudEdseXBoSWQgPCAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgYWNjZW50T2Zmc2V0ID0ge1xuICAgICAgICAgICAgeDogc2VhY1swXSAqIG1hdHJpeFswXSArIHNlYWNbMV0gKiBtYXRyaXhbMl0gKyBtYXRyaXhbNF0sXG4gICAgICAgICAgICB5OiBzZWFjWzBdICogbWF0cml4WzFdICsgc2VhY1sxXSAqIG1hdHJpeFszXSArIG1hdHJpeFs1XVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIGNoYXJDb2RlcyA9IGdldENoYXJDb2RlcyhtYXBwaW5nLCBnbHlwaElkKTtcblxuICAgICAgICAgIGlmICghY2hhckNvZGVzKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjaGFyQ29kZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoYXJDb2RlID0gY2hhckNvZGVzW2ldO1xuICAgICAgICAgICAgdmFyIGNoYXJDb2RlVG9HbHlwaElkID0gbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICAgIHZhciBiYXNlRm9udENoYXJDb2RlID0gY3JlYXRlQ2hhckNvZGUoY2hhckNvZGVUb0dseXBoSWQsIGJhc2VHbHlwaElkKTtcbiAgICAgICAgICAgIHZhciBhY2NlbnRGb250Q2hhckNvZGUgPSBjcmVhdGVDaGFyQ29kZShjaGFyQ29kZVRvR2x5cGhJZCwgYWNjZW50R2x5cGhJZCk7XG4gICAgICAgICAgICBzZWFjTWFwW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgICAgYmFzZUZvbnRDaGFyQ29kZSxcbiAgICAgICAgICAgICAgYWNjZW50Rm9udENoYXJDb2RlLFxuICAgICAgICAgICAgICBhY2NlbnRPZmZzZXRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5zZWFjTWFwID0gc2VhY01hcDtcbiAgICAgIH1cblxuICAgICAgdmFyIHVuaXRzUGVyRW0gPSAxIC8gKHByb3BlcnRpZXMuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWClbMF07XG4gICAgICB2YXIgYnVpbGRlciA9IG5ldyBPcGVuVHlwZUZpbGVCdWlsZGVyKFwiXFx4NEZcXHg1NFxceDU0XFx4NEZcIik7XG4gICAgICBidWlsZGVyLmFkZFRhYmxlKFwiQ0ZGIFwiLCBmb250LmRhdGEpO1xuICAgICAgYnVpbGRlci5hZGRUYWJsZShcIk9TLzJcIiwgY3JlYXRlT1MyVGFibGUocHJvcGVydGllcywgbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZCkpO1xuICAgICAgYnVpbGRlci5hZGRUYWJsZShcImNtYXBcIiwgY3JlYXRlQ21hcFRhYmxlKG5ld01hcHBpbmcuY2hhckNvZGVUb0dseXBoSWQsIG51bUdseXBocykpO1xuICAgICAgYnVpbGRlci5hZGRUYWJsZShcImhlYWRcIiwgXCJcXHgwMFxceDAxXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXFx4MTBcXHgwMFwiICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgXCJcXHg1RlxceDBGXFx4M0NcXHhGNVwiICsgXCJcXHgwMFxceDAwXCIgKyBzYWZlU3RyaW5nMTYodW5pdHNQZXJFbSkgKyBcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4OWVcXHgwYlxceDdlXFx4MjdcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcXHg5ZVxceDBiXFx4N2VcXHgyN1wiICsgXCJcXHgwMFxceDAwXCIgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5kZXNjZW50KSArIFwiXFx4MEZcXHhGRlwiICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuYXNjZW50KSArIHN0cmluZzE2KHByb3BlcnRpZXMuaXRhbGljQW5nbGUgPyAyIDogMCkgKyBcIlxceDAwXFx4MTFcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIik7XG4gICAgICBidWlsZGVyLmFkZFRhYmxlKFwiaGhlYVwiLCBcIlxceDAwXFx4MDFcXHgwMFxceDAwXCIgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5hc2NlbnQpICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuZGVzY2VudCkgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4RkZcXHhGRlwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuY2FwSGVpZ2h0KSArIHNhZmVTdHJpbmcxNihNYXRoLnRhbihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlKSAqIHByb3BlcnRpZXMueEhlaWdodCkgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyBzdHJpbmcxNihudW1HbHlwaHMpKTtcbiAgICAgIGJ1aWxkZXIuYWRkVGFibGUoXCJobXR4XCIsIGZ1bmN0aW9uIGZvbnRGaWVsZHNIbXR4KCkge1xuICAgICAgICB2YXIgY2hhcnN0cmluZ3MgPSBmb250LmNoYXJzdHJpbmdzO1xuICAgICAgICB2YXIgY2ZmV2lkdGhzID0gZm9udC5jZmYgPyBmb250LmNmZi53aWR0aHMgOiBudWxsO1xuICAgICAgICB2YXIgaG10eCA9IFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMSwgaWkgPSBudW1HbHlwaHM7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgdmFyIHdpZHRoID0gMDtcblxuICAgICAgICAgIGlmIChjaGFyc3RyaW5ncykge1xuICAgICAgICAgICAgdmFyIGNoYXJzdHJpbmcgPSBjaGFyc3RyaW5nc1tpIC0gMV07XG4gICAgICAgICAgICB3aWR0aCA9IFwid2lkdGhcIiBpbiBjaGFyc3RyaW5nID8gY2hhcnN0cmluZy53aWR0aCA6IDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChjZmZXaWR0aHMpIHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5jZWlsKGNmZldpZHRoc1tpXSB8fCAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBobXR4ICs9IHN0cmluZzE2KHdpZHRoKSArIHN0cmluZzE2KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhtdHg7XG4gICAgICB9KCkpO1xuICAgICAgYnVpbGRlci5hZGRUYWJsZShcIm1heHBcIiwgXCJcXHgwMFxceDAwXFx4NTBcXHgwMFwiICsgc3RyaW5nMTYobnVtR2x5cGhzKSk7XG4gICAgICBidWlsZGVyLmFkZFRhYmxlKFwibmFtZVwiLCBjcmVhdGVOYW1lVGFibGUoZm9udE5hbWUpKTtcbiAgICAgIGJ1aWxkZXIuYWRkVGFibGUoXCJwb3N0XCIsIGNyZWF0ZVBvc3RUYWJsZShwcm9wZXJ0aWVzKSk7XG4gICAgICByZXR1cm4gYnVpbGRlci50b0FycmF5KCk7XG4gICAgfSxcblxuICAgIGdldCBzcGFjZVdpZHRoKCkge1xuICAgICAgdmFyIHBvc3NpYmxlU3BhY2VSZXBsYWNlbWVudHMgPSBbXCJzcGFjZVwiLCBcIm1pbnVzXCIsIFwib25lXCIsIFwiaVwiLCBcIklcIl07XG4gICAgICB2YXIgd2lkdGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBvc3NpYmxlU3BhY2VSZXBsYWNlbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICB2YXIgZ2x5cGhOYW1lID0gcG9zc2libGVTcGFjZVJlcGxhY2VtZW50c1tpXTtcblxuICAgICAgICBpZiAoZ2x5cGhOYW1lIGluIHRoaXMud2lkdGhzKSB7XG4gICAgICAgICAgd2lkdGggPSB0aGlzLndpZHRoc1tnbHlwaE5hbWVdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuICAgICAgICB2YXIgZ2x5cGhVbmljb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdO1xuICAgICAgICB2YXIgY2hhcmNvZGUgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbXBvc2l0ZSAmJiB0aGlzLmNNYXAuY29udGFpbnMoZ2x5cGhVbmljb2RlKSkge1xuICAgICAgICAgIGNoYXJjb2RlID0gdGhpcy5jTWFwLmxvb2t1cChnbHlwaFVuaWNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjaGFyY29kZSAmJiB0aGlzLnRvVW5pY29kZSkge1xuICAgICAgICAgIGNoYXJjb2RlID0gdGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihnbHlwaFVuaWNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYXJjb2RlIDw9IDApIHtcbiAgICAgICAgICBjaGFyY29kZSA9IGdseXBoVW5pY29kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpZHRoID0gdGhpcy53aWR0aHNbY2hhcmNvZGVdO1xuXG4gICAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdpZHRoID0gd2lkdGggfHwgdGhpcy5kZWZhdWx0V2lkdGg7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJzcGFjZVdpZHRoXCIsIHdpZHRoKTtcbiAgICB9LFxuXG4gICAgY2hhclRvR2x5cGg6IGZ1bmN0aW9uIEZvbnRfY2hhclRvR2x5cGgoY2hhcmNvZGUsIGlzU3BhY2UpIHtcbiAgICAgIHZhciBmb250Q2hhckNvZGUsIHdpZHRoLCBvcGVyYXRvckxpc3RJZDtcbiAgICAgIHZhciB3aWR0aENvZGUgPSBjaGFyY29kZTtcblxuICAgICAgaWYgKHRoaXMuY01hcCAmJiB0aGlzLmNNYXAuY29udGFpbnMoY2hhcmNvZGUpKSB7XG4gICAgICAgIHdpZHRoQ29kZSA9IHRoaXMuY01hcC5sb29rdXAoY2hhcmNvZGUpO1xuICAgICAgfVxuXG4gICAgICB3aWR0aCA9IHRoaXMud2lkdGhzW3dpZHRoQ29kZV07XG4gICAgICB3aWR0aCA9ICgwLCBfdXRpbC5pc051bSkod2lkdGgpID8gd2lkdGggOiB0aGlzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciB2bWV0cmljID0gdGhpcy52bWV0cmljcyAmJiB0aGlzLnZtZXRyaWNzW3dpZHRoQ29kZV07XG4gICAgICBsZXQgdW5pY29kZSA9IHRoaXMudG9Vbmljb2RlLmdldChjaGFyY29kZSkgfHwgdGhpcy5mYWxsYmFja1RvVW5pY29kZS5nZXQoY2hhcmNvZGUpIHx8IGNoYXJjb2RlO1xuXG4gICAgICBpZiAodHlwZW9mIHVuaWNvZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdW5pY29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0luRm9udCA9IChjaGFyY29kZSBpbiB0aGlzLnRvRm9udENoYXIpO1xuICAgICAgZm9udENoYXJDb2RlID0gdGhpcy50b0ZvbnRDaGFyW2NoYXJjb2RlXSB8fCBjaGFyY29kZTtcblxuICAgICAgaWYgKHRoaXMubWlzc2luZ0ZpbGUpIHtcbiAgICAgICAgY29uc3QgZ2x5cGhOYW1lID0gdGhpcy5kaWZmZXJlbmNlc1tjaGFyY29kZV0gfHwgdGhpcy5kZWZhdWx0RW5jb2RpbmdbY2hhcmNvZGVdO1xuXG4gICAgICAgIGlmICgoZ2x5cGhOYW1lID09PSBcIi5ub3RkZWZcIiB8fCBnbHlwaE5hbWUgPT09IFwiXCIpICYmIHRoaXMudHlwZSA9PT0gXCJUeXBlMVwiKSB7XG4gICAgICAgICAgZm9udENoYXJDb2RlID0gMHgyMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbnRDaGFyQ29kZSA9ICgwLCBfdW5pY29kZS5tYXBTcGVjaWFsVW5pY29kZVZhbHVlcykoZm9udENoYXJDb2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgb3BlcmF0b3JMaXN0SWQgPSBmb250Q2hhckNvZGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2NlbnQgPSBudWxsO1xuXG4gICAgICBpZiAodGhpcy5zZWFjTWFwICYmIHRoaXMuc2VhY01hcFtjaGFyY29kZV0pIHtcbiAgICAgICAgaXNJbkZvbnQgPSB0cnVlO1xuICAgICAgICB2YXIgc2VhYyA9IHRoaXMuc2VhY01hcFtjaGFyY29kZV07XG4gICAgICAgIGZvbnRDaGFyQ29kZSA9IHNlYWMuYmFzZUZvbnRDaGFyQ29kZTtcbiAgICAgICAgYWNjZW50ID0ge1xuICAgICAgICAgIGZvbnRDaGFyOiBTdHJpbmcuZnJvbUNvZGVQb2ludChzZWFjLmFjY2VudEZvbnRDaGFyQ29kZSksXG4gICAgICAgICAgb2Zmc2V0OiBzZWFjLmFjY2VudE9mZnNldFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBsZXQgZm9udENoYXIgPSBcIlwiO1xuXG4gICAgICBpZiAodHlwZW9mIGZvbnRDaGFyQ29kZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoZm9udENoYXJDb2RlIDw9IDB4MTBmZmZmKSB7XG4gICAgICAgICAgZm9udENoYXIgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChmb250Q2hhckNvZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgY2hhclRvR2x5cGggLSBpbnZhbGlkIGZvbnRDaGFyQ29kZTogJHtmb250Q2hhckNvZGV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGdseXBoID0gdGhpcy5nbHlwaENhY2hlW2NoYXJjb2RlXTtcblxuICAgICAgaWYgKCFnbHlwaCB8fCAhZ2x5cGgubWF0Y2hlc0ZvckNhY2hlKGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpKSB7XG4gICAgICAgIGdseXBoID0gbmV3IEdseXBoKGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpO1xuICAgICAgICB0aGlzLmdseXBoQ2FjaGVbY2hhcmNvZGVdID0gZ2x5cGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnbHlwaDtcbiAgICB9LFxuICAgIGNoYXJzVG9HbHlwaHM6IGZ1bmN0aW9uIEZvbnRfY2hhcnNUb0dseXBocyhjaGFycykge1xuICAgICAgdmFyIGNoYXJzQ2FjaGUgPSB0aGlzLmNoYXJzQ2FjaGU7XG4gICAgICB2YXIgZ2x5cGhzLCBnbHlwaCwgY2hhcmNvZGU7XG5cbiAgICAgIGlmIChjaGFyc0NhY2hlKSB7XG4gICAgICAgIGdseXBocyA9IGNoYXJzQ2FjaGVbY2hhcnNdO1xuXG4gICAgICAgIGlmIChnbHlwaHMpIHtcbiAgICAgICAgICByZXR1cm4gZ2x5cGhzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghY2hhcnNDYWNoZSkge1xuICAgICAgICBjaGFyc0NhY2hlID0gdGhpcy5jaGFyc0NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgZ2x5cGhzID0gW107XG4gICAgICB2YXIgY2hhcnNDYWNoZUtleSA9IGNoYXJzO1xuICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgIGlpO1xuXG4gICAgICBpZiAodGhpcy5jTWFwKSB7XG4gICAgICAgIHZhciBjID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICB3aGlsZSAoaSA8IGNoYXJzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY01hcC5yZWFkQ2hhckNvZGUoY2hhcnMsIGksIGMpO1xuICAgICAgICAgIGNoYXJjb2RlID0gYy5jaGFyY29kZTtcbiAgICAgICAgICB2YXIgbGVuZ3RoID0gYy5sZW5ndGg7XG4gICAgICAgICAgaSArPSBsZW5ndGg7XG4gICAgICAgICAgdmFyIGlzU3BhY2UgPSBsZW5ndGggPT09IDEgJiYgY2hhcnMuY2hhckNvZGVBdChpIC0gMSkgPT09IDB4MjA7XG4gICAgICAgICAgZ2x5cGggPSB0aGlzLmNoYXJUb0dseXBoKGNoYXJjb2RlLCBpc1NwYWNlKTtcbiAgICAgICAgICBnbHlwaHMucHVzaChnbHlwaCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gY2hhcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIGNoYXJjb2RlID0gY2hhcnMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICBnbHlwaCA9IHRoaXMuY2hhclRvR2x5cGgoY2hhcmNvZGUsIGNoYXJjb2RlID09PSAweDIwKTtcbiAgICAgICAgICBnbHlwaHMucHVzaChnbHlwaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzQ2FjaGVbY2hhcnNDYWNoZUtleV0gPSBnbHlwaHM7XG4gICAgfSxcblxuICAgIGdldCBnbHlwaENhY2hlVmFsdWVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5nbHlwaENhY2hlKTtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIEZvbnQ7XG59KCk7XG5cbmV4cG9ydHMuRm9udCA9IEZvbnQ7XG5cbnZhciBFcnJvckZvbnQgPSBmdW5jdGlvbiBFcnJvckZvbnRDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBFcnJvckZvbnQoZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgdGhpcy5sb2FkZWROYW1lID0gXCJnX2ZvbnRfZXJyb3JcIjtcbiAgICB0aGlzLm1pc3NpbmdGaWxlID0gdHJ1ZTtcbiAgfVxuXG4gIEVycm9yRm9udC5wcm90b3R5cGUgPSB7XG4gICAgY2hhcnNUb0dseXBoczogZnVuY3Rpb24gRXJyb3JGb250X2NoYXJzVG9HbHlwaHMoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIGV4cG9ydERhdGEoZXh0cmFQcm9wZXJ0aWVzID0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiB0aGlzLmVycm9yXG4gICAgICB9O1xuICAgIH1cblxuICB9O1xuICByZXR1cm4gRXJyb3JGb250O1xufSgpO1xuXG5leHBvcnRzLkVycm9yRm9udCA9IEVycm9yRm9udDtcblxuZnVuY3Rpb24gdHlwZTFGb250R2x5cGhNYXBwaW5nKHByb3BlcnRpZXMsIGJ1aWx0SW5FbmNvZGluZywgZ2x5cGhOYW1lcykge1xuICB2YXIgY2hhckNvZGVUb0dseXBoSWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgZ2x5cGhJZCwgY2hhckNvZGUsIGJhc2VFbmNvZGluZztcbiAgdmFyIGlzU3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5TeW1ib2xpYyk7XG5cbiAgaWYgKHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZSkge1xuICAgIGJhc2VFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUpO1xuXG4gICAgZm9yIChjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgYmFzZUVuY29kaW5nLmxlbmd0aDsgY2hhckNvZGUrKykge1xuICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihiYXNlRW5jb2RpbmdbY2hhckNvZGVdKTtcblxuICAgICAgaWYgKGdseXBoSWQgPj0gMCkge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTeW1ib2xpY0ZvbnQpIHtcbiAgICBmb3IgKGNoYXJDb2RlIGluIGJ1aWx0SW5FbmNvZGluZykge1xuICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmFzZUVuY29kaW5nID0gX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nO1xuXG4gICAgZm9yIChjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgYmFzZUVuY29kaW5nLmxlbmd0aDsgY2hhckNvZGUrKykge1xuICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihiYXNlRW5jb2RpbmdbY2hhckNvZGVdKTtcblxuICAgICAgaWYgKGdseXBoSWQgPj0gMCkge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzLFxuICAgICAgZ2x5cGhzVW5pY29kZU1hcDtcblxuICBpZiAoZGlmZmVyZW5jZXMpIHtcbiAgICBmb3IgKGNoYXJDb2RlIGluIGRpZmZlcmVuY2VzKSB7XG4gICAgICB2YXIgZ2x5cGhOYW1lID0gZGlmZmVyZW5jZXNbY2hhckNvZGVdO1xuICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihnbHlwaE5hbWUpO1xuXG4gICAgICBpZiAoZ2x5cGhJZCA9PT0gLTEpIHtcbiAgICAgICAgaWYgKCFnbHlwaHNVbmljb2RlTWFwKSB7XG4gICAgICAgICAgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhbmRhcmRHbHlwaE5hbWUgPSByZWNvdmVyR2x5cGhOYW1lKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgaWYgKHN0YW5kYXJkR2x5cGhOYW1lICE9PSBnbHlwaE5hbWUpIHtcbiAgICAgICAgICBnbHlwaElkID0gZ2x5cGhOYW1lcy5pbmRleE9mKHN0YW5kYXJkR2x5cGhOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDtcbn1cblxudmFyIFR5cGUxRm9udCA9IGZ1bmN0aW9uIFR5cGUxRm9udENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGZpbmRCbG9jayhzdHJlYW1CeXRlcywgc2lnbmF0dXJlLCBzdGFydEluZGV4KSB7XG4gICAgdmFyIHN0cmVhbUJ5dGVzTGVuZ3RoID0gc3RyZWFtQnl0ZXMubGVuZ3RoO1xuICAgIHZhciBzaWduYXR1cmVMZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoO1xuICAgIHZhciBzY2FuTGVuZ3RoID0gc3RyZWFtQnl0ZXNMZW5ndGggLSBzaWduYXR1cmVMZW5ndGg7XG4gICAgdmFyIGkgPSBzdGFydEluZGV4LFxuICAgICAgICBqLFxuICAgICAgICBmb3VuZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGkgPCBzY2FuTGVuZ3RoKSB7XG4gICAgICBqID0gMDtcblxuICAgICAgd2hpbGUgKGogPCBzaWduYXR1cmVMZW5ndGggJiYgc3RyZWFtQnl0ZXNbaSArIGpdID09PSBzaWduYXR1cmVbal0pIHtcbiAgICAgICAgaisrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaiA+PSBzaWduYXR1cmVMZW5ndGgpIHtcbiAgICAgICAgaSArPSBqO1xuXG4gICAgICAgIHdoaWxlIChpIDwgc3RyZWFtQnl0ZXNMZW5ndGggJiYgKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoc3RyZWFtQnl0ZXNbaV0pKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmb3VuZCxcbiAgICAgIGxlbmd0aDogaVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRIZWFkZXJCbG9jayhzdHJlYW0sIHN1Z2dlc3RlZExlbmd0aCkge1xuICAgIHZhciBFRVhFQ19TSUdOQVRVUkUgPSBbMHg2NSwgMHg2NSwgMHg3OCwgMHg2NSwgMHg2M107XG4gICAgdmFyIHN0cmVhbVN0YXJ0UG9zID0gc3RyZWFtLnBvcztcbiAgICB2YXIgaGVhZGVyQnl0ZXMsIGhlYWRlckJ5dGVzTGVuZ3RoLCBibG9jaztcblxuICAgIHRyeSB7XG4gICAgICBoZWFkZXJCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcyhzdWdnZXN0ZWRMZW5ndGgpO1xuICAgICAgaGVhZGVyQnl0ZXNMZW5ndGggPSBoZWFkZXJCeXRlcy5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJCeXRlc0xlbmd0aCA9PT0gc3VnZ2VzdGVkTGVuZ3RoKSB7XG4gICAgICBibG9jayA9IGZpbmRCbG9jayhoZWFkZXJCeXRlcywgRUVYRUNfU0lHTkFUVVJFLCBzdWdnZXN0ZWRMZW5ndGggLSAyICogRUVYRUNfU0lHTkFUVVJFLmxlbmd0aCk7XG5cbiAgICAgIGlmIChibG9jay5mb3VuZCAmJiBibG9jay5sZW5ndGggPT09IHN1Z2dlc3RlZExlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKGhlYWRlckJ5dGVzKSxcbiAgICAgICAgICBsZW5ndGg6IHN1Z2dlc3RlZExlbmd0aFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBcIkxlbmd0aDFcIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICAgIHN0cmVhbS5wb3MgPSBzdHJlYW1TdGFydFBvcztcbiAgICB2YXIgU0NBTl9CTE9DS19MRU5HVEggPSAyMDQ4O1xuICAgIHZhciBhY3R1YWxMZW5ndGg7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMoU0NBTl9CTE9DS19MRU5HVEgpO1xuICAgICAgYmxvY2sgPSBmaW5kQmxvY2soc2NhbkJ5dGVzLCBFRVhFQ19TSUdOQVRVUkUsIDApO1xuXG4gICAgICBpZiAoYmxvY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzdHJlYW0ucG9zICs9IGJsb2NrLmxlbmd0aDtcblxuICAgICAgaWYgKGJsb2NrLmZvdW5kKSB7XG4gICAgICAgIGFjdHVhbExlbmd0aCA9IHN0cmVhbS5wb3MgLSBzdHJlYW1TdGFydFBvcztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RyZWFtLnBvcyA9IHN0cmVhbVN0YXJ0UG9zO1xuXG4gICAgaWYgKGFjdHVhbExlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RyZWFtOiBuZXcgX3N0cmVhbS5TdHJlYW0oc3RyZWFtLmdldEJ5dGVzKGFjdHVhbExlbmd0aCkpLFxuICAgICAgICBsZW5ndGg6IGFjdHVhbExlbmd0aFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAoMCwgX3V0aWwud2FybikoJ1VuYWJsZSB0byByZWNvdmVyIFwiTGVuZ3RoMVwiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKHN0cmVhbS5nZXRCeXRlcyhzdWdnZXN0ZWRMZW5ndGgpKSxcbiAgICAgIGxlbmd0aDogc3VnZ2VzdGVkTGVuZ3RoXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVleGVjQmxvY2soc3RyZWFtLCBzdWdnZXN0ZWRMZW5ndGgpIHtcbiAgICB2YXIgZWV4ZWNCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcygpO1xuICAgIHJldHVybiB7XG4gICAgICBzdHJlYW06IG5ldyBfc3RyZWFtLlN0cmVhbShlZXhlY0J5dGVzKSxcbiAgICAgIGxlbmd0aDogZWV4ZWNCeXRlcy5sZW5ndGhcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gVHlwZTFGb250KG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpIHtcbiAgICB2YXIgUEZCX0hFQURFUl9TSVpFID0gNjtcbiAgICB2YXIgaGVhZGVyQmxvY2tMZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDE7XG4gICAgdmFyIGVleGVjQmxvY2tMZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDI7XG4gICAgdmFyIHBmYkhlYWRlciA9IGZpbGUucGVla0J5dGVzKFBGQl9IRUFERVJfU0laRSk7XG4gICAgdmFyIHBmYkhlYWRlclByZXNlbnQgPSBwZmJIZWFkZXJbMF0gPT09IDB4ODAgJiYgcGZiSGVhZGVyWzFdID09PSAweDAxO1xuXG4gICAgaWYgKHBmYkhlYWRlclByZXNlbnQpIHtcbiAgICAgIGZpbGUuc2tpcChQRkJfSEVBREVSX1NJWkUpO1xuICAgICAgaGVhZGVyQmxvY2tMZW5ndGggPSBwZmJIZWFkZXJbNV0gPDwgMjQgfCBwZmJIZWFkZXJbNF0gPDwgMTYgfCBwZmJIZWFkZXJbM10gPDwgOCB8IHBmYkhlYWRlclsyXTtcbiAgICB9XG5cbiAgICB2YXIgaGVhZGVyQmxvY2sgPSBnZXRIZWFkZXJCbG9jayhmaWxlLCBoZWFkZXJCbG9ja0xlbmd0aCk7XG4gICAgdmFyIGhlYWRlckJsb2NrUGFyc2VyID0gbmV3IF90eXBlMV9wYXJzZXIuVHlwZTFQYXJzZXIoaGVhZGVyQmxvY2suc3RyZWFtLCBmYWxzZSwgU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtcbiAgICBoZWFkZXJCbG9ja1BhcnNlci5leHRyYWN0Rm9udEhlYWRlcihwcm9wZXJ0aWVzKTtcblxuICAgIGlmIChwZmJIZWFkZXJQcmVzZW50KSB7XG4gICAgICBwZmJIZWFkZXIgPSBmaWxlLmdldEJ5dGVzKFBGQl9IRUFERVJfU0laRSk7XG4gICAgICBlZXhlY0Jsb2NrTGVuZ3RoID0gcGZiSGVhZGVyWzVdIDw8IDI0IHwgcGZiSGVhZGVyWzRdIDw8IDE2IHwgcGZiSGVhZGVyWzNdIDw8IDggfCBwZmJIZWFkZXJbMl07XG4gICAgfVxuXG4gICAgdmFyIGVleGVjQmxvY2sgPSBnZXRFZXhlY0Jsb2NrKGZpbGUsIGVleGVjQmxvY2tMZW5ndGgpO1xuICAgIHZhciBlZXhlY0Jsb2NrUGFyc2VyID0gbmV3IF90eXBlMV9wYXJzZXIuVHlwZTFQYXJzZXIoZWV4ZWNCbG9jay5zdHJlYW0sIHRydWUsIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7XG4gICAgdmFyIGRhdGEgPSBlZXhlY0Jsb2NrUGFyc2VyLmV4dHJhY3RGb250UHJvZ3JhbShwcm9wZXJ0aWVzKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEucHJvcGVydGllcykge1xuICAgICAgcHJvcGVydGllc1trZXldID0gZGF0YS5wcm9wZXJ0aWVzW2tleV07XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzdHJpbmdzID0gZGF0YS5jaGFyc3RyaW5ncztcbiAgICB2YXIgdHlwZTJDaGFyc3RyaW5ncyA9IHRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhjaGFyc3RyaW5ncyk7XG4gICAgdmFyIHN1YnJzID0gdGhpcy5nZXRUeXBlMlN1YnJzKGRhdGEuc3VicnMpO1xuICAgIHRoaXMuY2hhcnN0cmluZ3MgPSBjaGFyc3RyaW5ncztcbiAgICB0aGlzLmRhdGEgPSB0aGlzLndyYXAobmFtZSwgdHlwZTJDaGFyc3RyaW5ncywgdGhpcy5jaGFyc3RyaW5ncywgc3VicnMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMuc2VhY3MgPSB0aGlzLmdldFNlYWNzKGRhdGEuY2hhcnN0cmluZ3MpO1xuICB9XG5cbiAgVHlwZTFGb250LnByb3RvdHlwZSA9IHtcbiAgICBnZXQgbnVtR2x5cGhzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoICsgMTtcbiAgICB9LFxuXG4gICAgZ2V0Q2hhcnNldDogZnVuY3Rpb24gVHlwZTFGb250X2dldENoYXJzZXQoKSB7XG4gICAgICB2YXIgY2hhcnNldCA9IFtcIi5ub3RkZWZcIl07XG4gICAgICB2YXIgY2hhcnN0cmluZ3MgPSB0aGlzLmNoYXJzdHJpbmdzO1xuXG4gICAgICBmb3IgKHZhciBnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCsrKSB7XG4gICAgICAgIGNoYXJzZXQucHVzaChjaGFyc3RyaW5nc1tnbHlwaElkXS5nbHlwaE5hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hhcnNldDtcbiAgICB9LFxuICAgIGdldEdseXBoTWFwcGluZzogZnVuY3Rpb24gVHlwZTFGb250X2dldEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzKSB7XG4gICAgICB2YXIgY2hhcnN0cmluZ3MgPSB0aGlzLmNoYXJzdHJpbmdzO1xuXG4gICAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUpIHtcbiAgICAgICAgY29uc3QgY2hhckNvZGVUb0dseXBoSWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIGZvciAobGV0IGdseXBoSWQgPSAwLCBjaGFyc3RyaW5nc0xlbiA9IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzTGVuOyBnbHlwaElkKyspIHtcbiAgICAgICAgICBjb25zdCBjaGFyQ29kZSA9IHByb3BlcnRpZXMuY01hcC5jaGFyQ29kZU9mKGdseXBoSWQpO1xuICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoYXJDb2RlVG9HbHlwaElkO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ2x5cGhOYW1lcyA9IFtcIi5ub3RkZWZcIl0sXG4gICAgICAgICAgZ2x5cGhJZDtcblxuICAgICAgZm9yIChnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCsrKSB7XG4gICAgICAgIGdseXBoTmFtZXMucHVzaChjaGFyc3RyaW5nc1tnbHlwaElkXS5nbHlwaE5hbWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZztcblxuICAgICAgaWYgKGVuY29kaW5nKSB7XG4gICAgICAgIHZhciBidWlsdEluRW5jb2RpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIGZvciAodmFyIGNoYXJDb2RlIGluIGVuY29kaW5nKSB7XG4gICAgICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihlbmNvZGluZ1tjaGFyQ29kZV0pO1xuXG4gICAgICAgICAgaWYgKGdseXBoSWQgPj0gMCkge1xuICAgICAgICAgICAgYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlMUZvbnRHbHlwaE1hcHBpbmcocHJvcGVydGllcywgYnVpbHRJbkVuY29kaW5nLCBnbHlwaE5hbWVzKTtcbiAgICB9LFxuICAgIGhhc0dseXBoSWQ6IGZ1bmN0aW9uIFR5cGUxRm9udF9oYXNHbHlwaElEKGlkKSB7XG4gICAgICBpZiAoaWQgPCAwIHx8IGlkID49IHRoaXMubnVtR2x5cGhzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlkID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ2x5cGggPSB0aGlzLmNoYXJzdHJpbmdzW2lkIC0gMV07XG4gICAgICByZXR1cm4gZ2x5cGguY2hhcnN0cmluZy5sZW5ndGggPiAwO1xuICAgIH0sXG4gICAgZ2V0U2VhY3M6IGZ1bmN0aW9uIFR5cGUxRm9udF9nZXRTZWFjcyhjaGFyc3RyaW5ncykge1xuICAgICAgdmFyIGksIGlpO1xuICAgICAgdmFyIHNlYWNNYXAgPSBbXTtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGFyc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHZhciBjaGFyc3RyaW5nID0gY2hhcnN0cmluZ3NbaV07XG5cbiAgICAgICAgaWYgKGNoYXJzdHJpbmcuc2VhYykge1xuICAgICAgICAgIHNlYWNNYXBbaSArIDFdID0gY2hhcnN0cmluZy5zZWFjO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWFjTWFwO1xuICAgIH0sXG4gICAgZ2V0VHlwZTJDaGFyc3RyaW5nczogZnVuY3Rpb24gVHlwZTFGb250X2dldFR5cGUyQ2hhcnN0cmluZ3ModHlwZTFDaGFyc3RyaW5ncykge1xuICAgICAgdmFyIHR5cGUyQ2hhcnN0cmluZ3MgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdHlwZTFDaGFyc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHR5cGUyQ2hhcnN0cmluZ3MucHVzaCh0eXBlMUNoYXJzdHJpbmdzW2ldLmNoYXJzdHJpbmcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZTJDaGFyc3RyaW5ncztcbiAgICB9LFxuICAgIGdldFR5cGUyU3VicnM6IGZ1bmN0aW9uIFR5cGUxRm9udF9nZXRUeXBlMlN1YnJzKHR5cGUxU3VicnMpIHtcbiAgICAgIHZhciBiaWFzID0gMDtcbiAgICAgIHZhciBjb3VudCA9IHR5cGUxU3VicnMubGVuZ3RoO1xuXG4gICAgICBpZiAoY291bnQgPCAxMTMzKSB7XG4gICAgICAgIGJpYXMgPSAxMDc7XG4gICAgICB9IGVsc2UgaWYgKGNvdW50IDwgMzM3NjkpIHtcbiAgICAgICAgYmlhcyA9IDExMzE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaWFzID0gMzI3Njg7XG4gICAgICB9XG5cbiAgICAgIHZhciB0eXBlMlN1YnJzID0gW107XG4gICAgICB2YXIgaTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGJpYXM7IGkrKykge1xuICAgICAgICB0eXBlMlN1YnJzLnB1c2goWzB4MGJdKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdHlwZTJTdWJycy5wdXNoKHR5cGUxU3VicnNbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZTJTdWJycztcbiAgICB9LFxuICAgIHdyYXA6IGZ1bmN0aW9uIFR5cGUxRm9udF93cmFwKG5hbWUsIGdseXBocywgY2hhcnN0cmluZ3MsIHN1YnJzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICB2YXIgY2ZmID0gbmV3IF9jZmZfcGFyc2VyLkNGRigpO1xuICAgICAgY2ZmLmhlYWRlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZIZWFkZXIoMSwgMCwgNCwgNCk7XG4gICAgICBjZmYubmFtZXMgPSBbbmFtZV07XG4gICAgICB2YXIgdG9wRGljdCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZUb3BEaWN0KCk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcInZlcnNpb25cIiwgMzkxKTtcbiAgICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiTm90aWNlXCIsIDM5Mik7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkZ1bGxOYW1lXCIsIDM5Myk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkZhbWlseU5hbWVcIiwgMzk0KTtcbiAgICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiV2VpZ2h0XCIsIDM5NSk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkVuY29kaW5nXCIsIG51bGwpO1xuICAgICAgdG9wRGljdC5zZXRCeU5hbWUoXCJGb250TWF0cml4XCIsIHByb3BlcnRpZXMuZm9udE1hdHJpeCk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkZvbnRCQm94XCIsIHByb3BlcnRpZXMuYmJveCk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcImNoYXJzZXRcIiwgbnVsbCk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkNoYXJTdHJpbmdzXCIsIG51bGwpO1xuICAgICAgdG9wRGljdC5zZXRCeU5hbWUoXCJQcml2YXRlXCIsIG51bGwpO1xuICAgICAgY2ZmLnRvcERpY3QgPSB0b3BEaWN0O1xuICAgICAgdmFyIHN0cmluZ3MgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGU3RyaW5ncygpO1xuICAgICAgc3RyaW5ncy5hZGQoXCJWZXJzaW9uIDAuMTFcIik7XG4gICAgICBzdHJpbmdzLmFkZChcIlNlZSBvcmlnaW5hbCBub3RpY2VcIik7XG4gICAgICBzdHJpbmdzLmFkZChuYW1lKTtcbiAgICAgIHN0cmluZ3MuYWRkKG5hbWUpO1xuICAgICAgc3RyaW5ncy5hZGQoXCJNZWRpdW1cIik7XG4gICAgICBjZmYuc3RyaW5ncyA9IHN0cmluZ3M7XG4gICAgICBjZmYuZ2xvYmFsU3VickluZGV4ID0gbmV3IF9jZmZfcGFyc2VyLkNGRkluZGV4KCk7XG4gICAgICB2YXIgY291bnQgPSBnbHlwaHMubGVuZ3RoO1xuICAgICAgdmFyIGNoYXJzZXRBcnJheSA9IFtcIi5ub3RkZWZcIl07XG4gICAgICB2YXIgaSwgaWk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGdseXBoTmFtZSA9IGNoYXJzdHJpbmdzW2ldLmdseXBoTmFtZTtcblxuICAgICAgICBjb25zdCBpbmRleCA9IF9jZmZfcGFyc2VyLkNGRlN0YW5kYXJkU3RyaW5ncy5pbmRleE9mKGdseXBoTmFtZSk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgIHN0cmluZ3MuYWRkKGdseXBoTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGFyc2V0QXJyYXkucHVzaChnbHlwaE5hbWUpO1xuICAgICAgfVxuXG4gICAgICBjZmYuY2hhcnNldCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDaGFyc2V0KGZhbHNlLCAwLCBjaGFyc2V0QXJyYXkpO1xuICAgICAgdmFyIGNoYXJTdHJpbmdzSW5kZXggPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGSW5kZXgoKTtcbiAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKFsweDhiLCAweDBlXSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKGdseXBoc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIGNmZi5jaGFyU3RyaW5ncyA9IGNoYXJTdHJpbmdzSW5kZXg7XG4gICAgICB2YXIgcHJpdmF0ZURpY3QgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGUHJpdmF0ZURpY3QoKTtcbiAgICAgIHByaXZhdGVEaWN0LnNldEJ5TmFtZShcIlN1YnJzXCIsIG51bGwpO1xuICAgICAgdmFyIGZpZWxkcyA9IFtcIkJsdWVWYWx1ZXNcIiwgXCJPdGhlckJsdWVzXCIsIFwiRmFtaWx5Qmx1ZXNcIiwgXCJGYW1pbHlPdGhlckJsdWVzXCIsIFwiU3RlbVNuYXBIXCIsIFwiU3RlbVNuYXBWXCIsIFwiQmx1ZVNoaWZ0XCIsIFwiQmx1ZUZ1enpcIiwgXCJCbHVlU2NhbGVcIiwgXCJMYW5ndWFnZUdyb3VwXCIsIFwiRXhwYW5zaW9uRmFjdG9yXCIsIFwiRm9yY2VCb2xkXCIsIFwiU3RkSFdcIiwgXCJTdGRWV1wiXTtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBmaWVsZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICB2YXIgZmllbGQgPSBmaWVsZHNbaV07XG5cbiAgICAgICAgaWYgKCEoZmllbGQgaW4gcHJvcGVydGllcy5wcml2YXRlRGF0YSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnRpZXMucHJpdmF0ZURhdGFbZmllbGRdO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSB2YWx1ZS5sZW5ndGggLSAxOyBqID4gMDsgai0tKSB7XG4gICAgICAgICAgICB2YWx1ZVtqXSAtPSB2YWx1ZVtqIC0gMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJpdmF0ZURpY3Quc2V0QnlOYW1lKGZpZWxkLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNmZi50b3BEaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7XG4gICAgICB2YXIgc3VickluZGV4ID0gbmV3IF9jZmZfcGFyc2VyLkNGRkluZGV4KCk7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gc3VicnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBzdWJySW5kZXguYWRkKHN1YnJzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcHJpdmF0ZURpY3Quc3VicnNJbmRleCA9IHN1YnJJbmRleDtcbiAgICAgIHZhciBjb21waWxlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDb21waWxlcihjZmYpO1xuICAgICAgcmV0dXJuIGNvbXBpbGVyLmNvbXBpbGUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBUeXBlMUZvbnQ7XG59KCk7XG5cbnZhciBDRkZGb250ID0gZnVuY3Rpb24gQ0ZGRm9udENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIENGRkZvbnQoZmlsZSwgcHJvcGVydGllcykge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdmFyIHBhcnNlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZQYXJzZXIoZmlsZSwgcHJvcGVydGllcywgU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtcbiAgICB0aGlzLmNmZiA9IHBhcnNlci5wYXJzZSgpO1xuICAgIHRoaXMuY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtcbiAgICB2YXIgY29tcGlsZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGQ29tcGlsZXIodGhpcy5jZmYpO1xuICAgIHRoaXMuc2VhY3MgPSB0aGlzLmNmZi5zZWFjcztcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmRhdGEgPSBjb21waWxlci5jb21waWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiRmFpbGVkIHRvIGNvbXBpbGUgZm9udCBcIiArIHByb3BlcnRpZXMubG9hZGVkTmFtZSk7XG4gICAgICB0aGlzLmRhdGEgPSBmaWxlO1xuICAgIH1cbiAgfVxuXG4gIENGRkZvbnQucHJvdG90eXBlID0ge1xuICAgIGdldCBudW1HbHlwaHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZmYuY2hhclN0cmluZ3MuY291bnQ7XG4gICAgfSxcblxuICAgIGdldENoYXJzZXQ6IGZ1bmN0aW9uIENGRkZvbnRfZ2V0Q2hhcnNldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNmZi5jaGFyc2V0LmNoYXJzZXQ7XG4gICAgfSxcbiAgICBnZXRHbHlwaE1hcHBpbmc6IGZ1bmN0aW9uIENGRkZvbnRfZ2V0R2x5cGhNYXBwaW5nKCkge1xuICAgICAgdmFyIGNmZiA9IHRoaXMuY2ZmO1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gICAgICB2YXIgY2hhcnNldHMgPSBjZmYuY2hhcnNldC5jaGFyc2V0O1xuICAgICAgdmFyIGNoYXJDb2RlVG9HbHlwaElkO1xuICAgICAgdmFyIGdseXBoSWQ7XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGxldCBjaGFyQ29kZTtcblxuICAgICAgICBpZiAoY2ZmLmlzQ0lERm9udCkge1xuICAgICAgICAgIGZvciAoZ2x5cGhJZCA9IDA7IGdseXBoSWQgPCBjaGFyc2V0cy5sZW5ndGg7IGdseXBoSWQrKykge1xuICAgICAgICAgICAgdmFyIGNpZCA9IGNoYXJzZXRzW2dseXBoSWRdO1xuICAgICAgICAgICAgY2hhckNvZGUgPSBwcm9wZXJ0aWVzLmNNYXAuY2hhckNvZGVPZihjaWQpO1xuICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNmZi5jaGFyU3RyaW5ncy5jb3VudDsgZ2x5cGhJZCsrKSB7XG4gICAgICAgICAgICBjaGFyQ29kZSA9IHByb3BlcnRpZXMuY01hcC5jaGFyQ29kZU9mKGdseXBoSWQpO1xuICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhckNvZGVUb0dseXBoSWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbmNvZGluZyA9IGNmZi5lbmNvZGluZyA/IGNmZi5lbmNvZGluZy5lbmNvZGluZyA6IG51bGw7XG4gICAgICBjaGFyQ29kZVRvR2x5cGhJZCA9IHR5cGUxRm9udEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzLCBlbmNvZGluZywgY2hhcnNldHMpO1xuICAgICAgcmV0dXJuIGNoYXJDb2RlVG9HbHlwaElkO1xuICAgIH0sXG4gICAgaGFzR2x5cGhJZDogZnVuY3Rpb24gQ0ZGRm9udF9oYXNHbHlwaElEKGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZmYuaGFzR2x5cGhJZChpZCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gQ0ZGRm9udDtcbn0oKTtcblxuLyoqKi8gfSksXG4vKiAzMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5DRkZGRFNlbGVjdCA9IGV4cG9ydHMuQ0ZGQ29tcGlsZXIgPSBleHBvcnRzLkNGRlByaXZhdGVEaWN0ID0gZXhwb3J0cy5DRkZUb3BEaWN0ID0gZXhwb3J0cy5DRkZDaGFyc2V0ID0gZXhwb3J0cy5DRkZJbmRleCA9IGV4cG9ydHMuQ0ZGU3RyaW5ncyA9IGV4cG9ydHMuQ0ZGSGVhZGVyID0gZXhwb3J0cy5DRkYgPSBleHBvcnRzLkNGRlBhcnNlciA9IGV4cG9ydHMuQ0ZGU3RhbmRhcmRTdHJpbmdzID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NoYXJzZXRzID0gX193X3BkZmpzX3JlcXVpcmVfXygzMSk7XG5cbnZhciBfZW5jb2RpbmdzID0gX193X3BkZmpzX3JlcXVpcmVfXygzMik7XG5cbnZhciBNQVhfU1VCUl9ORVNUSU5HID0gMTA7XG52YXIgQ0ZGU3RhbmRhcmRTdHJpbmdzID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJBRVwiLCBcIm9yZGZlbWluaW5lXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJhZVwiLCBcImRvdGxlc3NpXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwib25lc3VwZXJpb3JcIiwgXCJsb2dpY2Fsbm90XCIsIFwibXVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJFdGhcIiwgXCJvbmVoYWxmXCIsIFwicGx1c21pbnVzXCIsIFwiVGhvcm5cIiwgXCJvbmVxdWFydGVyXCIsIFwiZGl2aWRlXCIsIFwiYnJva2VuYmFyXCIsIFwiZGVncmVlXCIsIFwidGhvcm5cIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJyZWdpc3RlcmVkXCIsIFwibWludXNcIiwgXCJldGhcIiwgXCJtdWx0aXBseVwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJjb3B5cmlnaHRcIiwgXCJBYWN1dGVcIiwgXCJBY2lyY3VtZmxleFwiLCBcIkFkaWVyZXNpc1wiLCBcIkFncmF2ZVwiLCBcIkFyaW5nXCIsIFwiQXRpbGRlXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiTnRpbGRlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPZGllcmVzaXNcIiwgXCJPZ3JhdmVcIiwgXCJPdGlsZGVcIiwgXCJTY2Fyb25cIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIlVncmF2ZVwiLCBcIllhY3V0ZVwiLCBcIllkaWVyZXNpc1wiLCBcIlpjYXJvblwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYWdyYXZlXCIsIFwiYXJpbmdcIiwgXCJhdGlsZGVcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiZWdyYXZlXCIsIFwiaWFjdXRlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm9ncmF2ZVwiLCBcIm90aWxkZVwiLCBcInNjYXJvblwiLCBcInVhY3V0ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwidWdyYXZlXCIsIFwieWFjdXRlXCIsIFwieWRpZXJlc2lzXCIsIFwiemNhcm9uXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcImFzdXBlcmlvclwiLCBcImJzdXBlcmlvclwiLCBcImNlbnRzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcImVzdXBlcmlvclwiLCBcImlzdXBlcmlvclwiLCBcImxzdXBlcmlvclwiLCBcIm1zdXBlcmlvclwiLCBcIm5zdXBlcmlvclwiLCBcIm9zdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcImZmXCIsIFwiZmZpXCIsIFwiZmZsXCIsIFwicGFyZW5sZWZ0aW5mZXJpb3JcIiwgXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIiwgXCJDaXJjdW1mbGV4c21hbGxcIiwgXCJoeXBoZW5zdXBlcmlvclwiLCBcIkdyYXZlc21hbGxcIiwgXCJBc21hbGxcIiwgXCJCc21hbGxcIiwgXCJDc21hbGxcIiwgXCJEc21hbGxcIiwgXCJFc21hbGxcIiwgXCJGc21hbGxcIiwgXCJHc21hbGxcIiwgXCJIc21hbGxcIiwgXCJJc21hbGxcIiwgXCJKc21hbGxcIiwgXCJLc21hbGxcIiwgXCJMc21hbGxcIiwgXCJNc21hbGxcIiwgXCJOc21hbGxcIiwgXCJPc21hbGxcIiwgXCJQc21hbGxcIiwgXCJRc21hbGxcIiwgXCJSc21hbGxcIiwgXCJTc21hbGxcIiwgXCJUc21hbGxcIiwgXCJVc21hbGxcIiwgXCJWc21hbGxcIiwgXCJXc21hbGxcIiwgXCJYc21hbGxcIiwgXCJZc21hbGxcIiwgXCJac21hbGxcIiwgXCJjb2xvbm1vbmV0YXJ5XCIsIFwib25lZml0dGVkXCIsIFwicnVwaWFoXCIsIFwiVGlsZGVzbWFsbFwiLCBcImV4Y2xhbWRvd25zbWFsbFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcIkxzbGFzaHNtYWxsXCIsIFwiU2Nhcm9uc21hbGxcIiwgXCJaY2Fyb25zbWFsbFwiLCBcIkRpZXJlc2lzc21hbGxcIiwgXCJCcmV2ZXNtYWxsXCIsIFwiQ2Fyb25zbWFsbFwiLCBcIkRvdGFjY2VudHNtYWxsXCIsIFwiTWFjcm9uc21hbGxcIiwgXCJmaWd1cmVkYXNoXCIsIFwiaHlwaGVuaW5mZXJpb3JcIiwgXCJPZ29uZWtzbWFsbFwiLCBcIlJpbmdzbWFsbFwiLCBcIkNlZGlsbGFzbWFsbFwiLCBcInF1ZXN0aW9uZG93bnNtYWxsXCIsIFwib25lZWlnaHRoXCIsIFwidGhyZWVlaWdodGhzXCIsIFwiZml2ZWVpZ2h0aHNcIiwgXCJzZXZlbmVpZ2h0aHNcIiwgXCJvbmV0aGlyZFwiLCBcInR3b3RoaXJkc1wiLCBcInplcm9zdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBY2lyY3VtZmxleHNtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkFyaW5nc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWFjdXRlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIklhY3V0ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiRXRoc21hbGxcIiwgXCJOdGlsZGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPY2lyY3VtZmxleHNtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk9Fc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVY2lyY3VtZmxleHNtYWxsXCIsIFwiVWRpZXJlc2lzc21hbGxcIiwgXCJZYWN1dGVzbWFsbFwiLCBcIlRob3Juc21hbGxcIiwgXCJZZGllcmVzaXNzbWFsbFwiLCBcIjAwMS4wMDBcIiwgXCIwMDEuMDAxXCIsIFwiMDAxLjAwMlwiLCBcIjAwMS4wMDNcIiwgXCJCbGFja1wiLCBcIkJvbGRcIiwgXCJCb29rXCIsIFwiTGlnaHRcIiwgXCJNZWRpdW1cIiwgXCJSZWd1bGFyXCIsIFwiUm9tYW5cIiwgXCJTZW1pYm9sZFwiXTtcbmV4cG9ydHMuQ0ZGU3RhbmRhcmRTdHJpbmdzID0gQ0ZGU3RhbmRhcmRTdHJpbmdzO1xuY29uc3QgTlVNX1NUQU5EQVJEX0NGRl9TVFJJTkdTID0gMzkxO1xuXG52YXIgQ0ZGUGFyc2VyID0gZnVuY3Rpb24gQ0ZGUGFyc2VyQ2xvc3VyZSgpIHtcbiAgdmFyIENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YSA9IFtudWxsLCB7XG4gICAgaWQ6IFwiaHN0ZW1cIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZSxcbiAgICBzdGVtOiB0cnVlXG4gIH0sIG51bGwsIHtcbiAgICBpZDogXCJ2c3RlbVwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlLFxuICAgIHN0ZW06IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInZtb3ZldG9cIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwicmxpbmV0b1wiLFxuICAgIG1pbjogMixcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJobGluZXRvXCIsXG4gICAgbWluOiAxLFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInZsaW5ldG9cIixcbiAgICBtaW46IDEsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwicnJjdXJ2ZXRvXCIsXG4gICAgbWluOiA2LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwgbnVsbCwge1xuICAgIGlkOiBcImNhbGxzdWJyXCIsXG4gICAgbWluOiAxLFxuICAgIHVuZGVmU3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInJldHVyblwiLFxuICAgIG1pbjogMCxcbiAgICB1bmRlZlN0YWNrOiB0cnVlXG4gIH0sIG51bGwsIG51bGwsIHtcbiAgICBpZDogXCJlbmRjaGFyXCIsXG4gICAgbWluOiAwLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgfSwgbnVsbCwgbnVsbCwgbnVsbCwge1xuICAgIGlkOiBcImhzdGVtaG1cIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZSxcbiAgICBzdGVtOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJoaW50bWFza1wiLFxuICAgIG1pbjogMCxcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJjbnRybWFza1wiLFxuICAgIG1pbjogMCxcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJybW92ZXRvXCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcImhtb3ZldG9cIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwidnN0ZW1obVwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlLFxuICAgIHN0ZW06IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInJjdXJ2ZWxpbmVcIixcbiAgICBtaW46IDgsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwicmxpbmVjdXJ2ZVwiLFxuICAgIG1pbjogOCxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJ2dmN1cnZldG9cIixcbiAgICBtaW46IDQsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiaGhjdXJ2ZXRvXCIsXG4gICAgbWluOiA0LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwgbnVsbCwge1xuICAgIGlkOiBcImNhbGxnc3ViclwiLFxuICAgIG1pbjogMSxcbiAgICB1bmRlZlN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJ2aGN1cnZldG9cIixcbiAgICBtaW46IDQsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiaHZjdXJ2ZXRvXCIsXG4gICAgbWluOiA0LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfV07XG4gIHZhciBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGExMiA9IFtudWxsLCBudWxsLCBudWxsLCB7XG4gICAgaWQ6IFwiYW5kXCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrRGVsdGE6IC0xXG4gIH0sIHtcbiAgICBpZDogXCJvclwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMVxuICB9LCB7XG4gICAgaWQ6IFwibm90XCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrRGVsdGE6IDBcbiAgfSwgbnVsbCwgbnVsbCwgbnVsbCwge1xuICAgIGlkOiBcImFic1wiLFxuICAgIG1pbjogMSxcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJhZGRcIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tEZWx0YTogLTEsXG4gICAgc3RhY2tGbjogZnVuY3Rpb24gc3RhY2tfZGl2KHN0YWNrLCBpbmRleCkge1xuICAgICAgc3RhY2tbaW5kZXggLSAyXSA9IHN0YWNrW2luZGV4IC0gMl0gKyBzdGFja1tpbmRleCAtIDFdO1xuICAgIH1cbiAgfSwge1xuICAgIGlkOiBcInN1YlwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMSxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAtIHN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCB7XG4gICAgaWQ6IFwiZGl2XCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrRGVsdGE6IC0xLFxuICAgIHN0YWNrRm46IGZ1bmN0aW9uIHN0YWNrX2RpdihzdGFjaywgaW5kZXgpIHtcbiAgICAgIHN0YWNrW2luZGV4IC0gMl0gPSBzdGFja1tpbmRleCAtIDJdIC8gc3RhY2tbaW5kZXggLSAxXTtcbiAgICB9XG4gIH0sIG51bGwsIHtcbiAgICBpZDogXCJuZWdcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogMCxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDFdID0gLXN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCB7XG4gICAgaWQ6IFwiZXFcIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tEZWx0YTogLTFcbiAgfSwgbnVsbCwgbnVsbCwge1xuICAgIGlkOiBcImRyb3BcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogLTFcbiAgfSwgbnVsbCwge1xuICAgIGlkOiBcInB1dFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMlxuICB9LCB7XG4gICAgaWQ6IFwiZ2V0XCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrRGVsdGE6IDBcbiAgfSwge1xuICAgIGlkOiBcImlmZWxzZVwiLFxuICAgIG1pbjogNCxcbiAgICBzdGFja0RlbHRhOiAtM1xuICB9LCB7XG4gICAgaWQ6IFwicmFuZG9tXCIsXG4gICAgbWluOiAwLFxuICAgIHN0YWNrRGVsdGE6IDFcbiAgfSwge1xuICAgIGlkOiBcIm11bFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMSxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAqIHN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCBudWxsLCB7XG4gICAgaWQ6IFwic3FydFwiLFxuICAgIG1pbjogMSxcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJkdXBcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogMVxuICB9LCB7XG4gICAgaWQ6IFwiZXhjaFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJpbmRleFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJyb2xsXCIsXG4gICAgbWluOiAzLFxuICAgIHN0YWNrRGVsdGE6IC0yXG4gIH0sIG51bGwsIG51bGwsIG51bGwsIHtcbiAgICBpZDogXCJoZmxleFwiLFxuICAgIG1pbjogNyxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJmbGV4XCIsXG4gICAgbWluOiAxMyxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJoZmxleDFcIixcbiAgICBtaW46IDksXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiZmxleDFcIixcbiAgICBtaW46IDExLFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfV07XG5cbiAgZnVuY3Rpb24gQ0ZGUGFyc2VyKGZpbGUsIHByb3BlcnRpZXMsIHNlYWNBbmFseXNpc0VuYWJsZWQpIHtcbiAgICB0aGlzLmJ5dGVzID0gZmlsZS5nZXRCeXRlcygpO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkID0gISFzZWFjQW5hbHlzaXNFbmFibGVkO1xuICB9XG5cbiAgQ0ZGUGFyc2VyLnByb3RvdHlwZSA9IHtcbiAgICBwYXJzZTogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlKCkge1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gICAgICB2YXIgY2ZmID0gbmV3IENGRigpO1xuICAgICAgdGhpcy5jZmYgPSBjZmY7XG4gICAgICB2YXIgaGVhZGVyID0gdGhpcy5wYXJzZUhlYWRlcigpO1xuICAgICAgdmFyIG5hbWVJbmRleCA9IHRoaXMucGFyc2VJbmRleChoZWFkZXIuZW5kUG9zKTtcbiAgICAgIHZhciB0b3BEaWN0SW5kZXggPSB0aGlzLnBhcnNlSW5kZXgobmFtZUluZGV4LmVuZFBvcyk7XG4gICAgICB2YXIgc3RyaW5nSW5kZXggPSB0aGlzLnBhcnNlSW5kZXgodG9wRGljdEluZGV4LmVuZFBvcyk7XG4gICAgICB2YXIgZ2xvYmFsU3VickluZGV4ID0gdGhpcy5wYXJzZUluZGV4KHN0cmluZ0luZGV4LmVuZFBvcyk7XG4gICAgICB2YXIgdG9wRGljdFBhcnNlZCA9IHRoaXMucGFyc2VEaWN0KHRvcERpY3RJbmRleC5vYmouZ2V0KDApKTtcbiAgICAgIHZhciB0b3BEaWN0ID0gdGhpcy5jcmVhdGVEaWN0KENGRlRvcERpY3QsIHRvcERpY3RQYXJzZWQsIGNmZi5zdHJpbmdzKTtcbiAgICAgIGNmZi5oZWFkZXIgPSBoZWFkZXIub2JqO1xuICAgICAgY2ZmLm5hbWVzID0gdGhpcy5wYXJzZU5hbWVJbmRleChuYW1lSW5kZXgub2JqKTtcbiAgICAgIGNmZi5zdHJpbmdzID0gdGhpcy5wYXJzZVN0cmluZ0luZGV4KHN0cmluZ0luZGV4Lm9iaik7XG4gICAgICBjZmYudG9wRGljdCA9IHRvcERpY3Q7XG4gICAgICBjZmYuZ2xvYmFsU3VickluZGV4ID0gZ2xvYmFsU3VickluZGV4Lm9iajtcbiAgICAgIHRoaXMucGFyc2VQcml2YXRlRGljdChjZmYudG9wRGljdCk7XG4gICAgICBjZmYuaXNDSURGb250ID0gdG9wRGljdC5oYXNOYW1lKFwiUk9TXCIpO1xuICAgICAgdmFyIGNoYXJTdHJpbmdPZmZzZXQgPSB0b3BEaWN0LmdldEJ5TmFtZShcIkNoYXJTdHJpbmdzXCIpO1xuICAgICAgdmFyIGNoYXJTdHJpbmdJbmRleCA9IHRoaXMucGFyc2VJbmRleChjaGFyU3RyaW5nT2Zmc2V0KS5vYmo7XG4gICAgICB2YXIgZm9udE1hdHJpeCA9IHRvcERpY3QuZ2V0QnlOYW1lKFwiRm9udE1hdHJpeFwiKTtcblxuICAgICAgaWYgKGZvbnRNYXRyaXgpIHtcbiAgICAgICAgcHJvcGVydGllcy5mb250TWF0cml4ID0gZm9udE1hdHJpeDtcbiAgICAgIH1cblxuICAgICAgdmFyIGZvbnRCQm94ID0gdG9wRGljdC5nZXRCeU5hbWUoXCJGb250QkJveFwiKTtcblxuICAgICAgaWYgKGZvbnRCQm94KSB7XG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gTWF0aC5tYXgoZm9udEJCb3hbM10sIGZvbnRCQm94WzFdKTtcbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gTWF0aC5taW4oZm9udEJCb3hbMV0sIGZvbnRCQm94WzNdKTtcbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnRTY2FsZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2hhcnNldCwgZW5jb2Rpbmc7XG5cbiAgICAgIGlmIChjZmYuaXNDSURGb250KSB7XG4gICAgICAgIHZhciBmZEFycmF5SW5kZXggPSB0aGlzLnBhcnNlSW5kZXgodG9wRGljdC5nZXRCeU5hbWUoXCJGREFycmF5XCIpKS5vYmo7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZmRBcnJheUluZGV4LmNvdW50OyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIHZhciBkaWN0UmF3ID0gZmRBcnJheUluZGV4LmdldChpKTtcbiAgICAgICAgICB2YXIgZm9udERpY3QgPSB0aGlzLmNyZWF0ZURpY3QoQ0ZGVG9wRGljdCwgdGhpcy5wYXJzZURpY3QoZGljdFJhdyksIGNmZi5zdHJpbmdzKTtcbiAgICAgICAgICB0aGlzLnBhcnNlUHJpdmF0ZURpY3QoZm9udERpY3QpO1xuICAgICAgICAgIGNmZi5mZEFycmF5LnB1c2goZm9udERpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5jb2RpbmcgPSBudWxsO1xuICAgICAgICBjaGFyc2V0ID0gdGhpcy5wYXJzZUNoYXJzZXRzKHRvcERpY3QuZ2V0QnlOYW1lKFwiY2hhcnNldFwiKSwgY2hhclN0cmluZ0luZGV4LmNvdW50LCBjZmYuc3RyaW5ncywgdHJ1ZSk7XG4gICAgICAgIGNmZi5mZFNlbGVjdCA9IHRoaXMucGFyc2VGRFNlbGVjdCh0b3BEaWN0LmdldEJ5TmFtZShcIkZEU2VsZWN0XCIpLCBjaGFyU3RyaW5nSW5kZXguY291bnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhcnNldCA9IHRoaXMucGFyc2VDaGFyc2V0cyh0b3BEaWN0LmdldEJ5TmFtZShcImNoYXJzZXRcIiksIGNoYXJTdHJpbmdJbmRleC5jb3VudCwgY2ZmLnN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgZW5jb2RpbmcgPSB0aGlzLnBhcnNlRW5jb2RpbmcodG9wRGljdC5nZXRCeU5hbWUoXCJFbmNvZGluZ1wiKSwgcHJvcGVydGllcywgY2ZmLnN0cmluZ3MsIGNoYXJzZXQuY2hhcnNldCk7XG4gICAgICB9XG5cbiAgICAgIGNmZi5jaGFyc2V0ID0gY2hhcnNldDtcbiAgICAgIGNmZi5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgdmFyIGNoYXJTdHJpbmdzQW5kU2VhY3MgPSB0aGlzLnBhcnNlQ2hhclN0cmluZ3Moe1xuICAgICAgICBjaGFyU3RyaW5nczogY2hhclN0cmluZ0luZGV4LFxuICAgICAgICBsb2NhbFN1YnJJbmRleDogdG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4LFxuICAgICAgICBnbG9iYWxTdWJySW5kZXg6IGdsb2JhbFN1YnJJbmRleC5vYmosXG4gICAgICAgIGZkU2VsZWN0OiBjZmYuZmRTZWxlY3QsXG4gICAgICAgIGZkQXJyYXk6IGNmZi5mZEFycmF5LFxuICAgICAgICBwcml2YXRlRGljdDogdG9wRGljdC5wcml2YXRlRGljdFxuICAgICAgfSk7XG4gICAgICBjZmYuY2hhclN0cmluZ3MgPSBjaGFyU3RyaW5nc0FuZFNlYWNzLmNoYXJTdHJpbmdzO1xuICAgICAgY2ZmLnNlYWNzID0gY2hhclN0cmluZ3NBbmRTZWFjcy5zZWFjcztcbiAgICAgIGNmZi53aWR0aHMgPSBjaGFyU3RyaW5nc0FuZFNlYWNzLndpZHRocztcbiAgICAgIHJldHVybiBjZmY7XG4gICAgfSxcbiAgICBwYXJzZUhlYWRlcjogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlSGVhZGVyKCkge1xuICAgICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgIHZhciBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgICB3aGlsZSAob2Zmc2V0IDwgYnl0ZXNMZW5ndGggJiYgYnl0ZXNbb2Zmc2V0XSAhPT0gMSkge1xuICAgICAgICArK29mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9mZnNldCA+PSBieXRlc0xlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIENGRiBoZWFkZXJcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiY2ZmIGRhdGEgaXMgc2hpZnRlZFwiKTtcbiAgICAgICAgYnl0ZXMgPSBieXRlcy5zdWJhcnJheShvZmZzZXQpO1xuICAgICAgICB0aGlzLmJ5dGVzID0gYnl0ZXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBtYWpvciA9IGJ5dGVzWzBdO1xuICAgICAgdmFyIG1pbm9yID0gYnl0ZXNbMV07XG4gICAgICB2YXIgaGRyU2l6ZSA9IGJ5dGVzWzJdO1xuICAgICAgdmFyIG9mZlNpemUgPSBieXRlc1szXTtcbiAgICAgIHZhciBoZWFkZXIgPSBuZXcgQ0ZGSGVhZGVyKG1ham9yLCBtaW5vciwgaGRyU2l6ZSwgb2ZmU2l6ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvYmo6IGhlYWRlcixcbiAgICAgICAgZW5kUG9zOiBoZHJTaXplXG4gICAgICB9O1xuICAgIH0sXG4gICAgcGFyc2VEaWN0OiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VEaWN0KGRpY3QpIHtcbiAgICAgIHZhciBwb3MgPSAwO1xuXG4gICAgICBmdW5jdGlvbiBwYXJzZU9wZXJhbmQoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGRpY3RbcG9zKytdO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMzApIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdE9wZXJhbmQoKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMjgpIHtcbiAgICAgICAgICB2YWx1ZSA9IGRpY3RbcG9zKytdO1xuICAgICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IDI0IHwgZGljdFtwb3MrK10gPDwgMTYpID4+IDE2O1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMjkpIHtcbiAgICAgICAgICB2YWx1ZSA9IGRpY3RbcG9zKytdO1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPDwgOCB8IGRpY3RbcG9zKytdO1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPDwgOCB8IGRpY3RbcG9zKytdO1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPDwgOCB8IGRpY3RbcG9zKytdO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAzMiAmJiB2YWx1ZSA8PSAyNDYpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUgLSAxMzk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMjQ3ICYmIHZhbHVlIDw9IDI1MCkge1xuICAgICAgICAgIHJldHVybiAodmFsdWUgLSAyNDcpICogMjU2ICsgZGljdFtwb3MrK10gKyAxMDg7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMjUxICYmIHZhbHVlIDw9IDI1NCkge1xuICAgICAgICAgIHJldHVybiAtKCh2YWx1ZSAtIDI1MSkgKiAyNTYpIC0gZGljdFtwb3MrK10gLSAxMDg7XG4gICAgICAgIH1cblxuICAgICAgICAoMCwgX3V0aWwud2FybikoJ0NGRlBhcnNlcl9wYXJzZURpY3Q6IFwiJyArIHZhbHVlICsgJ1wiIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKTtcbiAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcGFyc2VGbG9hdE9wZXJhbmQoKSB7XG4gICAgICAgIHZhciBzdHIgPSBcIlwiO1xuICAgICAgICB2YXIgZW9mID0gMTU7XG4gICAgICAgIGNvbnN0IGxvb2t1cCA9IFtcIjBcIiwgXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIiwgXCIuXCIsIFwiRVwiLCBcIkUtXCIsIG51bGwsIFwiLVwiXTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGRpY3QubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChwb3MgPCBsZW5ndGgpIHtcbiAgICAgICAgICB2YXIgYiA9IGRpY3RbcG9zKytdO1xuICAgICAgICAgIHZhciBiMSA9IGIgPj4gNDtcbiAgICAgICAgICB2YXIgYjIgPSBiICYgMTU7XG5cbiAgICAgICAgICBpZiAoYjEgPT09IGVvZikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGxvb2t1cFtiMV07XG5cbiAgICAgICAgICBpZiAoYjIgPT09IGVvZikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGxvb2t1cFtiMl07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3BlcmFuZHMgPSBbXTtcbiAgICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgICBwb3MgPSAwO1xuICAgICAgdmFyIGVuZCA9IGRpY3QubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAocG9zIDwgZW5kKSB7XG4gICAgICAgIHZhciBiID0gZGljdFtwb3NdO1xuXG4gICAgICAgIGlmIChiIDw9IDIxKSB7XG4gICAgICAgICAgaWYgKGIgPT09IDEyKSB7XG4gICAgICAgICAgICBiID0gYiA8PCA4IHwgZGljdFsrK3Bvc107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW50cmllcy5wdXNoKFtiLCBvcGVyYW5kc10pO1xuICAgICAgICAgIG9wZXJhbmRzID0gW107XG4gICAgICAgICAgKytwb3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3BlcmFuZHMucHVzaChwYXJzZU9wZXJhbmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfSxcbiAgICBwYXJzZUluZGV4OiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VJbmRleChwb3MpIHtcbiAgICAgIHZhciBjZmZJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuICAgICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgIHZhciBjb3VudCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgdmFyIG9mZnNldHMgPSBbXTtcbiAgICAgIHZhciBlbmQgPSBwb3M7XG4gICAgICB2YXIgaSwgaWk7XG5cbiAgICAgIGlmIChjb3VudCAhPT0gMCkge1xuICAgICAgICB2YXIgb2Zmc2V0U2l6ZSA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgdmFyIHN0YXJ0UG9zID0gcG9zICsgKGNvdW50ICsgMSkgKiBvZmZzZXRTaXplIC0gMTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNvdW50ICsgMTsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb2Zmc2V0U2l6ZTsgKytqKSB7XG4gICAgICAgICAgICBvZmZzZXQgPDw9IDg7XG4gICAgICAgICAgICBvZmZzZXQgKz0gYnl0ZXNbcG9zKytdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9mZnNldHMucHVzaChzdGFydFBvcyArIG9mZnNldCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbmQgPSBvZmZzZXRzW2NvdW50XTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBvZmZzZXRzLmxlbmd0aCAtIDE7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHZhciBvZmZzZXRTdGFydCA9IG9mZnNldHNbaV07XG4gICAgICAgIHZhciBvZmZzZXRFbmQgPSBvZmZzZXRzW2kgKyAxXTtcbiAgICAgICAgY2ZmSW5kZXguYWRkKGJ5dGVzLnN1YmFycmF5KG9mZnNldFN0YXJ0LCBvZmZzZXRFbmQpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2JqOiBjZmZJbmRleCxcbiAgICAgICAgZW5kUG9zOiBlbmRcbiAgICAgIH07XG4gICAgfSxcbiAgICBwYXJzZU5hbWVJbmRleDogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlTmFtZUluZGV4KGluZGV4KSB7XG4gICAgICB2YXIgbmFtZXMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gaW5kZXguY291bnQ7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHZhciBuYW1lID0gaW5kZXguZ2V0KGkpO1xuICAgICAgICBuYW1lcy5wdXNoKCgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShuYW1lKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lcztcbiAgICB9LFxuICAgIHBhcnNlU3RyaW5nSW5kZXg6IGZ1bmN0aW9uIENGRlBhcnNlcl9wYXJzZVN0cmluZ0luZGV4KGluZGV4KSB7XG4gICAgICB2YXIgc3RyaW5ncyA9IG5ldyBDRkZTdHJpbmdzKCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGluZGV4LmNvdW50OyBpIDwgaWk7ICsraSkge1xuICAgICAgICB2YXIgZGF0YSA9IGluZGV4LmdldChpKTtcbiAgICAgICAgc3RyaW5ncy5hZGQoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cmluZ3M7XG4gICAgfSxcbiAgICBjcmVhdGVEaWN0OiBmdW5jdGlvbiBDRkZQYXJzZXJfY3JlYXRlRGljdChUeXBlLCBkaWN0LCBzdHJpbmdzKSB7XG4gICAgICB2YXIgY2ZmRGljdCA9IG5ldyBUeXBlKHN0cmluZ3MpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkaWN0Lmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgdmFyIHBhaXIgPSBkaWN0W2ldO1xuICAgICAgICB2YXIga2V5ID0gcGFpclswXTtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFpclsxXTtcbiAgICAgICAgY2ZmRGljdC5zZXRCeUtleShrZXksIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNmZkRpY3Q7XG4gICAgfSxcbiAgICBwYXJzZUNoYXJTdHJpbmc6IGZ1bmN0aW9uIENGRlBhcnNlcl9wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIGRhdGEsIGxvY2FsU3VickluZGV4LCBnbG9iYWxTdWJySW5kZXgpIHtcbiAgICAgIGlmICghZGF0YSB8fCBzdGF0ZS5jYWxsRGVwdGggPiBNQVhfU1VCUl9ORVNUSU5HKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YWNrU2l6ZSA9IHN0YXRlLnN0YWNrU2l6ZTtcbiAgICAgIHZhciBzdGFjayA9IHN0YXRlLnN0YWNrO1xuICAgICAgdmFyIGxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbmd0aDspIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZGF0YVtqKytdO1xuICAgICAgICB2YXIgdmFsaWRhdGlvbkNvbW1hbmQgPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgICB2YXIgcSA9IGRhdGFbaisrXTtcblxuICAgICAgICAgIGlmIChxID09PSAwKSB7XG4gICAgICAgICAgICBkYXRhW2ogLSAyXSA9IDEzOTtcbiAgICAgICAgICAgIGRhdGFbaiAtIDFdID0gMjI7XG4gICAgICAgICAgICBzdGFja1NpemUgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YTEyW3FdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMjgpIHtcbiAgICAgICAgICBzdGFja1tzdGFja1NpemVdID0gKGRhdGFbal0gPDwgMjQgfCBkYXRhW2ogKyAxXSA8PCAxNikgPj4gMTY7XG4gICAgICAgICAgaiArPSAyO1xuICAgICAgICAgIHN0YWNrU2l6ZSsrO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAxNCkge1xuICAgICAgICAgIGlmIChzdGFja1NpemUgPj0gNCkge1xuICAgICAgICAgICAgc3RhY2tTaXplIC09IDQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc2VhYyA9IHN0YWNrLnNsaWNlKHN0YWNrU2l6ZSwgc3RhY2tTaXplICsgNCk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMzIgJiYgdmFsdWUgPD0gMjQ2KSB7XG4gICAgICAgICAgc3RhY2tbc3RhY2tTaXplXSA9IHZhbHVlIC0gMTM5O1xuICAgICAgICAgIHN0YWNrU2l6ZSsrO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDI0NyAmJiB2YWx1ZSA8PSAyNTQpIHtcbiAgICAgICAgICBzdGFja1tzdGFja1NpemVdID0gdmFsdWUgPCAyNTEgPyAodmFsdWUgLSAyNDcgPDwgOCkgKyBkYXRhW2pdICsgMTA4IDogLSh2YWx1ZSAtIDI1MSA8PCA4KSAtIGRhdGFbal0gLSAxMDg7XG4gICAgICAgICAgaisrO1xuICAgICAgICAgIHN0YWNrU2l6ZSsrO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyNTUpIHtcbiAgICAgICAgICBzdGFja1tzdGFja1NpemVdID0gKGRhdGFbal0gPDwgMjQgfCBkYXRhW2ogKyAxXSA8PCAxNiB8IGRhdGFbaiArIDJdIDw8IDggfCBkYXRhW2ogKyAzXSkgLyA2NTUzNjtcbiAgICAgICAgICBqICs9IDQ7XG4gICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDE5IHx8IHZhbHVlID09PSAyMCkge1xuICAgICAgICAgIHN0YXRlLmhpbnRzICs9IHN0YWNrU2l6ZSA+PiAxO1xuICAgICAgICAgIGogKz0gc3RhdGUuaGludHMgKyA3ID4+IDM7XG4gICAgICAgICAgc3RhY2tTaXplICU9IDI7XG4gICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGFbdmFsdWVdO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAxMCB8fCB2YWx1ZSA9PT0gMjkpIHtcbiAgICAgICAgICB2YXIgc3VicnNJbmRleDtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMTApIHtcbiAgICAgICAgICAgIHN1YnJzSW5kZXggPSBsb2NhbFN1YnJJbmRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VicnNJbmRleCA9IGdsb2JhbFN1YnJJbmRleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN1YnJzSW5kZXgpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIk1pc3Npbmcgc3VicnNJbmRleCBmb3IgXCIgKyB2YWxpZGF0aW9uQ29tbWFuZC5pZCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGJpYXMgPSAzMjc2ODtcblxuICAgICAgICAgIGlmIChzdWJyc0luZGV4LmNvdW50IDwgMTI0MCkge1xuICAgICAgICAgICAgYmlhcyA9IDEwNztcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1YnJzSW5kZXguY291bnQgPCAzMzkwMCkge1xuICAgICAgICAgICAgYmlhcyA9IDExMzE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN1YnJOdW1iZXIgPSBzdGFja1stLXN0YWNrU2l6ZV0gKyBiaWFzO1xuXG4gICAgICAgICAgaWYgKHN1YnJOdW1iZXIgPCAwIHx8IHN1YnJOdW1iZXIgPj0gc3VicnNJbmRleC5jb3VudCB8fCBpc05hTihzdWJyTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGFbdmFsdWVdO1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiT3V0IG9mIGJvdW5kcyBzdWJySW5kZXggZm9yIFwiICsgdmFsaWRhdGlvbkNvbW1hbmQuaWQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXRlLnN0YWNrU2l6ZSA9IHN0YWNrU2l6ZTtcbiAgICAgICAgICBzdGF0ZS5jYWxsRGVwdGgrKztcbiAgICAgICAgICB2YXIgdmFsaWQgPSB0aGlzLnBhcnNlQ2hhclN0cmluZyhzdGF0ZSwgc3VicnNJbmRleC5nZXQoc3Vick51bWJlciksIGxvY2FsU3VickluZGV4LCBnbG9iYWxTdWJySW5kZXgpO1xuXG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXRlLmNhbGxEZXB0aC0tO1xuICAgICAgICAgIHN0YWNrU2l6ZSA9IHN0YXRlLnN0YWNrU2l6ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTEpIHtcbiAgICAgICAgICBzdGF0ZS5zdGFja1NpemUgPSBzdGFja1NpemU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGFbdmFsdWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgaWYgKHZhbGlkYXRpb25Db21tYW5kLnN0ZW0pIHtcbiAgICAgICAgICAgIHN0YXRlLmhpbnRzICs9IHN0YWNrU2l6ZSA+PiAxO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IDMgfHwgdmFsdWUgPT09IDIzKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmhhc1ZTdGVtcyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmhhc1ZTdGVtcyAmJiAodmFsdWUgPT09IDEgfHwgdmFsdWUgPT09IDE4KSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJDRkYgc3RlbSBoaW50cyBhcmUgaW4gd3Jvbmcgb3JkZXJcIik7XG4gICAgICAgICAgICAgIGRhdGFbaiAtIDFdID0gdmFsdWUgPT09IDEgPyAzIDogMjM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFwibWluXCIgaW4gdmFsaWRhdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgIGlmICghc3RhdGUudW5kZWZTdGFjayAmJiBzdGFja1NpemUgPCB2YWxpZGF0aW9uQ29tbWFuZC5taW4pIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTm90IGVub3VnaCBwYXJhbWV0ZXJzIGZvciBcIiArIHZhbGlkYXRpb25Db21tYW5kLmlkICsgXCI7IGFjdHVhbDogXCIgKyBzdGFja1NpemUgKyBcIiwgZXhwZWN0ZWQ6IFwiICsgdmFsaWRhdGlvbkNvbW1hbmQubWluKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdFN0YWNrQ2xlYXJpbmcgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykge1xuICAgICAgICAgICAgc3RhdGUuZmlyc3RTdGFja0NsZWFyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzdGFja1NpemUgLT0gdmFsaWRhdGlvbkNvbW1hbmQubWluO1xuXG4gICAgICAgICAgICBpZiAoc3RhY2tTaXplID49IDIgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RlbSkge1xuICAgICAgICAgICAgICBzdGFja1NpemUgJT0gMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2tTaXplID4gMSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RhY2tTaXplID4gMCAmJiBzdGFja1tzdGFja1NpemUgLSAxXSA+PSAwKSB7XG4gICAgICAgICAgICAgIHN0YXRlLndpZHRoID0gc3RhY2tbc3RhY2tTaXplIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFwic3RhY2tEZWx0YVwiIGluIHZhbGlkYXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICBpZiAoXCJzdGFja0ZuXCIgaW4gdmFsaWRhdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tGbihzdGFjaywgc3RhY2tTaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhY2tTaXplICs9IHZhbGlkYXRpb25Db21tYW5kLnN0YWNrRGVsdGE7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uQ29tbWFuZC5zdGFja0NsZWFyaW5nKSB7XG4gICAgICAgICAgICBzdGFja1NpemUgPSAwO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbkNvbW1hbmQucmVzZXRTdGFjaykge1xuICAgICAgICAgICAgc3RhY2tTaXplID0gMDtcbiAgICAgICAgICAgIHN0YXRlLnVuZGVmU3RhY2sgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25Db21tYW5kLnVuZGVmU3RhY2spIHtcbiAgICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7XG4gICAgICAgICAgICBzdGF0ZS51bmRlZlN0YWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YXRlLmZpcnN0U3RhY2tDbGVhcmluZyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdGF0ZS5zdGFja1NpemUgPSBzdGFja1NpemU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgcGFyc2VDaGFyU3RyaW5ncyh7XG4gICAgICBjaGFyU3RyaW5ncyxcbiAgICAgIGxvY2FsU3VickluZGV4LFxuICAgICAgZ2xvYmFsU3VickluZGV4LFxuICAgICAgZmRTZWxlY3QsXG4gICAgICBmZEFycmF5LFxuICAgICAgcHJpdmF0ZURpY3RcbiAgICB9KSB7XG4gICAgICB2YXIgc2VhY3MgPSBbXTtcbiAgICAgIHZhciB3aWR0aHMgPSBbXTtcbiAgICAgIHZhciBjb3VudCA9IGNoYXJTdHJpbmdzLmNvdW50O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdmFyIGNoYXJzdHJpbmcgPSBjaGFyU3RyaW5ncy5nZXQoaSk7XG4gICAgICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgICAgICBjYWxsRGVwdGg6IDAsXG4gICAgICAgICAgc3RhY2tTaXplOiAwLFxuICAgICAgICAgIHN0YWNrOiBbXSxcbiAgICAgICAgICB1bmRlZlN0YWNrOiB0cnVlLFxuICAgICAgICAgIGhpbnRzOiAwLFxuICAgICAgICAgIGZpcnN0U3RhY2tDbGVhcmluZzogdHJ1ZSxcbiAgICAgICAgICBzZWFjOiBudWxsLFxuICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgIGhhc1ZTdGVtczogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdmFyIGxvY2FsU3ViclRvVXNlID0gbnVsbDtcbiAgICAgICAgdmFyIHByaXZhdGVEaWN0VG9Vc2UgPSBwcml2YXRlRGljdDtcblxuICAgICAgICBpZiAoZmRTZWxlY3QgJiYgZmRBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZmRJbmRleCA9IGZkU2VsZWN0LmdldEZESW5kZXgoaSk7XG5cbiAgICAgICAgICBpZiAoZmRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkdseXBoIGluZGV4IGlzIG5vdCBpbiBmZCBzZWxlY3QuXCIpO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmRJbmRleCA+PSBmZEFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguXCIpO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHByaXZhdGVEaWN0VG9Vc2UgPSBmZEFycmF5W2ZkSW5kZXhdLnByaXZhdGVEaWN0O1xuICAgICAgICAgICAgbG9jYWxTdWJyVG9Vc2UgPSBwcml2YXRlRGljdFRvVXNlLnN1YnJzSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsU3VickluZGV4KSB7XG4gICAgICAgICAgbG9jYWxTdWJyVG9Vc2UgPSBsb2NhbFN1YnJJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgIHZhbGlkID0gdGhpcy5wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIGNoYXJzdHJpbmcsIGxvY2FsU3ViclRvVXNlLCBnbG9iYWxTdWJySW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLndpZHRoICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgbm9taW5hbFdpZHRoID0gcHJpdmF0ZURpY3RUb1VzZS5nZXRCeU5hbWUoXCJub21pbmFsV2lkdGhYXCIpO1xuICAgICAgICAgIHdpZHRoc1tpXSA9IG5vbWluYWxXaWR0aCArIHN0YXRlLndpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IHByaXZhdGVEaWN0VG9Vc2UuZ2V0QnlOYW1lKFwiZGVmYXVsdFdpZHRoWFwiKTtcbiAgICAgICAgICB3aWR0aHNbaV0gPSBkZWZhdWx0V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuc2VhYyAhPT0gbnVsbCkge1xuICAgICAgICAgIHNlYWNzW2ldID0gc3RhdGUuc2VhYztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICBjaGFyU3RyaW5ncy5zZXQoaSwgbmV3IFVpbnQ4QXJyYXkoWzE0XSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYXJTdHJpbmdzLFxuICAgICAgICBzZWFjcyxcbiAgICAgICAgd2lkdGhzXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBlbXB0eVByaXZhdGVEaWN0aW9uYXJ5OiBmdW5jdGlvbiBDRkZQYXJzZXJfZW1wdHlQcml2YXRlRGljdGlvbmFyeShwYXJlbnREaWN0KSB7XG4gICAgICB2YXIgcHJpdmF0ZURpY3QgPSB0aGlzLmNyZWF0ZURpY3QoQ0ZGUHJpdmF0ZURpY3QsIFtdLCBwYXJlbnREaWN0LnN0cmluZ3MpO1xuICAgICAgcGFyZW50RGljdC5zZXRCeUtleSgxOCwgWzAsIDBdKTtcbiAgICAgIHBhcmVudERpY3QucHJpdmF0ZURpY3QgPSBwcml2YXRlRGljdDtcbiAgICB9LFxuICAgIHBhcnNlUHJpdmF0ZURpY3Q6IGZ1bmN0aW9uIENGRlBhcnNlcl9wYXJzZVByaXZhdGVEaWN0KHBhcmVudERpY3QpIHtcbiAgICAgIGlmICghcGFyZW50RGljdC5oYXNOYW1lKFwiUHJpdmF0ZVwiKSkge1xuICAgICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHByaXZhdGVPZmZzZXQgPSBwYXJlbnREaWN0LmdldEJ5TmFtZShcIlByaXZhdGVcIik7XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcml2YXRlT2Zmc2V0KSB8fCBwcml2YXRlT2Zmc2V0Lmxlbmd0aCAhPT0gMikge1xuICAgICAgICBwYXJlbnREaWN0LnJlbW92ZUJ5TmFtZShcIlByaXZhdGVcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNpemUgPSBwcml2YXRlT2Zmc2V0WzBdO1xuICAgICAgdmFyIG9mZnNldCA9IHByaXZhdGVPZmZzZXRbMV07XG5cbiAgICAgIGlmIChzaXplID09PSAwIHx8IG9mZnNldCA+PSB0aGlzLmJ5dGVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHByaXZhdGVEaWN0RW5kID0gb2Zmc2V0ICsgc2l6ZTtcbiAgICAgIHZhciBkaWN0RGF0YSA9IHRoaXMuYnl0ZXMuc3ViYXJyYXkob2Zmc2V0LCBwcml2YXRlRGljdEVuZCk7XG4gICAgICB2YXIgZGljdCA9IHRoaXMucGFyc2VEaWN0KGRpY3REYXRhKTtcbiAgICAgIHZhciBwcml2YXRlRGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZQcml2YXRlRGljdCwgZGljdCwgcGFyZW50RGljdC5zdHJpbmdzKTtcbiAgICAgIHBhcmVudERpY3QucHJpdmF0ZURpY3QgPSBwcml2YXRlRGljdDtcblxuICAgICAgaWYgKCFwcml2YXRlRGljdC5nZXRCeU5hbWUoXCJTdWJyc1wiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzdWJyc09mZnNldCA9IHByaXZhdGVEaWN0LmdldEJ5TmFtZShcIlN1YnJzXCIpO1xuICAgICAgdmFyIHJlbGF0aXZlT2Zmc2V0ID0gb2Zmc2V0ICsgc3VicnNPZmZzZXQ7XG5cbiAgICAgIGlmIChzdWJyc09mZnNldCA9PT0gMCB8fCByZWxhdGl2ZU9mZnNldCA+PSB0aGlzLmJ5dGVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHN1YnJzSW5kZXggPSB0aGlzLnBhcnNlSW5kZXgocmVsYXRpdmVPZmZzZXQpO1xuICAgICAgcHJpdmF0ZURpY3Quc3VicnNJbmRleCA9IHN1YnJzSW5kZXgub2JqO1xuICAgIH0sXG4gICAgcGFyc2VDaGFyc2V0czogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlQ2hhcnNldHMocG9zLCBsZW5ndGgsIHN0cmluZ3MsIGNpZCkge1xuICAgICAgaWYgKHBvcyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQodHJ1ZSwgQ0ZGQ2hhcnNldFByZWRlZmluZWRUeXBlcy5JU09fQURPQkUsIF9jaGFyc2V0cy5JU09BZG9iZUNoYXJzZXQpO1xuICAgICAgfSBlbHNlIGlmIChwb3MgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDRkZDaGFyc2V0KHRydWUsIENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMuRVhQRVJULCBfY2hhcnNldHMuRXhwZXJ0Q2hhcnNldCk7XG4gICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gMikge1xuICAgICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQodHJ1ZSwgQ0ZGQ2hhcnNldFByZWRlZmluZWRUeXBlcy5FWFBFUlRfU1VCU0VULCBfY2hhcnNldHMuRXhwZXJ0U3Vic2V0Q2hhcnNldCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXM7XG4gICAgICB2YXIgc3RhcnQgPSBwb3M7XG4gICAgICB2YXIgZm9ybWF0ID0gYnl0ZXNbcG9zKytdO1xuICAgICAgY29uc3QgY2hhcnNldCA9IFtjaWQgPyAwIDogXCIubm90ZGVmXCJdO1xuICAgICAgdmFyIGlkLCBjb3VudCwgaTtcbiAgICAgIGxlbmd0aCAtPSAxO1xuXG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgY2hhcnNldC5wdXNoKGNpZCA/IGlkIDogc3RyaW5ncy5nZXQoaWQpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgd2hpbGUgKGNoYXJzZXQubGVuZ3RoIDw9IGxlbmd0aCkge1xuICAgICAgICAgICAgaWQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgIGNvdW50ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgY2hhcnNldC5wdXNoKGNpZCA/IGlkKysgOiBzdHJpbmdzLmdldChpZCsrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHdoaWxlIChjaGFyc2V0Lmxlbmd0aCA8PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlkID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG4gICAgICAgICAgICBjb3VudCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgY2hhcnNldC5wdXNoKGNpZCA/IGlkKysgOiBzdHJpbmdzLmdldChpZCsrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIGNoYXJzZXQgZm9ybWF0XCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZW5kID0gcG9zO1xuICAgICAgdmFyIHJhdyA9IGJ5dGVzLnN1YmFycmF5KHN0YXJ0LCBlbmQpO1xuICAgICAgcmV0dXJuIG5ldyBDRkZDaGFyc2V0KGZhbHNlLCBmb3JtYXQsIGNoYXJzZXQsIHJhdyk7XG4gICAgfSxcbiAgICBwYXJzZUVuY29kaW5nOiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VFbmNvZGluZyhwb3MsIHByb3BlcnRpZXMsIHN0cmluZ3MsIGNoYXJzZXQpIHtcbiAgICAgIHZhciBlbmNvZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgdmFyIHByZWRlZmluZWQgPSBmYWxzZTtcbiAgICAgIHZhciBmb3JtYXQsIGksIGlpO1xuICAgICAgdmFyIHJhdyA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIHJlYWRTdXBwbGVtZW50KCkge1xuICAgICAgICB2YXIgc3VwcGxlbWVudHNDb3VudCA9IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3VwcGxlbWVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgdmFyIHNpZCA9IChieXRlc1twb3MrK10gPDwgOCkgKyAoYnl0ZXNbcG9zKytdICYgMHhmZik7XG4gICAgICAgICAgZW5jb2RpbmdbY29kZV0gPSBjaGFyc2V0LmluZGV4T2Yoc3RyaW5ncy5nZXQoc2lkKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBvcyA9PT0gMCB8fCBwb3MgPT09IDEpIHtcbiAgICAgICAgcHJlZGVmaW5lZCA9IHRydWU7XG4gICAgICAgIGZvcm1hdCA9IHBvcztcbiAgICAgICAgdmFyIGJhc2VFbmNvZGluZyA9IHBvcyA/IF9lbmNvZGluZ3MuRXhwZXJ0RW5jb2RpbmcgOiBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2Rpbmc7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGFyc2V0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSBiYXNlRW5jb2RpbmcuaW5kZXhPZihjaGFyc2V0W2ldKTtcblxuICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGVuY29kaW5nW2luZGV4XSA9IGk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZGF0YVN0YXJ0ID0gcG9zO1xuICAgICAgICBmb3JtYXQgPSBieXRlc1twb3MrK107XG5cbiAgICAgICAgc3dpdGNoIChmb3JtYXQgJiAweDdmKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdmFyIGdseXBoc0NvdW50ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IGdseXBoc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgZW5jb2RpbmdbYnl0ZXNbcG9zKytdXSA9IGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdmFyIHJhbmdlc0NvdW50ID0gYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgdmFyIGdpZCA9IDE7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByYW5nZXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBzdGFydCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgdmFyIGxlZnQgPSBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0OyBqIDw9IHN0YXJ0ICsgbGVmdDsgaisrKSB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmdbal0gPSBnaWQrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gZW5jb2RpbmcgZm9ybWF0OiAke2Zvcm1hdH0gaW4gQ0ZGYCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF0YUVuZCA9IHBvcztcblxuICAgICAgICBpZiAoZm9ybWF0ICYgMHg4MCkge1xuICAgICAgICAgIGJ5dGVzW2RhdGFTdGFydF0gJj0gMHg3ZjtcbiAgICAgICAgICByZWFkU3VwcGxlbWVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmF3ID0gYnl0ZXMuc3ViYXJyYXkoZGF0YVN0YXJ0LCBkYXRhRW5kKTtcbiAgICAgIH1cblxuICAgICAgZm9ybWF0ID0gZm9ybWF0ICYgMHg3ZjtcbiAgICAgIHJldHVybiBuZXcgQ0ZGRW5jb2RpbmcocHJlZGVmaW5lZCwgZm9ybWF0LCBlbmNvZGluZywgcmF3KTtcbiAgICB9LFxuICAgIHBhcnNlRkRTZWxlY3Q6IGZ1bmN0aW9uIENGRlBhcnNlcl9wYXJzZUZEU2VsZWN0KHBvcywgbGVuZ3RoKSB7XG4gICAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgdmFyIGZvcm1hdCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgIHZhciBmZFNlbGVjdCA9IFtdO1xuICAgICAgdmFyIGk7XG5cbiAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBpZCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgIGZkU2VsZWN0LnB1c2goaWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB2YXIgcmFuZ2VzQ291bnQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByYW5nZXNDb3VudDsgKytpKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3QgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgICAgaWYgKGkgPT09IDAgJiYgZmlyc3QgIT09IDApIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwicGFyc2VGRFNlbGVjdDogVGhlIGZpcnN0IHJhbmdlIG11c3QgaGF2ZSBhIGZpcnN0IEdJRCBvZiAwXCIgKyBcIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci5cIik7XG4gICAgICAgICAgICAgIGZpcnN0ID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZkSW5kZXggPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICB2YXIgbmV4dCA9IGJ5dGVzW3Bvc10gPDwgOCB8IGJ5dGVzW3BvcyArIDFdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gZmlyc3Q7IGogPCBuZXh0OyArK2opIHtcbiAgICAgICAgICAgICAgZmRTZWxlY3QucHVzaChmZEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwb3MgKz0gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgcGFyc2VGRFNlbGVjdDogVW5rbm93biBmb3JtYXQgXCIke2Zvcm1hdH1cIi5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZkU2VsZWN0Lmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcInBhcnNlRkRTZWxlY3Q6IEludmFsaWQgZm9udCBkYXRhLlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDRkZGRFNlbGVjdChmb3JtYXQsIGZkU2VsZWN0KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBDRkZQYXJzZXI7XG59KCk7XG5cbmV4cG9ydHMuQ0ZGUGFyc2VyID0gQ0ZGUGFyc2VyO1xuXG52YXIgQ0ZGID0gZnVuY3Rpb24gQ0ZGQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQ0ZGKCkge1xuICAgIHRoaXMuaGVhZGVyID0gbnVsbDtcbiAgICB0aGlzLm5hbWVzID0gW107XG4gICAgdGhpcy50b3BEaWN0ID0gbnVsbDtcbiAgICB0aGlzLnN0cmluZ3MgPSBuZXcgQ0ZGU3RyaW5ncygpO1xuICAgIHRoaXMuZ2xvYmFsU3VickluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmVuY29kaW5nID0gbnVsbDtcbiAgICB0aGlzLmNoYXJzZXQgPSBudWxsO1xuICAgIHRoaXMuY2hhclN0cmluZ3MgPSBudWxsO1xuICAgIHRoaXMuZmRBcnJheSA9IFtdO1xuICAgIHRoaXMuZmRTZWxlY3QgPSBudWxsO1xuICAgIHRoaXMuaXNDSURGb250ID0gZmFsc2U7XG4gIH1cblxuICBDRkYucHJvdG90eXBlID0ge1xuICAgIGR1cGxpY2F0ZUZpcnN0R2x5cGg6IGZ1bmN0aW9uIENGRl9kdXBsaWNhdGVGaXJzdEdseXBoKCkge1xuICAgICAgaWYgKHRoaXMuY2hhclN0cmluZ3MuY291bnQgPj0gNjU1MzUpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTm90IGVub3VnaCBzcGFjZSBpbiBjaGFyc3RyaW5ncyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBnbHlwaFplcm8gPSB0aGlzLmNoYXJTdHJpbmdzLmdldCgwKTtcbiAgICAgIHRoaXMuY2hhclN0cmluZ3MuYWRkKGdseXBoWmVybyk7XG5cbiAgICAgIGlmICh0aGlzLmlzQ0lERm9udCkge1xuICAgICAgICB0aGlzLmZkU2VsZWN0LmZkU2VsZWN0LnB1c2godGhpcy5mZFNlbGVjdC5mZFNlbGVjdFswXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYXNHbHlwaElkOiBmdW5jdGlvbiBDRkZfaGFzR2x5cGhJRChpZCkge1xuICAgICAgaWYgKGlkIDwgMCB8fCBpZCA+PSB0aGlzLmNoYXJTdHJpbmdzLmNvdW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGdseXBoID0gdGhpcy5jaGFyU3RyaW5ncy5nZXQoaWQpO1xuICAgICAgcmV0dXJuIGdseXBoLmxlbmd0aCA+IDA7XG4gICAgfVxuICB9O1xuICByZXR1cm4gQ0ZGO1xufSgpO1xuXG5leHBvcnRzLkNGRiA9IENGRjtcblxudmFyIENGRkhlYWRlciA9IGZ1bmN0aW9uIENGRkhlYWRlckNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIENGRkhlYWRlcihtYWpvciwgbWlub3IsIGhkclNpemUsIG9mZlNpemUpIHtcbiAgICB0aGlzLm1ham9yID0gbWFqb3I7XG4gICAgdGhpcy5taW5vciA9IG1pbm9yO1xuICAgIHRoaXMuaGRyU2l6ZSA9IGhkclNpemU7XG4gICAgdGhpcy5vZmZTaXplID0gb2ZmU2l6ZTtcbiAgfVxuXG4gIHJldHVybiBDRkZIZWFkZXI7XG59KCk7XG5cbmV4cG9ydHMuQ0ZGSGVhZGVyID0gQ0ZGSGVhZGVyO1xuXG52YXIgQ0ZGU3RyaW5ncyA9IGZ1bmN0aW9uIENGRlN0cmluZ3NDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBDRkZTdHJpbmdzKCkge1xuICAgIHRoaXMuc3RyaW5ncyA9IFtdO1xuICB9XG5cbiAgQ0ZGU3RyaW5ncy5wcm90b3R5cGUgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbiBDRkZTdHJpbmdzX2dldChpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gTlVNX1NUQU5EQVJEX0NGRl9TVFJJTkdTIC0gMSkge1xuICAgICAgICByZXR1cm4gQ0ZGU3RhbmRhcmRTdHJpbmdzW2luZGV4XTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4IC0gTlVNX1NUQU5EQVJEX0NGRl9TVFJJTkdTIDw9IHRoaXMuc3RyaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nc1tpbmRleCAtIE5VTV9TVEFOREFSRF9DRkZfU1RSSU5HU107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDRkZTdGFuZGFyZFN0cmluZ3NbMF07XG4gICAgfSxcbiAgICBnZXRTSUQ6IGZ1bmN0aW9uIENGRlN0cmluZ3NfZ2V0U0lEKHN0cikge1xuICAgICAgbGV0IGluZGV4ID0gQ0ZGU3RhbmRhcmRTdHJpbmdzLmluZGV4T2Yoc3RyKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG5cbiAgICAgIGluZGV4ID0gdGhpcy5zdHJpbmdzLmluZGV4T2Yoc3RyKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gaW5kZXggKyBOVU1fU1RBTkRBUkRfQ0ZGX1NUUklOR1M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAtMTtcbiAgICB9LFxuICAgIGFkZDogZnVuY3Rpb24gQ0ZGU3RyaW5nc19hZGQodmFsdWUpIHtcbiAgICAgIHRoaXMuc3RyaW5ncy5wdXNoKHZhbHVlKTtcbiAgICB9LFxuXG4gICAgZ2V0IGNvdW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGg7XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBDRkZTdHJpbmdzO1xufSgpO1xuXG5leHBvcnRzLkNGRlN0cmluZ3MgPSBDRkZTdHJpbmdzO1xuXG52YXIgQ0ZGSW5kZXggPSBmdW5jdGlvbiBDRkZJbmRleENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIENGRkluZGV4KCkge1xuICAgIHRoaXMub2JqZWN0cyA9IFtdO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIENGRkluZGV4LnByb3RvdHlwZSA9IHtcbiAgICBhZGQ6IGZ1bmN0aW9uIENGRkluZGV4X2FkZChkYXRhKSB7XG4gICAgICB0aGlzLmxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICAgIHRoaXMub2JqZWN0cy5wdXNoKGRhdGEpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBDRkZJbmRleF9zZXQoaW5kZXgsIGRhdGEpIHtcbiAgICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoIC0gdGhpcy5vYmplY3RzW2luZGV4XS5sZW5ndGg7XG4gICAgICB0aGlzLm9iamVjdHNbaW5kZXhdID0gZGF0YTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gQ0ZGSW5kZXhfZ2V0KGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5vYmplY3RzW2luZGV4XTtcbiAgICB9LFxuXG4gICAgZ2V0IGNvdW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMub2JqZWN0cy5sZW5ndGg7XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBDRkZJbmRleDtcbn0oKTtcblxuZXhwb3J0cy5DRkZJbmRleCA9IENGRkluZGV4O1xuXG52YXIgQ0ZGRGljdCA9IGZ1bmN0aW9uIENGRkRpY3RDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBDRkZEaWN0KHRhYmxlcywgc3RyaW5ncykge1xuICAgIHRoaXMua2V5VG9OYW1lTWFwID0gdGFibGVzLmtleVRvTmFtZU1hcDtcbiAgICB0aGlzLm5hbWVUb0tleU1hcCA9IHRhYmxlcy5uYW1lVG9LZXlNYXA7XG4gICAgdGhpcy5kZWZhdWx0cyA9IHRhYmxlcy5kZWZhdWx0cztcbiAgICB0aGlzLnR5cGVzID0gdGFibGVzLnR5cGVzO1xuICAgIHRoaXMub3Bjb2RlcyA9IHRhYmxlcy5vcGNvZGVzO1xuICAgIHRoaXMub3JkZXIgPSB0YWJsZXMub3JkZXI7XG4gICAgdGhpcy5zdHJpbmdzID0gc3RyaW5ncztcbiAgICB0aGlzLnZhbHVlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBDRkZEaWN0LnByb3RvdHlwZSA9IHtcbiAgICBzZXRCeUtleTogZnVuY3Rpb24gQ0ZGRGljdF9zZXRCeUtleShrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoIShrZXkgaW4gdGhpcy5rZXlUb05hbWVNYXApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuXG4gICAgICBpZiAodmFsdWVMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXNOYU4odmFsdWVbaV0pKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbnZhbGlkIENGRkRpY3QgdmFsdWU6IFwiJyArIHZhbHVlICsgJ1wiIGZvciBrZXkgXCInICsga2V5ICsgJ1wiLicpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB0eXBlID0gdGhpcy50eXBlc1trZXldO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJudW1cIiB8fCB0eXBlID09PSBcInNpZFwiIHx8IHR5cGUgPT09IFwib2Zmc2V0XCIpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBzZXRCeU5hbWU6IGZ1bmN0aW9uIENGRkRpY3Rfc2V0QnlOYW1lKG5hbWUsIHZhbHVlKSB7XG4gICAgICBpZiAoIShuYW1lIGluIHRoaXMubmFtZVRvS2V5TWFwKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgZGljdGlvbmFyeSBuYW1lIFwiJHtuYW1lfVwiYCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW25hbWVdXSA9IHZhbHVlO1xuICAgIH0sXG4gICAgaGFzTmFtZTogZnVuY3Rpb24gQ0ZGRGljdF9oYXNOYW1lKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hbWVUb0tleU1hcFtuYW1lXSBpbiB0aGlzLnZhbHVlcztcbiAgICB9LFxuICAgIGdldEJ5TmFtZTogZnVuY3Rpb24gQ0ZGRGljdF9nZXRCeU5hbWUobmFtZSkge1xuICAgICAgaWYgKCEobmFtZSBpbiB0aGlzLm5hbWVUb0tleU1hcCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAke25hbWV9XCJgKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGtleSA9IHRoaXMubmFtZVRvS2V5TWFwW25hbWVdO1xuXG4gICAgICBpZiAoIShrZXkgaW4gdGhpcy52YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRzW2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnZhbHVlc1trZXldO1xuICAgIH0sXG4gICAgcmVtb3ZlQnlOYW1lOiBmdW5jdGlvbiBDRkZEaWN0X3JlbW92ZUJ5TmFtZShuYW1lKSB7XG4gICAgICBkZWxldGUgdGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbbmFtZV1dO1xuICAgIH1cbiAgfTtcblxuICBDRkZEaWN0LmNyZWF0ZVRhYmxlcyA9IGZ1bmN0aW9uIENGRkRpY3RfY3JlYXRlVGFibGVzKGxheW91dCkge1xuICAgIHZhciB0YWJsZXMgPSB7XG4gICAgICBrZXlUb05hbWVNYXA6IHt9LFxuICAgICAgbmFtZVRvS2V5TWFwOiB7fSxcbiAgICAgIGRlZmF1bHRzOiB7fSxcbiAgICAgIHR5cGVzOiB7fSxcbiAgICAgIG9wY29kZXM6IHt9LFxuICAgICAgb3JkZXI6IFtdXG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGxheW91dC5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICB2YXIgZW50cnkgPSBsYXlvdXRbaV07XG4gICAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShlbnRyeVswXSkgPyAoZW50cnlbMF1bMF0gPDwgOCkgKyBlbnRyeVswXVsxXSA6IGVudHJ5WzBdO1xuICAgICAgdGFibGVzLmtleVRvTmFtZU1hcFtrZXldID0gZW50cnlbMV07XG4gICAgICB0YWJsZXMubmFtZVRvS2V5TWFwW2VudHJ5WzFdXSA9IGtleTtcbiAgICAgIHRhYmxlcy50eXBlc1trZXldID0gZW50cnlbMl07XG4gICAgICB0YWJsZXMuZGVmYXVsdHNba2V5XSA9IGVudHJ5WzNdO1xuICAgICAgdGFibGVzLm9wY29kZXNba2V5XSA9IEFycmF5LmlzQXJyYXkoZW50cnlbMF0pID8gZW50cnlbMF0gOiBbZW50cnlbMF1dO1xuICAgICAgdGFibGVzLm9yZGVyLnB1c2goa2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVzO1xuICB9O1xuXG4gIHJldHVybiBDRkZEaWN0O1xufSgpO1xuXG52YXIgQ0ZGVG9wRGljdCA9IGZ1bmN0aW9uIENGRlRvcERpY3RDbG9zdXJlKCkge1xuICB2YXIgbGF5b3V0ID0gW1tbMTIsIDMwXSwgXCJST1NcIiwgW1wic2lkXCIsIFwic2lkXCIsIFwibnVtXCJdLCBudWxsXSwgW1sxMiwgMjBdLCBcIlN5bnRoZXRpY0Jhc2VcIiwgXCJudW1cIiwgbnVsbF0sIFswLCBcInZlcnNpb25cIiwgXCJzaWRcIiwgbnVsbF0sIFsxLCBcIk5vdGljZVwiLCBcInNpZFwiLCBudWxsXSwgW1sxMiwgMF0sIFwiQ29weXJpZ2h0XCIsIFwic2lkXCIsIG51bGxdLCBbMiwgXCJGdWxsTmFtZVwiLCBcInNpZFwiLCBudWxsXSwgWzMsIFwiRmFtaWx5TmFtZVwiLCBcInNpZFwiLCBudWxsXSwgWzQsIFwiV2VpZ2h0XCIsIFwic2lkXCIsIG51bGxdLCBbWzEyLCAxXSwgXCJpc0ZpeGVkUGl0Y2hcIiwgXCJudW1cIiwgMF0sIFtbMTIsIDJdLCBcIkl0YWxpY0FuZ2xlXCIsIFwibnVtXCIsIDBdLCBbWzEyLCAzXSwgXCJVbmRlcmxpbmVQb3NpdGlvblwiLCBcIm51bVwiLCAtMTAwXSwgW1sxMiwgNF0sIFwiVW5kZXJsaW5lVGhpY2tuZXNzXCIsIFwibnVtXCIsIDUwXSwgW1sxMiwgNV0sIFwiUGFpbnRUeXBlXCIsIFwibnVtXCIsIDBdLCBbWzEyLCA2XSwgXCJDaGFyc3RyaW5nVHlwZVwiLCBcIm51bVwiLCAyXSwgW1sxMiwgN10sIFwiRm9udE1hdHJpeFwiLCBbXCJudW1cIiwgXCJudW1cIiwgXCJudW1cIiwgXCJudW1cIiwgXCJudW1cIiwgXCJudW1cIl0sIFswLjAwMSwgMCwgMCwgMC4wMDEsIDAsIDBdXSwgWzEzLCBcIlVuaXF1ZUlEXCIsIFwibnVtXCIsIG51bGxdLCBbNSwgXCJGb250QkJveFwiLCBbXCJudW1cIiwgXCJudW1cIiwgXCJudW1cIiwgXCJudW1cIl0sIFswLCAwLCAwLCAwXV0sIFtbMTIsIDhdLCBcIlN0cm9rZVdpZHRoXCIsIFwibnVtXCIsIDBdLCBbMTQsIFwiWFVJRFwiLCBcImFycmF5XCIsIG51bGxdLCBbMTUsIFwiY2hhcnNldFwiLCBcIm9mZnNldFwiLCAwXSwgWzE2LCBcIkVuY29kaW5nXCIsIFwib2Zmc2V0XCIsIDBdLCBbMTcsIFwiQ2hhclN0cmluZ3NcIiwgXCJvZmZzZXRcIiwgMF0sIFsxOCwgXCJQcml2YXRlXCIsIFtcIm9mZnNldFwiLCBcIm9mZnNldFwiXSwgbnVsbF0sIFtbMTIsIDIxXSwgXCJQb3N0U2NyaXB0XCIsIFwic2lkXCIsIG51bGxdLCBbWzEyLCAyMl0sIFwiQmFzZUZvbnROYW1lXCIsIFwic2lkXCIsIG51bGxdLCBbWzEyLCAyM10sIFwiQmFzZUZvbnRCbGVuZFwiLCBcImRlbHRhXCIsIG51bGxdLCBbWzEyLCAzMV0sIFwiQ0lERm9udFZlcnNpb25cIiwgXCJudW1cIiwgMF0sIFtbMTIsIDMyXSwgXCJDSURGb250UmV2aXNpb25cIiwgXCJudW1cIiwgMF0sIFtbMTIsIDMzXSwgXCJDSURGb250VHlwZVwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMzRdLCBcIkNJRENvdW50XCIsIFwibnVtXCIsIDg3MjBdLCBbWzEyLCAzNV0sIFwiVUlEQmFzZVwiLCBcIm51bVwiLCBudWxsXSwgW1sxMiwgMzddLCBcIkZEU2VsZWN0XCIsIFwib2Zmc2V0XCIsIG51bGxdLCBbWzEyLCAzNl0sIFwiRkRBcnJheVwiLCBcIm9mZnNldFwiLCBudWxsXSwgW1sxMiwgMzhdLCBcIkZvbnROYW1lXCIsIFwic2lkXCIsIG51bGxdXTtcbiAgdmFyIHRhYmxlcyA9IG51bGw7XG5cbiAgZnVuY3Rpb24gQ0ZGVG9wRGljdChzdHJpbmdzKSB7XG4gICAgaWYgKHRhYmxlcyA9PT0gbnVsbCkge1xuICAgICAgdGFibGVzID0gQ0ZGRGljdC5jcmVhdGVUYWJsZXMobGF5b3V0KTtcbiAgICB9XG5cbiAgICBDRkZEaWN0LmNhbGwodGhpcywgdGFibGVzLCBzdHJpbmdzKTtcbiAgICB0aGlzLnByaXZhdGVEaWN0ID0gbnVsbDtcbiAgfVxuXG4gIENGRlRvcERpY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDRkZEaWN0LnByb3RvdHlwZSk7XG4gIHJldHVybiBDRkZUb3BEaWN0O1xufSgpO1xuXG5leHBvcnRzLkNGRlRvcERpY3QgPSBDRkZUb3BEaWN0O1xuXG52YXIgQ0ZGUHJpdmF0ZURpY3QgPSBmdW5jdGlvbiBDRkZQcml2YXRlRGljdENsb3N1cmUoKSB7XG4gIHZhciBsYXlvdXQgPSBbWzYsIFwiQmx1ZVZhbHVlc1wiLCBcImRlbHRhXCIsIG51bGxdLCBbNywgXCJPdGhlckJsdWVzXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFs4LCBcIkZhbWlseUJsdWVzXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFs5LCBcIkZhbWlseU90aGVyQmx1ZXNcIiwgXCJkZWx0YVwiLCBudWxsXSwgW1sxMiwgOV0sIFwiQmx1ZVNjYWxlXCIsIFwibnVtXCIsIDAuMDM5NjI1XSwgW1sxMiwgMTBdLCBcIkJsdWVTaGlmdFwiLCBcIm51bVwiLCA3XSwgW1sxMiwgMTFdLCBcIkJsdWVGdXp6XCIsIFwibnVtXCIsIDFdLCBbMTAsIFwiU3RkSFdcIiwgXCJudW1cIiwgbnVsbF0sIFsxMSwgXCJTdGRWV1wiLCBcIm51bVwiLCBudWxsXSwgW1sxMiwgMTJdLCBcIlN0ZW1TbmFwSFwiLCBcImRlbHRhXCIsIG51bGxdLCBbWzEyLCAxM10sIFwiU3RlbVNuYXBWXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFtbMTIsIDE0XSwgXCJGb3JjZUJvbGRcIiwgXCJudW1cIiwgMF0sIFtbMTIsIDE3XSwgXCJMYW5ndWFnZUdyb3VwXCIsIFwibnVtXCIsIDBdLCBbWzEyLCAxOF0sIFwiRXhwYW5zaW9uRmFjdG9yXCIsIFwibnVtXCIsIDAuMDZdLCBbWzEyLCAxOV0sIFwiaW5pdGlhbFJhbmRvbVNlZWRcIiwgXCJudW1cIiwgMF0sIFsyMCwgXCJkZWZhdWx0V2lkdGhYXCIsIFwibnVtXCIsIDBdLCBbMjEsIFwibm9taW5hbFdpZHRoWFwiLCBcIm51bVwiLCAwXSwgWzE5LCBcIlN1YnJzXCIsIFwib2Zmc2V0XCIsIG51bGxdXTtcbiAgdmFyIHRhYmxlcyA9IG51bGw7XG5cbiAgZnVuY3Rpb24gQ0ZGUHJpdmF0ZURpY3Qoc3RyaW5ncykge1xuICAgIGlmICh0YWJsZXMgPT09IG51bGwpIHtcbiAgICAgIHRhYmxlcyA9IENGRkRpY3QuY3JlYXRlVGFibGVzKGxheW91dCk7XG4gICAgfVxuXG4gICAgQ0ZGRGljdC5jYWxsKHRoaXMsIHRhYmxlcywgc3RyaW5ncyk7XG4gICAgdGhpcy5zdWJyc0luZGV4ID0gbnVsbDtcbiAgfVxuXG4gIENGRlByaXZhdGVEaWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ0ZGRGljdC5wcm90b3R5cGUpO1xuICByZXR1cm4gQ0ZGUHJpdmF0ZURpY3Q7XG59KCk7XG5cbmV4cG9ydHMuQ0ZGUHJpdmF0ZURpY3QgPSBDRkZQcml2YXRlRGljdDtcbnZhciBDRkZDaGFyc2V0UHJlZGVmaW5lZFR5cGVzID0ge1xuICBJU09fQURPQkU6IDAsXG4gIEVYUEVSVDogMSxcbiAgRVhQRVJUX1NVQlNFVDogMlxufTtcblxudmFyIENGRkNoYXJzZXQgPSBmdW5jdGlvbiBDRkZDaGFyc2V0Q2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQ0ZGQ2hhcnNldChwcmVkZWZpbmVkLCBmb3JtYXQsIGNoYXJzZXQsIHJhdykge1xuICAgIHRoaXMucHJlZGVmaW5lZCA9IHByZWRlZmluZWQ7XG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgdGhpcy5jaGFyc2V0ID0gY2hhcnNldDtcbiAgICB0aGlzLnJhdyA9IHJhdztcbiAgfVxuXG4gIHJldHVybiBDRkZDaGFyc2V0O1xufSgpO1xuXG5leHBvcnRzLkNGRkNoYXJzZXQgPSBDRkZDaGFyc2V0O1xuXG52YXIgQ0ZGRW5jb2RpbmcgPSBmdW5jdGlvbiBDRkZFbmNvZGluZ0Nsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIENGRkVuY29kaW5nKHByZWRlZmluZWQsIGZvcm1hdCwgZW5jb2RpbmcsIHJhdykge1xuICAgIHRoaXMucHJlZGVmaW5lZCA9IHByZWRlZmluZWQ7XG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgIHRoaXMucmF3ID0gcmF3O1xuICB9XG5cbiAgcmV0dXJuIENGRkVuY29kaW5nO1xufSgpO1xuXG52YXIgQ0ZGRkRTZWxlY3QgPSBmdW5jdGlvbiBDRkZGRFNlbGVjdENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIENGRkZEU2VsZWN0KGZvcm1hdCwgZmRTZWxlY3QpIHtcbiAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICB0aGlzLmZkU2VsZWN0ID0gZmRTZWxlY3Q7XG4gIH1cblxuICBDRkZGRFNlbGVjdC5wcm90b3R5cGUgPSB7XG4gICAgZ2V0RkRJbmRleDogZnVuY3Rpb24gQ0ZGRkRTZWxlY3RfZ2V0KGdseXBoSW5kZXgpIHtcbiAgICAgIGlmIChnbHlwaEluZGV4IDwgMCB8fCBnbHlwaEluZGV4ID49IHRoaXMuZmRTZWxlY3QubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZmRTZWxlY3RbZ2x5cGhJbmRleF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gQ0ZGRkRTZWxlY3Q7XG59KCk7XG5cbmV4cG9ydHMuQ0ZGRkRTZWxlY3QgPSBDRkZGRFNlbGVjdDtcblxudmFyIENGRk9mZnNldFRyYWNrZXIgPSBmdW5jdGlvbiBDRkZPZmZzZXRUcmFja2VyQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQ0ZGT2Zmc2V0VHJhY2tlcigpIHtcbiAgICB0aGlzLm9mZnNldHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgQ0ZGT2Zmc2V0VHJhY2tlci5wcm90b3R5cGUgPSB7XG4gICAgaXNUcmFja2luZzogZnVuY3Rpb24gQ0ZGT2Zmc2V0VHJhY2tlcl9pc1RyYWNraW5nKGtleSkge1xuICAgICAgcmV0dXJuIGtleSBpbiB0aGlzLm9mZnNldHM7XG4gICAgfSxcbiAgICB0cmFjazogZnVuY3Rpb24gQ0ZGT2Zmc2V0VHJhY2tlcl90cmFjayhrZXksIGxvY2F0aW9uKSB7XG4gICAgICBpZiAoa2V5IGluIHRoaXMub2Zmc2V0cykge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtrZXl9YCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub2Zmc2V0c1trZXldID0gbG9jYXRpb247XG4gICAgfSxcbiAgICBvZmZzZXQ6IGZ1bmN0aW9uIENGRk9mZnNldFRyYWNrZXJfb2Zmc2V0KHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5vZmZzZXRzKSB7XG4gICAgICAgIHRoaXMub2Zmc2V0c1trZXldICs9IHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0RW50cnlMb2NhdGlvbjogZnVuY3Rpb24gQ0ZGT2Zmc2V0VHJhY2tlcl9zZXRFbnRyeUxvY2F0aW9uKGtleSwgdmFsdWVzLCBvdXRwdXQpIHtcbiAgICAgIGlmICghKGtleSBpbiB0aGlzLm9mZnNldHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgTm90IHRyYWNraW5nIGxvY2F0aW9uIG9mICR7a2V5fWApO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGF0YSA9IG91dHB1dC5kYXRhO1xuICAgICAgdmFyIGRhdGFPZmZzZXQgPSB0aGlzLm9mZnNldHNba2V5XTtcbiAgICAgIHZhciBzaXplID0gNTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdmFsdWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgdmFyIG9mZnNldDAgPSBpICogc2l6ZSArIGRhdGFPZmZzZXQ7XG4gICAgICAgIHZhciBvZmZzZXQxID0gb2Zmc2V0MCArIDE7XG4gICAgICAgIHZhciBvZmZzZXQyID0gb2Zmc2V0MCArIDI7XG4gICAgICAgIHZhciBvZmZzZXQzID0gb2Zmc2V0MCArIDM7XG4gICAgICAgIHZhciBvZmZzZXQ0ID0gb2Zmc2V0MCArIDQ7XG5cbiAgICAgICAgaWYgKGRhdGFbb2Zmc2V0MF0gIT09IDB4MWQgfHwgZGF0YVtvZmZzZXQxXSAhPT0gMCB8fCBkYXRhW29mZnNldDJdICE9PSAwIHx8IGRhdGFbb2Zmc2V0M10gIT09IDAgfHwgZGF0YVtvZmZzZXQ0XSAhPT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIndyaXRpbmcgdG8gYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGVtcHR5XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICBkYXRhW29mZnNldDBdID0gMHgxZDtcbiAgICAgICAgZGF0YVtvZmZzZXQxXSA9IHZhbHVlID4+IDI0ICYgMHhmZjtcbiAgICAgICAgZGF0YVtvZmZzZXQyXSA9IHZhbHVlID4+IDE2ICYgMHhmZjtcbiAgICAgICAgZGF0YVtvZmZzZXQzXSA9IHZhbHVlID4+IDggJiAweGZmO1xuICAgICAgICBkYXRhW29mZnNldDRdID0gdmFsdWUgJiAweGZmO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIENGRk9mZnNldFRyYWNrZXI7XG59KCk7XG5cbnZhciBDRkZDb21waWxlciA9IGZ1bmN0aW9uIENGRkNvbXBpbGVyQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQ0ZGQ29tcGlsZXIoY2ZmKSB7XG4gICAgdGhpcy5jZmYgPSBjZmY7XG4gIH1cblxuICBDRkZDb21waWxlci5wcm90b3R5cGUgPSB7XG4gICAgY29tcGlsZTogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZSgpIHtcbiAgICAgIHZhciBjZmYgPSB0aGlzLmNmZjtcbiAgICAgIHZhciBvdXRwdXQgPSB7XG4gICAgICAgIGRhdGE6IFtdLFxuICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgIGFkZDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfYWRkKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KGRhdGEpO1xuICAgICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBoZWFkZXIgPSB0aGlzLmNvbXBpbGVIZWFkZXIoY2ZmLmhlYWRlcik7XG4gICAgICBvdXRwdXQuYWRkKGhlYWRlcik7XG4gICAgICB2YXIgbmFtZUluZGV4ID0gdGhpcy5jb21waWxlTmFtZUluZGV4KGNmZi5uYW1lcyk7XG4gICAgICBvdXRwdXQuYWRkKG5hbWVJbmRleCk7XG5cbiAgICAgIGlmIChjZmYuaXNDSURGb250KSB7XG4gICAgICAgIGlmIChjZmYudG9wRGljdC5oYXNOYW1lKFwiRm9udE1hdHJpeFwiKSkge1xuICAgICAgICAgIHZhciBiYXNlID0gY2ZmLnRvcERpY3QuZ2V0QnlOYW1lKFwiRm9udE1hdHJpeFwiKTtcbiAgICAgICAgICBjZmYudG9wRGljdC5yZW1vdmVCeU5hbWUoXCJGb250TWF0cml4XCIpO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2ZmLmZkQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgdmFyIHN1YkRpY3QgPSBjZmYuZmRBcnJheVtpXTtcbiAgICAgICAgICAgIHZhciBtYXRyaXggPSBiYXNlLnNsaWNlKDApO1xuXG4gICAgICAgICAgICBpZiAoc3ViRGljdC5oYXNOYW1lKFwiRm9udE1hdHJpeFwiKSkge1xuICAgICAgICAgICAgICBtYXRyaXggPSBfdXRpbC5VdGlsLnRyYW5zZm9ybShtYXRyaXgsIHN1YkRpY3QuZ2V0QnlOYW1lKFwiRm9udE1hdHJpeFwiKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN1YkRpY3Quc2V0QnlOYW1lKFwiRm9udE1hdHJpeFwiLCBtYXRyaXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjZmYudG9wRGljdC5zZXRCeU5hbWUoXCJjaGFyc2V0XCIsIDApO1xuICAgICAgdmFyIGNvbXBpbGVkID0gdGhpcy5jb21waWxlVG9wRGljdHMoW2NmZi50b3BEaWN0XSwgb3V0cHV0Lmxlbmd0aCwgY2ZmLmlzQ0lERm9udCk7XG4gICAgICBvdXRwdXQuYWRkKGNvbXBpbGVkLm91dHB1dCk7XG4gICAgICB2YXIgdG9wRGljdFRyYWNrZXIgPSBjb21waWxlZC50cmFja2Vyc1swXTtcbiAgICAgIHZhciBzdHJpbmdJbmRleCA9IHRoaXMuY29tcGlsZVN0cmluZ0luZGV4KGNmZi5zdHJpbmdzLnN0cmluZ3MpO1xuICAgICAgb3V0cHV0LmFkZChzdHJpbmdJbmRleCk7XG4gICAgICB2YXIgZ2xvYmFsU3VickluZGV4ID0gdGhpcy5jb21waWxlSW5kZXgoY2ZmLmdsb2JhbFN1YnJJbmRleCk7XG4gICAgICBvdXRwdXQuYWRkKGdsb2JhbFN1YnJJbmRleCk7XG5cbiAgICAgIGlmIChjZmYuZW5jb2RpbmcgJiYgY2ZmLnRvcERpY3QuaGFzTmFtZShcIkVuY29kaW5nXCIpKSB7XG4gICAgICAgIGlmIChjZmYuZW5jb2RpbmcucHJlZGVmaW5lZCkge1xuICAgICAgICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJFbmNvZGluZ1wiLCBbY2ZmLmVuY29kaW5nLmZvcm1hdF0sIG91dHB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGVuY29kaW5nID0gdGhpcy5jb21waWxlRW5jb2RpbmcoY2ZmLmVuY29kaW5nKTtcbiAgICAgICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiRW5jb2RpbmdcIiwgW291dHB1dC5sZW5ndGhdLCBvdXRwdXQpO1xuICAgICAgICAgIG91dHB1dC5hZGQoZW5jb2RpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGFyc2V0ID0gdGhpcy5jb21waWxlQ2hhcnNldChjZmYuY2hhcnNldCwgY2ZmLmNoYXJTdHJpbmdzLmNvdW50LCBjZmYuc3RyaW5ncywgY2ZmLmlzQ0lERm9udCk7XG4gICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiY2hhcnNldFwiLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICBvdXRwdXQuYWRkKGNoYXJzZXQpO1xuICAgICAgdmFyIGNoYXJTdHJpbmdzID0gdGhpcy5jb21waWxlQ2hhclN0cmluZ3MoY2ZmLmNoYXJTdHJpbmdzKTtcbiAgICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJDaGFyU3RyaW5nc1wiLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICBvdXRwdXQuYWRkKGNoYXJTdHJpbmdzKTtcblxuICAgICAgaWYgKGNmZi5pc0NJREZvbnQpIHtcbiAgICAgICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbihcIkZEU2VsZWN0XCIsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgICAgdmFyIGZkU2VsZWN0ID0gdGhpcy5jb21waWxlRkRTZWxlY3QoY2ZmLmZkU2VsZWN0KTtcbiAgICAgICAgb3V0cHV0LmFkZChmZFNlbGVjdCk7XG4gICAgICAgIGNvbXBpbGVkID0gdGhpcy5jb21waWxlVG9wRGljdHMoY2ZmLmZkQXJyYXksIG91dHB1dC5sZW5ndGgsIHRydWUpO1xuICAgICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiRkRBcnJheVwiLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICAgIG91dHB1dC5hZGQoY29tcGlsZWQub3V0cHV0KTtcbiAgICAgICAgdmFyIGZvbnREaWN0VHJhY2tlcnMgPSBjb21waWxlZC50cmFja2VycztcbiAgICAgICAgdGhpcy5jb21waWxlUHJpdmF0ZURpY3RzKGNmZi5mZEFycmF5LCBmb250RGljdFRyYWNrZXJzLCBvdXRwdXQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoW2NmZi50b3BEaWN0XSwgW3RvcERpY3RUcmFja2VyXSwgb3V0cHV0KTtcbiAgICAgIG91dHB1dC5hZGQoWzBdKTtcbiAgICAgIHJldHVybiBvdXRwdXQuZGF0YTtcbiAgICB9LFxuICAgIGVuY29kZU51bWJlcjogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfZW5jb2RlTnVtYmVyKHZhbHVlKSB7XG4gICAgICBpZiAocGFyc2VGbG9hdCh2YWx1ZSkgPT09IHBhcnNlSW50KHZhbHVlLCAxMCkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGVJbnRlZ2VyKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlRmxvYXQodmFsdWUpO1xuICAgIH0sXG4gICAgZW5jb2RlRmxvYXQ6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2VuY29kZUZsb2F0KG51bSkge1xuICAgICAgdmFyIHZhbHVlID0gbnVtLnRvU3RyaW5nKCk7XG4gICAgICB2YXIgbSA9IC9cXC4oXFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxcZHswLDJ9KD86ZSguKyl8JCkvLmV4ZWModmFsdWUpO1xuXG4gICAgICBpZiAobSkge1xuICAgICAgICB2YXIgZXBzaWxvbiA9IHBhcnNlRmxvYXQoXCIxZVwiICsgKChtWzJdID8gK21bMl0gOiAwKSArIG1bMV0ubGVuZ3RoKSk7XG4gICAgICAgIHZhbHVlID0gKE1hdGgucm91bmQobnVtICogZXBzaWxvbikgLyBlcHNpbG9uKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmliYmxlcyA9IFwiXCI7XG4gICAgICB2YXIgaSwgaWk7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gdmFsdWUubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICB2YXIgYSA9IHZhbHVlW2ldO1xuXG4gICAgICAgIGlmIChhID09PSBcImVcIikge1xuICAgICAgICAgIG5pYmJsZXMgKz0gdmFsdWVbKytpXSA9PT0gXCItXCIgPyBcImNcIiA6IFwiYlwiO1xuICAgICAgICB9IGVsc2UgaWYgKGEgPT09IFwiLlwiKSB7XG4gICAgICAgICAgbmliYmxlcyArPSBcImFcIjtcbiAgICAgICAgfSBlbHNlIGlmIChhID09PSBcIi1cIikge1xuICAgICAgICAgIG5pYmJsZXMgKz0gXCJlXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmliYmxlcyArPSBhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5pYmJsZXMgKz0gbmliYmxlcy5sZW5ndGggJiAxID8gXCJmXCIgOiBcImZmXCI7XG4gICAgICB2YXIgb3V0ID0gWzMwXTtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBuaWJibGVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgb3V0LnB1c2gocGFyc2VJbnQobmliYmxlcy5zdWJzdHJpbmcoaSwgaSArIDIpLCAxNikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG4gICAgZW5jb2RlSW50ZWdlcjogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfZW5jb2RlSW50ZWdlcih2YWx1ZSkge1xuICAgICAgdmFyIGNvZGU7XG5cbiAgICAgIGlmICh2YWx1ZSA+PSAtMTA3ICYmIHZhbHVlIDw9IDEwNykge1xuICAgICAgICBjb2RlID0gW3ZhbHVlICsgMTM5XTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMTA4ICYmIHZhbHVlIDw9IDExMzEpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSAtIDEwODtcbiAgICAgICAgY29kZSA9IFsodmFsdWUgPj4gOCkgKyAyNDcsIHZhbHVlICYgMHhmZl07XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID49IC0xMTMxICYmIHZhbHVlIDw9IC0xMDgpIHtcbiAgICAgICAgdmFsdWUgPSAtdmFsdWUgLSAxMDg7XG4gICAgICAgIGNvZGUgPSBbKHZhbHVlID4+IDgpICsgMjUxLCB2YWx1ZSAmIDB4ZmZdO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAtMzI3NjggJiYgdmFsdWUgPD0gMzI3NjcpIHtcbiAgICAgICAgY29kZSA9IFsweDFjLCB2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvZGUgPSBbMHgxZCwgdmFsdWUgPj4gMjQgJiAweGZmLCB2YWx1ZSA+PiAxNiAmIDB4ZmYsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmZdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29kZTtcbiAgICB9LFxuICAgIGNvbXBpbGVIZWFkZXI6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVIZWFkZXIoaGVhZGVyKSB7XG4gICAgICByZXR1cm4gW2hlYWRlci5tYWpvciwgaGVhZGVyLm1pbm9yLCBoZWFkZXIuaGRyU2l6ZSwgaGVhZGVyLm9mZlNpemVdO1xuICAgIH0sXG4gICAgY29tcGlsZU5hbWVJbmRleDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZU5hbWVJbmRleChuYW1lcykge1xuICAgICAgdmFyIG5hbWVJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZXNbaV07XG4gICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1pbihuYW1lLmxlbmd0aCwgMTI3KTtcbiAgICAgICAgdmFyIHNhbml0aXplZE5hbWUgPSBuZXcgQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGNoYXIgPSBuYW1lW2pdO1xuXG4gICAgICAgICAgaWYgKGNoYXIgPCBcIiFcIiB8fCBjaGFyID4gXCJ+XCIgfHwgY2hhciA9PT0gXCJbXCIgfHwgY2hhciA9PT0gXCJdXCIgfHwgY2hhciA9PT0gXCIoXCIgfHwgY2hhciA9PT0gXCIpXCIgfHwgY2hhciA9PT0gXCJ7XCIgfHwgY2hhciA9PT0gXCJ9XCIgfHwgY2hhciA9PT0gXCI8XCIgfHwgY2hhciA9PT0gXCI+XCIgfHwgY2hhciA9PT0gXCIvXCIgfHwgY2hhciA9PT0gXCIlXCIpIHtcbiAgICAgICAgICAgIGNoYXIgPSBcIl9cIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzYW5pdGl6ZWROYW1lW2pdID0gY2hhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNhbml0aXplZE5hbWUgPSBzYW5pdGl6ZWROYW1lLmpvaW4oXCJcIik7XG5cbiAgICAgICAgaWYgKHNhbml0aXplZE5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgICBzYW5pdGl6ZWROYW1lID0gXCJCYWRfRm9udF9OYW1lXCI7XG4gICAgICAgIH1cblxuICAgICAgICBuYW1lSW5kZXguYWRkKCgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShzYW5pdGl6ZWROYW1lKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVJbmRleChuYW1lSW5kZXgpO1xuICAgIH0sXG4gICAgY29tcGlsZVRvcERpY3RzOiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlVG9wRGljdHMoZGljdHMsIGxlbmd0aCwgcmVtb3ZlQ2lkS2V5cykge1xuICAgICAgdmFyIGZvbnREaWN0VHJhY2tlcnMgPSBbXTtcbiAgICAgIHZhciBmZEFycmF5SW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGljdHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICB2YXIgZm9udERpY3QgPSBkaWN0c1tpXTtcblxuICAgICAgICBpZiAocmVtb3ZlQ2lkS2V5cykge1xuICAgICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZShcIkNJREZvbnRWZXJzaW9uXCIpO1xuICAgICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZShcIkNJREZvbnRSZXZpc2lvblwiKTtcbiAgICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoXCJDSURGb250VHlwZVwiKTtcbiAgICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoXCJDSURDb3VudFwiKTtcbiAgICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoXCJVSURCYXNlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZvbnREaWN0VHJhY2tlciA9IG5ldyBDRkZPZmZzZXRUcmFja2VyKCk7XG4gICAgICAgIHZhciBmb250RGljdERhdGEgPSB0aGlzLmNvbXBpbGVEaWN0KGZvbnREaWN0LCBmb250RGljdFRyYWNrZXIpO1xuICAgICAgICBmb250RGljdFRyYWNrZXJzLnB1c2goZm9udERpY3RUcmFja2VyKTtcbiAgICAgICAgZmRBcnJheUluZGV4LmFkZChmb250RGljdERhdGEpO1xuICAgICAgICBmb250RGljdFRyYWNrZXIub2Zmc2V0KGxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGZkQXJyYXlJbmRleCA9IHRoaXMuY29tcGlsZUluZGV4KGZkQXJyYXlJbmRleCwgZm9udERpY3RUcmFja2Vycyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0cmFja2VyczogZm9udERpY3RUcmFja2VycyxcbiAgICAgICAgb3V0cHV0OiBmZEFycmF5SW5kZXhcbiAgICAgIH07XG4gICAgfSxcbiAgICBjb21waWxlUHJpdmF0ZURpY3RzOiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlUHJpdmF0ZURpY3RzKGRpY3RzLCB0cmFja2Vycywgb3V0cHV0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkaWN0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHZhciBmb250RGljdCA9IGRpY3RzW2ldO1xuICAgICAgICB2YXIgcHJpdmF0ZURpY3QgPSBmb250RGljdC5wcml2YXRlRGljdDtcblxuICAgICAgICBpZiAoIXByaXZhdGVEaWN0IHx8ICFmb250RGljdC5oYXNOYW1lKFwiUHJpdmF0ZVwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByaXZhdGVEaWN0VHJhY2tlciA9IG5ldyBDRkZPZmZzZXRUcmFja2VyKCk7XG4gICAgICAgIHZhciBwcml2YXRlRGljdERhdGEgPSB0aGlzLmNvbXBpbGVEaWN0KHByaXZhdGVEaWN0LCBwcml2YXRlRGljdFRyYWNrZXIpO1xuICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcbiAgICAgICAgcHJpdmF0ZURpY3RUcmFja2VyLm9mZnNldChvdXRwdXRMZW5ndGgpO1xuXG4gICAgICAgIGlmICghcHJpdmF0ZURpY3REYXRhLmxlbmd0aCkge1xuICAgICAgICAgIG91dHB1dExlbmd0aCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0cmFja2Vyc1tpXS5zZXRFbnRyeUxvY2F0aW9uKFwiUHJpdmF0ZVwiLCBbcHJpdmF0ZURpY3REYXRhLmxlbmd0aCwgb3V0cHV0TGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgICAgb3V0cHV0LmFkZChwcml2YXRlRGljdERhdGEpO1xuXG4gICAgICAgIGlmIChwcml2YXRlRGljdC5zdWJyc0luZGV4ICYmIHByaXZhdGVEaWN0Lmhhc05hbWUoXCJTdWJyc1wiKSkge1xuICAgICAgICAgIHZhciBzdWJycyA9IHRoaXMuY29tcGlsZUluZGV4KHByaXZhdGVEaWN0LnN1YnJzSW5kZXgpO1xuICAgICAgICAgIHByaXZhdGVEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiU3VicnNcIiwgW3ByaXZhdGVEaWN0RGF0YS5sZW5ndGhdLCBvdXRwdXQpO1xuICAgICAgICAgIG91dHB1dC5hZGQoc3VicnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjb21waWxlRGljdDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZURpY3QoZGljdCwgb2Zmc2V0VHJhY2tlcikge1xuICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgdmFyIG9yZGVyID0gZGljdC5vcmRlcjtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb3JkZXJbaV07XG5cbiAgICAgICAgaWYgKCEoa2V5IGluIGRpY3QudmFsdWVzKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZhbHVlcyA9IGRpY3QudmFsdWVzW2tleV07XG4gICAgICAgIHZhciB0eXBlcyA9IGRpY3QudHlwZXNba2V5XTtcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodHlwZXMpKSB7XG4gICAgICAgICAgdHlwZXMgPSBbdHlwZXNdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICB2YWx1ZXMgPSBbdmFsdWVzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSB0eXBlcy5sZW5ndGg7IGogPCBqajsgKytqKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tqXTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbal07XG5cbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJudW1cIjpcbiAgICAgICAgICAgIGNhc2UgXCJzaWRcIjpcbiAgICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdCh0aGlzLmVuY29kZU51bWJlcih2YWx1ZSkpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIm9mZnNldFwiOlxuICAgICAgICAgICAgICB2YXIgbmFtZSA9IGRpY3Qua2V5VG9OYW1lTWFwW2tleV07XG5cbiAgICAgICAgICAgICAgaWYgKCFvZmZzZXRUcmFja2VyLmlzVHJhY2tpbmcobmFtZSkpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXRUcmFja2VyLnRyYWNrKG5hbWUsIG91dC5sZW5ndGgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdChbMHgxZCwgMCwgMCwgMCwgMF0pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICBjYXNlIFwiZGVsdGFcIjpcbiAgICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdCh0aGlzLmVuY29kZU51bWJlcih2YWx1ZSkpO1xuXG4gICAgICAgICAgICAgIGZvciAodmFyIGsgPSAxLCBrayA9IHZhbHVlcy5sZW5ndGg7IGsgPCBrazsgKytrKSB7XG4gICAgICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdCh0aGlzLmVuY29kZU51bWJlcih2YWx1ZXNba10pKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gZGF0YSB0eXBlIG9mICR7dHlwZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvdXQgPSBvdXQuY29uY2F0KGRpY3Qub3Bjb2Rlc1trZXldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuICAgIGNvbXBpbGVTdHJpbmdJbmRleDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZVN0cmluZ0luZGV4KHN0cmluZ3MpIHtcbiAgICAgIHZhciBzdHJpbmdJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzdHJpbmdzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgc3RyaW5nSW5kZXguYWRkKCgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShzdHJpbmdzW2ldKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVJbmRleChzdHJpbmdJbmRleCk7XG4gICAgfSxcbiAgICBjb21waWxlR2xvYmFsU3VickluZGV4OiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlR2xvYmFsU3VickluZGV4KCkge1xuICAgICAgdmFyIGdsb2JhbFN1YnJJbmRleCA9IHRoaXMuY2ZmLmdsb2JhbFN1YnJJbmRleDtcbiAgICAgIHRoaXMub3V0LndyaXRlQnl0ZUFycmF5KHRoaXMuY29tcGlsZUluZGV4KGdsb2JhbFN1YnJJbmRleCkpO1xuICAgIH0sXG4gICAgY29tcGlsZUNoYXJTdHJpbmdzOiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlQ2hhclN0cmluZ3MoY2hhclN0cmluZ3MpIHtcbiAgICAgIHZhciBjaGFyU3RyaW5nc0luZGV4ID0gbmV3IENGRkluZGV4KCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhclN0cmluZ3MuY291bnQ7IGkrKykge1xuICAgICAgICB2YXIgZ2x5cGggPSBjaGFyU3RyaW5ncy5nZXQoaSk7XG5cbiAgICAgICAgaWYgKGdseXBoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKG5ldyBVaW50OEFycmF5KFsweDhiLCAweDBlXSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhclN0cmluZ3NJbmRleC5hZGQoZ2x5cGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21waWxlSW5kZXgoY2hhclN0cmluZ3NJbmRleCk7XG4gICAgfSxcbiAgICBjb21waWxlQ2hhcnNldDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUNoYXJzZXQoY2hhcnNldCwgbnVtR2x5cGhzLCBzdHJpbmdzLCBpc0NJREZvbnQpIHtcbiAgICAgIGxldCBvdXQ7XG4gICAgICBjb25zdCBudW1HbHlwaHNMZXNzTm90RGVmID0gbnVtR2x5cGhzIC0gMTtcblxuICAgICAgaWYgKGlzQ0lERm9udCkge1xuICAgICAgICBvdXQgPSBuZXcgVWludDhBcnJheShbMiwgMCwgMCwgbnVtR2x5cGhzTGVzc05vdERlZiA+PiA4ICYgMHhmZiwgbnVtR2x5cGhzTGVzc05vdERlZiAmIDB4ZmZdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IDEgKyBudW1HbHlwaHNMZXNzTm90RGVmICogMjtcbiAgICAgICAgb3V0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICAgICAgb3V0WzBdID0gMDtcbiAgICAgICAgbGV0IGNoYXJzZXRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IG51bUNoYXJzZXRzID0gY2hhcnNldC5jaGFyc2V0Lmxlbmd0aDtcbiAgICAgICAgbGV0IHdhcm5lZCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgb3V0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgbGV0IHNpZCA9IDA7XG5cbiAgICAgICAgICBpZiAoY2hhcnNldEluZGV4IDwgbnVtQ2hhcnNldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBjaGFyc2V0LmNoYXJzZXRbY2hhcnNldEluZGV4KytdO1xuICAgICAgICAgICAgc2lkID0gc3RyaW5ncy5nZXRTSUQobmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChzaWQgPT09IC0xKSB7XG4gICAgICAgICAgICAgIHNpZCA9IDA7XG5cbiAgICAgICAgICAgICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgICAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgQ291bGRuJ3QgZmluZCAke25hbWV9IGluIENGRiBzdHJpbmdzYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvdXRbaV0gPSBzaWQgPj4gOCAmIDB4ZmY7XG4gICAgICAgICAgb3V0W2kgKyAxXSA9IHNpZCAmIDB4ZmY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkob3V0KTtcbiAgICB9LFxuICAgIGNvbXBpbGVFbmNvZGluZzogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUVuY29kaW5nKGVuY29kaW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShlbmNvZGluZy5yYXcpO1xuICAgIH0sXG4gICAgY29tcGlsZUZEU2VsZWN0OiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlRkRTZWxlY3QoZmRTZWxlY3QpIHtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGZkU2VsZWN0LmZvcm1hdDtcbiAgICAgIGxldCBvdXQsIGk7XG5cbiAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBvdXQgPSBuZXcgVWludDhBcnJheSgxICsgZmRTZWxlY3QuZmRTZWxlY3QubGVuZ3RoKTtcbiAgICAgICAgICBvdXRbMF0gPSBmb3JtYXQ7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmRTZWxlY3QuZmRTZWxlY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpICsgMV0gPSBmZFNlbGVjdC5mZFNlbGVjdFtpXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSAwO1xuICAgICAgICAgIGxldCBsYXN0RkQgPSBmZFNlbGVjdC5mZFNlbGVjdFswXTtcbiAgICAgICAgICBjb25zdCByYW5nZXMgPSBbZm9ybWF0LCAwLCAwLCBzdGFydCA+PiA4ICYgMHhmZiwgc3RhcnQgJiAweGZmLCBsYXN0RkRdO1xuXG4gICAgICAgICAgZm9yIChpID0gMTsgaSA8IGZkU2VsZWN0LmZkU2VsZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RkQgPSBmZFNlbGVjdC5mZFNlbGVjdFtpXTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRGRCAhPT0gbGFzdEZEKSB7XG4gICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGkgPj4gOCAmIDB4ZmYsIGkgJiAweGZmLCBjdXJyZW50RkQpO1xuICAgICAgICAgICAgICBsYXN0RkQgPSBjdXJyZW50RkQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbnVtUmFuZ2VzID0gKHJhbmdlcy5sZW5ndGggLSAzKSAvIDM7XG4gICAgICAgICAgcmFuZ2VzWzFdID0gbnVtUmFuZ2VzID4+IDggJiAweGZmO1xuICAgICAgICAgIHJhbmdlc1syXSA9IG51bVJhbmdlcyAmIDB4ZmY7XG4gICAgICAgICAgcmFuZ2VzLnB1c2goaSA+PiA4ICYgMHhmZiwgaSAmIDB4ZmYpO1xuICAgICAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KHJhbmdlcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KG91dCk7XG4gICAgfSxcbiAgICBjb21waWxlVHlwZWRBcnJheTogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZVR5cGVkQXJyYXkoZGF0YSkge1xuICAgICAgdmFyIG91dCA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgb3V0W2ldID0gZGF0YVtpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuICAgIGNvbXBpbGVJbmRleDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUluZGV4KGluZGV4LCB0cmFja2Vycykge1xuICAgICAgdHJhY2tlcnMgPSB0cmFja2VycyB8fCBbXTtcbiAgICAgIHZhciBvYmplY3RzID0gaW5kZXgub2JqZWN0cztcbiAgICAgIHZhciBjb3VudCA9IG9iamVjdHMubGVuZ3RoO1xuXG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRhdGEgPSBbY291bnQgPj4gOCAmIDB4ZmYsIGNvdW50ICYgMHhmZl07XG4gICAgICB2YXIgbGFzdE9mZnNldCA9IDEsXG4gICAgICAgICAgaTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgbGFzdE9mZnNldCArPSBvYmplY3RzW2ldLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgdmFyIG9mZnNldFNpemU7XG5cbiAgICAgIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDApIHtcbiAgICAgICAgb2Zmc2V0U2l6ZSA9IDE7XG4gICAgICB9IGVsc2UgaWYgKGxhc3RPZmZzZXQgPCAweDEwMDAwKSB7XG4gICAgICAgIG9mZnNldFNpemUgPSAyO1xuICAgICAgfSBlbHNlIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDAwMDAwKSB7XG4gICAgICAgIG9mZnNldFNpemUgPSAzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0U2l6ZSA9IDQ7XG4gICAgICB9XG5cbiAgICAgIGRhdGEucHVzaChvZmZzZXRTaXplKTtcbiAgICAgIHZhciByZWxhdGl2ZU9mZnNldCA9IDE7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudCArIDE7IGkrKykge1xuICAgICAgICBpZiAob2Zmc2V0U2l6ZSA9PT0gMSkge1xuICAgICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCAmIDB4ZmYpO1xuICAgICAgICB9IGVsc2UgaWYgKG9mZnNldFNpemUgPT09IDIpIHtcbiAgICAgICAgICBkYXRhLnB1c2gocmVsYXRpdmVPZmZzZXQgPj4gOCAmIDB4ZmYsIHJlbGF0aXZlT2Zmc2V0ICYgMHhmZik7XG4gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0U2l6ZSA9PT0gMykge1xuICAgICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+PiAxNiAmIDB4ZmYsIHJlbGF0aXZlT2Zmc2V0ID4+IDggJiAweGZmLCByZWxhdGl2ZU9mZnNldCAmIDB4ZmYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+Pj4gMjQgJiAweGZmLCByZWxhdGl2ZU9mZnNldCA+PiAxNiAmIDB4ZmYsIHJlbGF0aXZlT2Zmc2V0ID4+IDggJiAweGZmLCByZWxhdGl2ZU9mZnNldCAmIDB4ZmYpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iamVjdHNbaV0pIHtcbiAgICAgICAgICByZWxhdGl2ZU9mZnNldCArPSBvYmplY3RzW2ldLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBpZiAodHJhY2tlcnNbaV0pIHtcbiAgICAgICAgICB0cmFja2Vyc1tpXS5vZmZzZXQoZGF0YS5sZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gb2JqZWN0c1tpXS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgZGF0YS5wdXNoKG9iamVjdHNbaV1bal0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIENGRkNvbXBpbGVyO1xufSgpO1xuXG5leHBvcnRzLkNGRkNvbXBpbGVyID0gQ0ZGQ29tcGlsZXI7XG5cbi8qKiovIH0pLFxuLyogMzEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRXhwZXJ0U3Vic2V0Q2hhcnNldCA9IGV4cG9ydHMuRXhwZXJ0Q2hhcnNldCA9IGV4cG9ydHMuSVNPQWRvYmVDaGFyc2V0ID0gdm9pZCAwO1xuY29uc3QgSVNPQWRvYmVDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJBRVwiLCBcIm9yZGZlbWluaW5lXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJhZVwiLCBcImRvdGxlc3NpXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwib25lc3VwZXJpb3JcIiwgXCJsb2dpY2Fsbm90XCIsIFwibXVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJFdGhcIiwgXCJvbmVoYWxmXCIsIFwicGx1c21pbnVzXCIsIFwiVGhvcm5cIiwgXCJvbmVxdWFydGVyXCIsIFwiZGl2aWRlXCIsIFwiYnJva2VuYmFyXCIsIFwiZGVncmVlXCIsIFwidGhvcm5cIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJyZWdpc3RlcmVkXCIsIFwibWludXNcIiwgXCJldGhcIiwgXCJtdWx0aXBseVwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJjb3B5cmlnaHRcIiwgXCJBYWN1dGVcIiwgXCJBY2lyY3VtZmxleFwiLCBcIkFkaWVyZXNpc1wiLCBcIkFncmF2ZVwiLCBcIkFyaW5nXCIsIFwiQXRpbGRlXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiTnRpbGRlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPZGllcmVzaXNcIiwgXCJPZ3JhdmVcIiwgXCJPdGlsZGVcIiwgXCJTY2Fyb25cIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIlVncmF2ZVwiLCBcIllhY3V0ZVwiLCBcIllkaWVyZXNpc1wiLCBcIlpjYXJvblwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYWdyYXZlXCIsIFwiYXJpbmdcIiwgXCJhdGlsZGVcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiZWdyYXZlXCIsIFwiaWFjdXRlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm9ncmF2ZVwiLCBcIm90aWxkZVwiLCBcInNjYXJvblwiLCBcInVhY3V0ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwidWdyYXZlXCIsIFwieWFjdXRlXCIsIFwieWRpZXJlc2lzXCIsIFwiemNhcm9uXCJdO1xuZXhwb3J0cy5JU09BZG9iZUNoYXJzZXQgPSBJU09BZG9iZUNoYXJzZXQ7XG5jb25zdCBFeHBlcnRDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcImZyYWN0aW9uXCIsIFwiemVyb29sZHN0eWxlXCIsIFwib25lb2xkc3R5bGVcIiwgXCJ0d29vbGRzdHlsZVwiLCBcInRocmVlb2xkc3R5bGVcIiwgXCJmb3Vyb2xkc3R5bGVcIiwgXCJmaXZlb2xkc3R5bGVcIiwgXCJzaXhvbGRzdHlsZVwiLCBcInNldmVub2xkc3R5bGVcIiwgXCJlaWdodG9sZHN0eWxlXCIsIFwibmluZW9sZHN0eWxlXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcImFzdXBlcmlvclwiLCBcImJzdXBlcmlvclwiLCBcImNlbnRzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcImVzdXBlcmlvclwiLCBcImlzdXBlcmlvclwiLCBcImxzdXBlcmlvclwiLCBcIm1zdXBlcmlvclwiLCBcIm5zdXBlcmlvclwiLCBcIm9zdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcImZmXCIsIFwiZmlcIiwgXCJmbFwiLCBcImZmaVwiLCBcImZmbFwiLCBcInBhcmVubGVmdGluZmVyaW9yXCIsIFwicGFyZW5yaWdodGluZmVyaW9yXCIsIFwiQ2lyY3VtZmxleHNtYWxsXCIsIFwiaHlwaGVuc3VwZXJpb3JcIiwgXCJHcmF2ZXNtYWxsXCIsIFwiQXNtYWxsXCIsIFwiQnNtYWxsXCIsIFwiQ3NtYWxsXCIsIFwiRHNtYWxsXCIsIFwiRXNtYWxsXCIsIFwiRnNtYWxsXCIsIFwiR3NtYWxsXCIsIFwiSHNtYWxsXCIsIFwiSXNtYWxsXCIsIFwiSnNtYWxsXCIsIFwiS3NtYWxsXCIsIFwiTHNtYWxsXCIsIFwiTXNtYWxsXCIsIFwiTnNtYWxsXCIsIFwiT3NtYWxsXCIsIFwiUHNtYWxsXCIsIFwiUXNtYWxsXCIsIFwiUnNtYWxsXCIsIFwiU3NtYWxsXCIsIFwiVHNtYWxsXCIsIFwiVXNtYWxsXCIsIFwiVnNtYWxsXCIsIFwiV3NtYWxsXCIsIFwiWHNtYWxsXCIsIFwiWXNtYWxsXCIsIFwiWnNtYWxsXCIsIFwiY29sb25tb25ldGFyeVwiLCBcIm9uZWZpdHRlZFwiLCBcInJ1cGlhaFwiLCBcIlRpbGRlc21hbGxcIiwgXCJleGNsYW1kb3duc21hbGxcIiwgXCJjZW50b2xkc3R5bGVcIiwgXCJMc2xhc2hzbWFsbFwiLCBcIlNjYXJvbnNtYWxsXCIsIFwiWmNhcm9uc21hbGxcIiwgXCJEaWVyZXNpc3NtYWxsXCIsIFwiQnJldmVzbWFsbFwiLCBcIkNhcm9uc21hbGxcIiwgXCJEb3RhY2NlbnRzbWFsbFwiLCBcIk1hY3JvbnNtYWxsXCIsIFwiZmlndXJlZGFzaFwiLCBcImh5cGhlbmluZmVyaW9yXCIsIFwiT2dvbmVrc21hbGxcIiwgXCJSaW5nc21hbGxcIiwgXCJDZWRpbGxhc21hbGxcIiwgXCJvbmVxdWFydGVyXCIsIFwib25laGFsZlwiLCBcInRocmVlcXVhcnRlcnNcIiwgXCJxdWVzdGlvbmRvd25zbWFsbFwiLCBcIm9uZWVpZ2h0aFwiLCBcInRocmVlZWlnaHRoc1wiLCBcImZpdmVlaWdodGhzXCIsIFwic2V2ZW5laWdodGhzXCIsIFwib25ldGhpcmRcIiwgXCJ0d290aGlyZHNcIiwgXCJ6ZXJvc3VwZXJpb3JcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBY2lyY3VtZmxleHNtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkFyaW5nc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWFjdXRlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIklhY3V0ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiRXRoc21hbGxcIiwgXCJOdGlsZGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPY2lyY3VtZmxleHNtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk9Fc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVY2lyY3VtZmxleHNtYWxsXCIsIFwiVWRpZXJlc2lzc21hbGxcIiwgXCJZYWN1dGVzbWFsbFwiLCBcIlRob3Juc21hbGxcIiwgXCJZZGllcmVzaXNzbWFsbFwiXTtcbmV4cG9ydHMuRXhwZXJ0Q2hhcnNldCA9IEV4cGVydENoYXJzZXQ7XG5jb25zdCBFeHBlcnRTdWJzZXRDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZG9sbGFyb2xkc3R5bGVcIiwgXCJkb2xsYXJzdXBlcmlvclwiLCBcInBhcmVubGVmdHN1cGVyaW9yXCIsIFwicGFyZW5yaWdodHN1cGVyaW9yXCIsIFwidHdvZG90ZW5sZWFkZXJcIiwgXCJvbmVkb3RlbmxlYWRlclwiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwiZnJhY3Rpb25cIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImNvbW1hc3VwZXJpb3JcIiwgXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsIFwicGVyaW9kc3VwZXJpb3JcIiwgXCJhc3VwZXJpb3JcIiwgXCJic3VwZXJpb3JcIiwgXCJjZW50c3VwZXJpb3JcIiwgXCJkc3VwZXJpb3JcIiwgXCJlc3VwZXJpb3JcIiwgXCJpc3VwZXJpb3JcIiwgXCJsc3VwZXJpb3JcIiwgXCJtc3VwZXJpb3JcIiwgXCJuc3VwZXJpb3JcIiwgXCJvc3VwZXJpb3JcIiwgXCJyc3VwZXJpb3JcIiwgXCJzc3VwZXJpb3JcIiwgXCJ0c3VwZXJpb3JcIiwgXCJmZlwiLCBcImZpXCIsIFwiZmxcIiwgXCJmZmlcIiwgXCJmZmxcIiwgXCJwYXJlbmxlZnRpbmZlcmlvclwiLCBcInBhcmVucmlnaHRpbmZlcmlvclwiLCBcImh5cGhlbnN1cGVyaW9yXCIsIFwiY29sb25tb25ldGFyeVwiLCBcIm9uZWZpdHRlZFwiLCBcInJ1cGlhaFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcImZpZ3VyZWRhc2hcIiwgXCJoeXBoZW5pbmZlcmlvclwiLCBcIm9uZXF1YXJ0ZXJcIiwgXCJvbmVoYWxmXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcIm9uZWVpZ2h0aFwiLCBcInRocmVlZWlnaHRoc1wiLCBcImZpdmVlaWdodGhzXCIsIFwic2V2ZW5laWdodGhzXCIsIFwib25ldGhpcmRcIiwgXCJ0d290aGlyZHNcIiwgXCJ6ZXJvc3VwZXJpb3JcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiXTtcbmV4cG9ydHMuRXhwZXJ0U3Vic2V0Q2hhcnNldCA9IEV4cGVydFN1YnNldENoYXJzZXQ7XG5cbi8qKiovIH0pLFxuLyogMzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0RW5jb2RpbmcgPSBnZXRFbmNvZGluZztcbmV4cG9ydHMuRXhwZXJ0RW5jb2RpbmcgPSBleHBvcnRzLlphcGZEaW5nYmF0c0VuY29kaW5nID0gZXhwb3J0cy5TeW1ib2xTZXRFbmNvZGluZyA9IGV4cG9ydHMuTWFjUm9tYW5FbmNvZGluZyA9IGV4cG9ydHMuU3RhbmRhcmRFbmNvZGluZyA9IGV4cG9ydHMuV2luQW5zaUVuY29kaW5nID0gdm9pZCAwO1xuY29uc3QgRXhwZXJ0RW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbXNtYWxsXCIsIFwiSHVuZ2FydW1sYXV0c21hbGxcIiwgXCJcIiwgXCJkb2xsYXJvbGRzdHlsZVwiLCBcImRvbGxhcnN1cGVyaW9yXCIsIFwiYW1wZXJzYW5kc21hbGxcIiwgXCJBY3V0ZXNtYWxsXCIsIFwicGFyZW5sZWZ0c3VwZXJpb3JcIiwgXCJwYXJlbnJpZ2h0c3VwZXJpb3JcIiwgXCJ0d29kb3RlbmxlYWRlclwiLCBcIm9uZWRvdGVubGVhZGVyXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJmcmFjdGlvblwiLCBcInplcm9vbGRzdHlsZVwiLCBcIm9uZW9sZHN0eWxlXCIsIFwidHdvb2xkc3R5bGVcIiwgXCJ0aHJlZW9sZHN0eWxlXCIsIFwiZm91cm9sZHN0eWxlXCIsIFwiZml2ZW9sZHN0eWxlXCIsIFwic2l4b2xkc3R5bGVcIiwgXCJzZXZlbm9sZHN0eWxlXCIsIFwiZWlnaHRvbGRzdHlsZVwiLCBcIm5pbmVvbGRzdHlsZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwiY29tbWFzdXBlcmlvclwiLCBcInRocmVlcXVhcnRlcnNlbWRhc2hcIiwgXCJwZXJpb2RzdXBlcmlvclwiLCBcInF1ZXN0aW9uc21hbGxcIiwgXCJcIiwgXCJhc3VwZXJpb3JcIiwgXCJic3VwZXJpb3JcIiwgXCJjZW50c3VwZXJpb3JcIiwgXCJkc3VwZXJpb3JcIiwgXCJlc3VwZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJpc3VwZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJsc3VwZXJpb3JcIiwgXCJtc3VwZXJpb3JcIiwgXCJuc3VwZXJpb3JcIiwgXCJvc3VwZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJyc3VwZXJpb3JcIiwgXCJzc3VwZXJpb3JcIiwgXCJ0c3VwZXJpb3JcIiwgXCJcIiwgXCJmZlwiLCBcImZpXCIsIFwiZmxcIiwgXCJmZmlcIiwgXCJmZmxcIiwgXCJwYXJlbmxlZnRpbmZlcmlvclwiLCBcIlwiLCBcInBhcmVucmlnaHRpbmZlcmlvclwiLCBcIkNpcmN1bWZsZXhzbWFsbFwiLCBcImh5cGhlbnN1cGVyaW9yXCIsIFwiR3JhdmVzbWFsbFwiLCBcIkFzbWFsbFwiLCBcIkJzbWFsbFwiLCBcIkNzbWFsbFwiLCBcIkRzbWFsbFwiLCBcIkVzbWFsbFwiLCBcIkZzbWFsbFwiLCBcIkdzbWFsbFwiLCBcIkhzbWFsbFwiLCBcIklzbWFsbFwiLCBcIkpzbWFsbFwiLCBcIktzbWFsbFwiLCBcIkxzbWFsbFwiLCBcIk1zbWFsbFwiLCBcIk5zbWFsbFwiLCBcIk9zbWFsbFwiLCBcIlBzbWFsbFwiLCBcIlFzbWFsbFwiLCBcIlJzbWFsbFwiLCBcIlNzbWFsbFwiLCBcIlRzbWFsbFwiLCBcIlVzbWFsbFwiLCBcIlZzbWFsbFwiLCBcIldzbWFsbFwiLCBcIlhzbWFsbFwiLCBcIllzbWFsbFwiLCBcIlpzbWFsbFwiLCBcImNvbG9ubW9uZXRhcnlcIiwgXCJvbmVmaXR0ZWRcIiwgXCJydXBpYWhcIiwgXCJUaWxkZXNtYWxsXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiZXhjbGFtZG93bnNtYWxsXCIsIFwiY2VudG9sZHN0eWxlXCIsIFwiTHNsYXNoc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJTY2Fyb25zbWFsbFwiLCBcIlpjYXJvbnNtYWxsXCIsIFwiRGllcmVzaXNzbWFsbFwiLCBcIkJyZXZlc21hbGxcIiwgXCJDYXJvbnNtYWxsXCIsIFwiXCIsIFwiRG90YWNjZW50c21hbGxcIiwgXCJcIiwgXCJcIiwgXCJNYWNyb25zbWFsbFwiLCBcIlwiLCBcIlwiLCBcImZpZ3VyZWRhc2hcIiwgXCJoeXBoZW5pbmZlcmlvclwiLCBcIlwiLCBcIlwiLCBcIk9nb25la3NtYWxsXCIsIFwiUmluZ3NtYWxsXCIsIFwiQ2VkaWxsYXNtYWxsXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwib25lcXVhcnRlclwiLCBcIm9uZWhhbGZcIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwicXVlc3Rpb25kb3duc21hbGxcIiwgXCJvbmVlaWdodGhcIiwgXCJ0aHJlZWVpZ2h0aHNcIiwgXCJmaXZlZWlnaHRoc1wiLCBcInNldmVuZWlnaHRoc1wiLCBcIm9uZXRoaXJkXCIsIFwidHdvdGhpcmRzXCIsIFwiXCIsIFwiXCIsIFwiemVyb3N1cGVyaW9yXCIsIFwib25lc3VwZXJpb3JcIiwgXCJ0d29zdXBlcmlvclwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJmb3Vyc3VwZXJpb3JcIiwgXCJmaXZlc3VwZXJpb3JcIiwgXCJzaXhzdXBlcmlvclwiLCBcInNldmVuc3VwZXJpb3JcIiwgXCJlaWdodHN1cGVyaW9yXCIsIFwibmluZXN1cGVyaW9yXCIsIFwiemVyb2luZmVyaW9yXCIsIFwib25laW5mZXJpb3JcIiwgXCJ0d29pbmZlcmlvclwiLCBcInRocmVlaW5mZXJpb3JcIiwgXCJmb3VyaW5mZXJpb3JcIiwgXCJmaXZlaW5mZXJpb3JcIiwgXCJzaXhpbmZlcmlvclwiLCBcInNldmVuaW5mZXJpb3JcIiwgXCJlaWdodGluZmVyaW9yXCIsIFwibmluZWluZmVyaW9yXCIsIFwiY2VudGluZmVyaW9yXCIsIFwiZG9sbGFyaW5mZXJpb3JcIiwgXCJwZXJpb2RpbmZlcmlvclwiLCBcImNvbW1haW5mZXJpb3JcIiwgXCJBZ3JhdmVzbWFsbFwiLCBcIkFhY3V0ZXNtYWxsXCIsIFwiQWNpcmN1bWZsZXhzbWFsbFwiLCBcIkF0aWxkZXNtYWxsXCIsIFwiQWRpZXJlc2lzc21hbGxcIiwgXCJBcmluZ3NtYWxsXCIsIFwiQUVzbWFsbFwiLCBcIkNjZWRpbGxhc21hbGxcIiwgXCJFZ3JhdmVzbWFsbFwiLCBcIkVhY3V0ZXNtYWxsXCIsIFwiRWNpcmN1bWZsZXhzbWFsbFwiLCBcIkVkaWVyZXNpc3NtYWxsXCIsIFwiSWdyYXZlc21hbGxcIiwgXCJJYWN1dGVzbWFsbFwiLCBcIkljaXJjdW1mbGV4c21hbGxcIiwgXCJJZGllcmVzaXNzbWFsbFwiLCBcIkV0aHNtYWxsXCIsIFwiTnRpbGRlc21hbGxcIiwgXCJPZ3JhdmVzbWFsbFwiLCBcIk9hY3V0ZXNtYWxsXCIsIFwiT2NpcmN1bWZsZXhzbWFsbFwiLCBcIk90aWxkZXNtYWxsXCIsIFwiT2RpZXJlc2lzc21hbGxcIiwgXCJPRXNtYWxsXCIsIFwiT3NsYXNoc21hbGxcIiwgXCJVZ3JhdmVzbWFsbFwiLCBcIlVhY3V0ZXNtYWxsXCIsIFwiVWNpcmN1bWZsZXhzbWFsbFwiLCBcIlVkaWVyZXNpc3NtYWxsXCIsIFwiWWFjdXRlc21hbGxcIiwgXCJUaG9ybnNtYWxsXCIsIFwiWWRpZXJlc2lzc21hbGxcIl07XG5leHBvcnRzLkV4cGVydEVuY29kaW5nID0gRXhwZXJ0RW5jb2Rpbmc7XG5jb25zdCBNYWNFeHBlcnRFbmNvZGluZyA9IFtcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcImZyYWN0aW9uXCIsIFwiemVyb29sZHN0eWxlXCIsIFwib25lb2xkc3R5bGVcIiwgXCJ0d29vbGRzdHlsZVwiLCBcInRocmVlb2xkc3R5bGVcIiwgXCJmb3Vyb2xkc3R5bGVcIiwgXCJmaXZlb2xkc3R5bGVcIiwgXCJzaXhvbGRzdHlsZVwiLCBcInNldmVub2xkc3R5bGVcIiwgXCJlaWdodG9sZHN0eWxlXCIsIFwibmluZW9sZHN0eWxlXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJcIiwgXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsIFwiXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIkV0aHNtYWxsXCIsIFwiXCIsIFwiXCIsIFwib25lcXVhcnRlclwiLCBcIm9uZWhhbGZcIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwib25lZWlnaHRoXCIsIFwidGhyZWVlaWdodGhzXCIsIFwiZml2ZWVpZ2h0aHNcIiwgXCJzZXZlbmVpZ2h0aHNcIiwgXCJvbmV0aGlyZFwiLCBcInR3b3RoaXJkc1wiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcImZmXCIsIFwiZmlcIiwgXCJmbFwiLCBcImZmaVwiLCBcImZmbFwiLCBcInBhcmVubGVmdGluZmVyaW9yXCIsIFwiXCIsIFwicGFyZW5yaWdodGluZmVyaW9yXCIsIFwiQ2lyY3VtZmxleHNtYWxsXCIsIFwiaHlwaGVuaW5mZXJpb3JcIiwgXCJHcmF2ZXNtYWxsXCIsIFwiQXNtYWxsXCIsIFwiQnNtYWxsXCIsIFwiQ3NtYWxsXCIsIFwiRHNtYWxsXCIsIFwiRXNtYWxsXCIsIFwiRnNtYWxsXCIsIFwiR3NtYWxsXCIsIFwiSHNtYWxsXCIsIFwiSXNtYWxsXCIsIFwiSnNtYWxsXCIsIFwiS3NtYWxsXCIsIFwiTHNtYWxsXCIsIFwiTXNtYWxsXCIsIFwiTnNtYWxsXCIsIFwiT3NtYWxsXCIsIFwiUHNtYWxsXCIsIFwiUXNtYWxsXCIsIFwiUnNtYWxsXCIsIFwiU3NtYWxsXCIsIFwiVHNtYWxsXCIsIFwiVXNtYWxsXCIsIFwiVnNtYWxsXCIsIFwiV3NtYWxsXCIsIFwiWHNtYWxsXCIsIFwiWXNtYWxsXCIsIFwiWnNtYWxsXCIsIFwiY29sb25tb25ldGFyeVwiLCBcIm9uZWZpdHRlZFwiLCBcInJ1cGlhaFwiLCBcIlRpbGRlc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJhc3VwZXJpb3JcIiwgXCJjZW50c3VwZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJBYWN1dGVzbWFsbFwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWNpcmN1bWZsZXhzbWFsbFwiLCBcIkFkaWVyZXNpc3NtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBcmluZ3NtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVhY3V0ZXNtYWxsXCIsIFwiRWdyYXZlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJYWN1dGVzbWFsbFwiLCBcIklncmF2ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiTnRpbGRlc21hbGxcIiwgXCJPYWN1dGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2NpcmN1bWZsZXhzbWFsbFwiLCBcIk9kaWVyZXNpc3NtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJVYWN1dGVzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWNpcmN1bWZsZXhzbWFsbFwiLCBcIlVkaWVyZXNpc3NtYWxsXCIsIFwiXCIsIFwiZWlnaHRzdXBlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcInRocmVlaW5mZXJpb3JcIiwgXCJzaXhpbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJzZXZlbmluZmVyaW9yXCIsIFwiU2Nhcm9uc21hbGxcIiwgXCJcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJ0d29pbmZlcmlvclwiLCBcIlwiLCBcIkRpZXJlc2lzc21hbGxcIiwgXCJcIiwgXCJDYXJvbnNtYWxsXCIsIFwib3N1cGVyaW9yXCIsIFwiZml2ZWluZmVyaW9yXCIsIFwiXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiWWFjdXRlc21hbGxcIiwgXCJcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcIlwiLCBcIlwiLCBcIlRob3Juc21hbGxcIiwgXCJcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJaY2Fyb25zbWFsbFwiLCBcIkFFc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcInF1ZXN0aW9uZG93bnNtYWxsXCIsIFwib25laW5mZXJpb3JcIiwgXCJMc2xhc2hzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIkNlZGlsbGFzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIk9Fc21hbGxcIiwgXCJmaWd1cmVkYXNoXCIsIFwiaHlwaGVuc3VwZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJleGNsYW1kb3duc21hbGxcIiwgXCJcIiwgXCJZZGllcmVzaXNzbWFsbFwiLCBcIlwiLCBcIm9uZXN1cGVyaW9yXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJ0aHJlZXN1cGVyaW9yXCIsIFwiZm91cnN1cGVyaW9yXCIsIFwiZml2ZXN1cGVyaW9yXCIsIFwic2l4c3VwZXJpb3JcIiwgXCJzZXZlbnN1cGVyaW9yXCIsIFwibmluZXN1cGVyaW9yXCIsIFwiemVyb3N1cGVyaW9yXCIsIFwiXCIsIFwiZXN1cGVyaW9yXCIsIFwicnN1cGVyaW9yXCIsIFwidHN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwiaXN1cGVyaW9yXCIsIFwic3N1cGVyaW9yXCIsIFwiZHN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwibHN1cGVyaW9yXCIsIFwiT2dvbmVrc21hbGxcIiwgXCJCcmV2ZXNtYWxsXCIsIFwiTWFjcm9uc21hbGxcIiwgXCJic3VwZXJpb3JcIiwgXCJuc3VwZXJpb3JcIiwgXCJtc3VwZXJpb3JcIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwicGVyaW9kc3VwZXJpb3JcIiwgXCJEb3RhY2NlbnRzbWFsbFwiLCBcIlJpbmdzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiXTtcbmNvbnN0IE1hY1JvbWFuRW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbVwiLCBcInF1b3RlZGJsXCIsIFwibnVtYmVyc2lnblwiLCBcImRvbGxhclwiLCBcInBlcmNlbnRcIiwgXCJhbXBlcnNhbmRcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInBhcmVubGVmdFwiLCBcInBhcmVucmlnaHRcIiwgXCJhc3Rlcmlza1wiLCBcInBsdXNcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcInNsYXNoXCIsIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcInRocmVlXCIsIFwiZm91clwiLCBcImZpdmVcIiwgXCJzaXhcIiwgXCJzZXZlblwiLCBcImVpZ2h0XCIsIFwibmluZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwibGVzc1wiLCBcImVxdWFsXCIsIFwiZ3JlYXRlclwiLCBcInF1ZXN0aW9uXCIsIFwiYXRcIiwgXCJBXCIsIFwiQlwiLCBcIkNcIiwgXCJEXCIsIFwiRVwiLCBcIkZcIiwgXCJHXCIsIFwiSFwiLCBcIklcIiwgXCJKXCIsIFwiS1wiLCBcIkxcIiwgXCJNXCIsIFwiTlwiLCBcIk9cIiwgXCJQXCIsIFwiUVwiLCBcIlJcIiwgXCJTXCIsIFwiVFwiLCBcIlVcIiwgXCJWXCIsIFwiV1wiLCBcIlhcIiwgXCJZXCIsIFwiWlwiLCBcImJyYWNrZXRsZWZ0XCIsIFwiYmFja3NsYXNoXCIsIFwiYnJhY2tldHJpZ2h0XCIsIFwiYXNjaWljaXJjdW1cIiwgXCJ1bmRlcnNjb3JlXCIsIFwiZ3JhdmVcIiwgXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCIsIFwiZVwiLCBcImZcIiwgXCJnXCIsIFwiaFwiLCBcImlcIiwgXCJqXCIsIFwia1wiLCBcImxcIiwgXCJtXCIsIFwiblwiLCBcIm9cIiwgXCJwXCIsIFwicVwiLCBcInJcIiwgXCJzXCIsIFwidFwiLCBcInVcIiwgXCJ2XCIsIFwid1wiLCBcInhcIiwgXCJ5XCIsIFwielwiLCBcImJyYWNlbGVmdFwiLCBcImJhclwiLCBcImJyYWNlcmlnaHRcIiwgXCJhc2NpaXRpbGRlXCIsIFwiXCIsIFwiQWRpZXJlc2lzXCIsIFwiQXJpbmdcIiwgXCJDY2VkaWxsYVwiLCBcIkVhY3V0ZVwiLCBcIk50aWxkZVwiLCBcIk9kaWVyZXNpc1wiLCBcIlVkaWVyZXNpc1wiLCBcImFhY3V0ZVwiLCBcImFncmF2ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYXRpbGRlXCIsIFwiYXJpbmdcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVncmF2ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiaWFjdXRlXCIsIFwiaWdyYXZlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvZ3JhdmVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm90aWxkZVwiLCBcInVhY3V0ZVwiLCBcInVncmF2ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwiZGFnZ2VyXCIsIFwiZGVncmVlXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwic2VjdGlvblwiLCBcImJ1bGxldFwiLCBcInBhcmFncmFwaFwiLCBcImdlcm1hbmRibHNcIiwgXCJyZWdpc3RlcmVkXCIsIFwiY29weXJpZ2h0XCIsIFwidHJhZGVtYXJrXCIsIFwiYWN1dGVcIiwgXCJkaWVyZXNpc1wiLCBcIm5vdGVxdWFsXCIsIFwiQUVcIiwgXCJPc2xhc2hcIiwgXCJpbmZpbml0eVwiLCBcInBsdXNtaW51c1wiLCBcImxlc3NlcXVhbFwiLCBcImdyZWF0ZXJlcXVhbFwiLCBcInllblwiLCBcIm11XCIsIFwicGFydGlhbGRpZmZcIiwgXCJzdW1tYXRpb25cIiwgXCJwcm9kdWN0XCIsIFwicGlcIiwgXCJpbnRlZ3JhbFwiLCBcIm9yZGZlbWluaW5lXCIsIFwib3JkbWFzY3VsaW5lXCIsIFwiT21lZ2FcIiwgXCJhZVwiLCBcIm9zbGFzaFwiLCBcInF1ZXN0aW9uZG93blwiLCBcImV4Y2xhbWRvd25cIiwgXCJsb2dpY2Fsbm90XCIsIFwicmFkaWNhbFwiLCBcImZsb3JpblwiLCBcImFwcHJveGVxdWFsXCIsIFwiRGVsdGFcIiwgXCJndWlsbGVtb3RsZWZ0XCIsIFwiZ3VpbGxlbW90cmlnaHRcIiwgXCJlbGxpcHNpc1wiLCBcInNwYWNlXCIsIFwiQWdyYXZlXCIsIFwiQXRpbGRlXCIsIFwiT3RpbGRlXCIsIFwiT0VcIiwgXCJvZVwiLCBcImVuZGFzaFwiLCBcImVtZGFzaFwiLCBcInF1b3RlZGJsbGVmdFwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJxdW90ZWxlZnRcIiwgXCJxdW90ZXJpZ2h0XCIsIFwiZGl2aWRlXCIsIFwibG96ZW5nZVwiLCBcInlkaWVyZXNpc1wiLCBcIllkaWVyZXNpc1wiLCBcImZyYWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInBlcnRob3VzYW5kXCIsIFwiQWNpcmN1bWZsZXhcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkFhY3V0ZVwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJhcHBsZVwiLCBcIk9ncmF2ZVwiLCBcIlVhY3V0ZVwiLCBcIlVjaXJjdW1mbGV4XCIsIFwiVWdyYXZlXCIsIFwiZG90bGVzc2lcIiwgXCJjaXJjdW1mbGV4XCIsIFwidGlsZGVcIiwgXCJtYWNyb25cIiwgXCJicmV2ZVwiLCBcImRvdGFjY2VudFwiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIl07XG5leHBvcnRzLk1hY1JvbWFuRW5jb2RpbmcgPSBNYWNSb21hbkVuY29kaW5nO1xuY29uc3QgU3RhbmRhcmRFbmNvZGluZyA9IFtcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJcIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcIlwiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJBRVwiLCBcIlwiLCBcIm9yZGZlbWluaW5lXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJhZVwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcImRvdGxlc3NpXCIsIFwiXCIsIFwiXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCJdO1xuZXhwb3J0cy5TdGFuZGFyZEVuY29kaW5nID0gU3RhbmRhcmRFbmNvZGluZztcbmNvbnN0IFdpbkFuc2lFbmNvZGluZyA9IFtcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3Rlc2luZ2xlXCIsIFwicGFyZW5sZWZ0XCIsIFwicGFyZW5yaWdodFwiLCBcImFzdGVyaXNrXCIsIFwicGx1c1wiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwic2xhc2hcIiwgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwidGhyZWVcIiwgXCJmb3VyXCIsIFwiZml2ZVwiLCBcInNpeFwiLCBcInNldmVuXCIsIFwiZWlnaHRcIiwgXCJuaW5lXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJsZXNzXCIsIFwiZXF1YWxcIiwgXCJncmVhdGVyXCIsIFwicXVlc3Rpb25cIiwgXCJhdFwiLCBcIkFcIiwgXCJCXCIsIFwiQ1wiLCBcIkRcIiwgXCJFXCIsIFwiRlwiLCBcIkdcIiwgXCJIXCIsIFwiSVwiLCBcIkpcIiwgXCJLXCIsIFwiTFwiLCBcIk1cIiwgXCJOXCIsIFwiT1wiLCBcIlBcIiwgXCJRXCIsIFwiUlwiLCBcIlNcIiwgXCJUXCIsIFwiVVwiLCBcIlZcIiwgXCJXXCIsIFwiWFwiLCBcIllcIiwgXCJaXCIsIFwiYnJhY2tldGxlZnRcIiwgXCJiYWNrc2xhc2hcIiwgXCJicmFja2V0cmlnaHRcIiwgXCJhc2NpaWNpcmN1bVwiLCBcInVuZGVyc2NvcmVcIiwgXCJncmF2ZVwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJidWxsZXRcIiwgXCJFdXJvXCIsIFwiYnVsbGV0XCIsIFwicXVvdGVzaW5nbGJhc2VcIiwgXCJmbG9yaW5cIiwgXCJxdW90ZWRibGJhc2VcIiwgXCJlbGxpcHNpc1wiLCBcImRhZ2dlclwiLCBcImRhZ2dlcmRibFwiLCBcImNpcmN1bWZsZXhcIiwgXCJwZXJ0aG91c2FuZFwiLCBcIlNjYXJvblwiLCBcImd1aWxzaW5nbGxlZnRcIiwgXCJPRVwiLCBcImJ1bGxldFwiLCBcIlpjYXJvblwiLCBcImJ1bGxldFwiLCBcImJ1bGxldFwiLCBcInF1b3RlbGVmdFwiLCBcInF1b3RlcmlnaHRcIiwgXCJxdW90ZWRibGxlZnRcIiwgXCJxdW90ZWRibHJpZ2h0XCIsIFwiYnVsbGV0XCIsIFwiZW5kYXNoXCIsIFwiZW1kYXNoXCIsIFwidGlsZGVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJzY2Fyb25cIiwgXCJndWlsc2luZ2xyaWdodFwiLCBcIm9lXCIsIFwiYnVsbGV0XCIsIFwiemNhcm9uXCIsIFwiWWRpZXJlc2lzXCIsIFwic3BhY2VcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiY3VycmVuY3lcIiwgXCJ5ZW5cIiwgXCJicm9rZW5iYXJcIiwgXCJzZWN0aW9uXCIsIFwiZGllcmVzaXNcIiwgXCJjb3B5cmlnaHRcIiwgXCJvcmRmZW1pbmluZVwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJsb2dpY2Fsbm90XCIsIFwiaHlwaGVuXCIsIFwicmVnaXN0ZXJlZFwiLCBcIm1hY3JvblwiLCBcImRlZ3JlZVwiLCBcInBsdXNtaW51c1wiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImFjdXRlXCIsIFwibXVcIiwgXCJwYXJhZ3JhcGhcIiwgXCJwZXJpb2RjZW50ZXJlZFwiLCBcImNlZGlsbGFcIiwgXCJvbmVzdXBlcmlvclwiLCBcIm9yZG1hc2N1bGluZVwiLCBcImd1aWxsZW1vdHJpZ2h0XCIsIFwib25lcXVhcnRlclwiLCBcIm9uZWhhbGZcIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwicXVlc3Rpb25kb3duXCIsIFwiQWdyYXZlXCIsIFwiQWFjdXRlXCIsIFwiQWNpcmN1bWZsZXhcIiwgXCJBdGlsZGVcIiwgXCJBZGllcmVzaXNcIiwgXCJBcmluZ1wiLCBcIkFFXCIsIFwiQ2NlZGlsbGFcIiwgXCJFZ3JhdmVcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIklncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiRXRoXCIsIFwiTnRpbGRlXCIsIFwiT2dyYXZlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPdGlsZGVcIiwgXCJPZGllcmVzaXNcIiwgXCJtdWx0aXBseVwiLCBcIk9zbGFzaFwiLCBcIlVncmF2ZVwiLCBcIlVhY3V0ZVwiLCBcIlVjaXJjdW1mbGV4XCIsIFwiVWRpZXJlc2lzXCIsIFwiWWFjdXRlXCIsIFwiVGhvcm5cIiwgXCJnZXJtYW5kYmxzXCIsIFwiYWdyYXZlXCIsIFwiYWFjdXRlXCIsIFwiYWNpcmN1bWZsZXhcIiwgXCJhdGlsZGVcIiwgXCJhZGllcmVzaXNcIiwgXCJhcmluZ1wiLCBcImFlXCIsIFwiY2NlZGlsbGFcIiwgXCJlZ3JhdmVcIiwgXCJlYWN1dGVcIiwgXCJlY2lyY3VtZmxleFwiLCBcImVkaWVyZXNpc1wiLCBcImlncmF2ZVwiLCBcImlhY3V0ZVwiLCBcImljaXJjdW1mbGV4XCIsIFwiaWRpZXJlc2lzXCIsIFwiZXRoXCIsIFwibnRpbGRlXCIsIFwib2dyYXZlXCIsIFwib2FjdXRlXCIsIFwib2NpcmN1bWZsZXhcIiwgXCJvdGlsZGVcIiwgXCJvZGllcmVzaXNcIiwgXCJkaXZpZGVcIiwgXCJvc2xhc2hcIiwgXCJ1Z3JhdmVcIiwgXCJ1YWN1dGVcIiwgXCJ1Y2lyY3VtZmxleFwiLCBcInVkaWVyZXNpc1wiLCBcInlhY3V0ZVwiLCBcInRob3JuXCIsIFwieWRpZXJlc2lzXCJdO1xuZXhwb3J0cy5XaW5BbnNpRW5jb2RpbmcgPSBXaW5BbnNpRW5jb2Rpbmc7XG5jb25zdCBTeW1ib2xTZXRFbmNvZGluZyA9IFtcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwidW5pdmVyc2FsXCIsIFwibnVtYmVyc2lnblwiLCBcImV4aXN0ZW50aWFsXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInN1Y2h0aGF0XCIsIFwicGFyZW5sZWZ0XCIsIFwicGFyZW5yaWdodFwiLCBcImFzdGVyaXNrbWF0aFwiLCBcInBsdXNcIiwgXCJjb21tYVwiLCBcIm1pbnVzXCIsIFwicGVyaW9kXCIsIFwic2xhc2hcIiwgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwidGhyZWVcIiwgXCJmb3VyXCIsIFwiZml2ZVwiLCBcInNpeFwiLCBcInNldmVuXCIsIFwiZWlnaHRcIiwgXCJuaW5lXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJsZXNzXCIsIFwiZXF1YWxcIiwgXCJncmVhdGVyXCIsIFwicXVlc3Rpb25cIiwgXCJjb25ncnVlbnRcIiwgXCJBbHBoYVwiLCBcIkJldGFcIiwgXCJDaGlcIiwgXCJEZWx0YVwiLCBcIkVwc2lsb25cIiwgXCJQaGlcIiwgXCJHYW1tYVwiLCBcIkV0YVwiLCBcIklvdGFcIiwgXCJ0aGV0YTFcIiwgXCJLYXBwYVwiLCBcIkxhbWJkYVwiLCBcIk11XCIsIFwiTnVcIiwgXCJPbWljcm9uXCIsIFwiUGlcIiwgXCJUaGV0YVwiLCBcIlJob1wiLCBcIlNpZ21hXCIsIFwiVGF1XCIsIFwiVXBzaWxvblwiLCBcInNpZ21hMVwiLCBcIk9tZWdhXCIsIFwiWGlcIiwgXCJQc2lcIiwgXCJaZXRhXCIsIFwiYnJhY2tldGxlZnRcIiwgXCJ0aGVyZWZvcmVcIiwgXCJicmFja2V0cmlnaHRcIiwgXCJwZXJwZW5kaWN1bGFyXCIsIFwidW5kZXJzY29yZVwiLCBcInJhZGljYWxleFwiLCBcImFscGhhXCIsIFwiYmV0YVwiLCBcImNoaVwiLCBcImRlbHRhXCIsIFwiZXBzaWxvblwiLCBcInBoaVwiLCBcImdhbW1hXCIsIFwiZXRhXCIsIFwiaW90YVwiLCBcInBoaTFcIiwgXCJrYXBwYVwiLCBcImxhbWJkYVwiLCBcIm11XCIsIFwibnVcIiwgXCJvbWljcm9uXCIsIFwicGlcIiwgXCJ0aGV0YVwiLCBcInJob1wiLCBcInNpZ21hXCIsIFwidGF1XCIsIFwidXBzaWxvblwiLCBcIm9tZWdhMVwiLCBcIm9tZWdhXCIsIFwieGlcIiwgXCJwc2lcIiwgXCJ6ZXRhXCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcInNpbWlsYXJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJFdXJvXCIsIFwiVXBzaWxvbjFcIiwgXCJtaW51dGVcIiwgXCJsZXNzZXF1YWxcIiwgXCJmcmFjdGlvblwiLCBcImluZmluaXR5XCIsIFwiZmxvcmluXCIsIFwiY2x1YlwiLCBcImRpYW1vbmRcIiwgXCJoZWFydFwiLCBcInNwYWRlXCIsIFwiYXJyb3dib3RoXCIsIFwiYXJyb3dsZWZ0XCIsIFwiYXJyb3d1cFwiLCBcImFycm93cmlnaHRcIiwgXCJhcnJvd2Rvd25cIiwgXCJkZWdyZWVcIiwgXCJwbHVzbWludXNcIiwgXCJzZWNvbmRcIiwgXCJncmVhdGVyZXF1YWxcIiwgXCJtdWx0aXBseVwiLCBcInByb3BvcnRpb25hbFwiLCBcInBhcnRpYWxkaWZmXCIsIFwiYnVsbGV0XCIsIFwiZGl2aWRlXCIsIFwibm90ZXF1YWxcIiwgXCJlcXVpdmFsZW5jZVwiLCBcImFwcHJveGVxdWFsXCIsIFwiZWxsaXBzaXNcIiwgXCJhcnJvd3ZlcnRleFwiLCBcImFycm93aG9yaXpleFwiLCBcImNhcnJpYWdlcmV0dXJuXCIsIFwiYWxlcGhcIiwgXCJJZnJha3R1clwiLCBcIlJmcmFrdHVyXCIsIFwid2VpZXJzdHJhc3NcIiwgXCJjaXJjbGVtdWx0aXBseVwiLCBcImNpcmNsZXBsdXNcIiwgXCJlbXB0eXNldFwiLCBcImludGVyc2VjdGlvblwiLCBcInVuaW9uXCIsIFwicHJvcGVyc3VwZXJzZXRcIiwgXCJyZWZsZXhzdXBlcnNldFwiLCBcIm5vdHN1YnNldFwiLCBcInByb3BlcnN1YnNldFwiLCBcInJlZmxleHN1YnNldFwiLCBcImVsZW1lbnRcIiwgXCJub3RlbGVtZW50XCIsIFwiYW5nbGVcIiwgXCJncmFkaWVudFwiLCBcInJlZ2lzdGVyc2VyaWZcIiwgXCJjb3B5cmlnaHRzZXJpZlwiLCBcInRyYWRlbWFya3NlcmlmXCIsIFwicHJvZHVjdFwiLCBcInJhZGljYWxcIiwgXCJkb3RtYXRoXCIsIFwibG9naWNhbG5vdFwiLCBcImxvZ2ljYWxhbmRcIiwgXCJsb2dpY2Fsb3JcIiwgXCJhcnJvd2RibGJvdGhcIiwgXCJhcnJvd2RibGxlZnRcIiwgXCJhcnJvd2RibHVwXCIsIFwiYXJyb3dkYmxyaWdodFwiLCBcImFycm93ZGJsZG93blwiLCBcImxvemVuZ2VcIiwgXCJhbmdsZWxlZnRcIiwgXCJyZWdpc3RlcnNhbnNcIiwgXCJjb3B5cmlnaHRzYW5zXCIsIFwidHJhZGVtYXJrc2Fuc1wiLCBcInN1bW1hdGlvblwiLCBcInBhcmVubGVmdHRwXCIsIFwicGFyZW5sZWZ0ZXhcIiwgXCJwYXJlbmxlZnRidFwiLCBcImJyYWNrZXRsZWZ0dHBcIiwgXCJicmFja2V0bGVmdGV4XCIsIFwiYnJhY2tldGxlZnRidFwiLCBcImJyYWNlbGVmdHRwXCIsIFwiYnJhY2VsZWZ0bWlkXCIsIFwiYnJhY2VsZWZ0YnRcIiwgXCJicmFjZWV4XCIsIFwiXCIsIFwiYW5nbGVyaWdodFwiLCBcImludGVncmFsXCIsIFwiaW50ZWdyYWx0cFwiLCBcImludGVncmFsZXhcIiwgXCJpbnRlZ3JhbGJ0XCIsIFwicGFyZW5yaWdodHRwXCIsIFwicGFyZW5yaWdodGV4XCIsIFwicGFyZW5yaWdodGJ0XCIsIFwiYnJhY2tldHJpZ2h0dHBcIiwgXCJicmFja2V0cmlnaHRleFwiLCBcImJyYWNrZXRyaWdodGJ0XCIsIFwiYnJhY2VyaWdodHRwXCIsIFwiYnJhY2VyaWdodG1pZFwiLCBcImJyYWNlcmlnaHRidFwiLCBcIlwiXTtcbmV4cG9ydHMuU3ltYm9sU2V0RW5jb2RpbmcgPSBTeW1ib2xTZXRFbmNvZGluZztcbmNvbnN0IFphcGZEaW5nYmF0c0VuY29kaW5nID0gW1wiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwic3BhY2VcIiwgXCJhMVwiLCBcImEyXCIsIFwiYTIwMlwiLCBcImEzXCIsIFwiYTRcIiwgXCJhNVwiLCBcImExMTlcIiwgXCJhMTE4XCIsIFwiYTExN1wiLCBcImExMVwiLCBcImExMlwiLCBcImExM1wiLCBcImExNFwiLCBcImExNVwiLCBcImExNlwiLCBcImExMDVcIiwgXCJhMTdcIiwgXCJhMThcIiwgXCJhMTlcIiwgXCJhMjBcIiwgXCJhMjFcIiwgXCJhMjJcIiwgXCJhMjNcIiwgXCJhMjRcIiwgXCJhMjVcIiwgXCJhMjZcIiwgXCJhMjdcIiwgXCJhMjhcIiwgXCJhNlwiLCBcImE3XCIsIFwiYThcIiwgXCJhOVwiLCBcImExMFwiLCBcImEyOVwiLCBcImEzMFwiLCBcImEzMVwiLCBcImEzMlwiLCBcImEzM1wiLCBcImEzNFwiLCBcImEzNVwiLCBcImEzNlwiLCBcImEzN1wiLCBcImEzOFwiLCBcImEzOVwiLCBcImE0MFwiLCBcImE0MVwiLCBcImE0MlwiLCBcImE0M1wiLCBcImE0NFwiLCBcImE0NVwiLCBcImE0NlwiLCBcImE0N1wiLCBcImE0OFwiLCBcImE0OVwiLCBcImE1MFwiLCBcImE1MVwiLCBcImE1MlwiLCBcImE1M1wiLCBcImE1NFwiLCBcImE1NVwiLCBcImE1NlwiLCBcImE1N1wiLCBcImE1OFwiLCBcImE1OVwiLCBcImE2MFwiLCBcImE2MVwiLCBcImE2MlwiLCBcImE2M1wiLCBcImE2NFwiLCBcImE2NVwiLCBcImE2NlwiLCBcImE2N1wiLCBcImE2OFwiLCBcImE2OVwiLCBcImE3MFwiLCBcImE3MVwiLCBcImE3MlwiLCBcImE3M1wiLCBcImE3NFwiLCBcImEyMDNcIiwgXCJhNzVcIiwgXCJhMjA0XCIsIFwiYTc2XCIsIFwiYTc3XCIsIFwiYTc4XCIsIFwiYTc5XCIsIFwiYTgxXCIsIFwiYTgyXCIsIFwiYTgzXCIsIFwiYTg0XCIsIFwiYTk3XCIsIFwiYTk4XCIsIFwiYTk5XCIsIFwiYTEwMFwiLCBcIlwiLCBcImE4OVwiLCBcImE5MFwiLCBcImE5M1wiLCBcImE5NFwiLCBcImE5MVwiLCBcImE5MlwiLCBcImEyMDVcIiwgXCJhODVcIiwgXCJhMjA2XCIsIFwiYTg2XCIsIFwiYTg3XCIsIFwiYTg4XCIsIFwiYTk1XCIsIFwiYTk2XCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiYTEwMVwiLCBcImExMDJcIiwgXCJhMTAzXCIsIFwiYTEwNFwiLCBcImExMDZcIiwgXCJhMTA3XCIsIFwiYTEwOFwiLCBcImExMTJcIiwgXCJhMTExXCIsIFwiYTExMFwiLCBcImExMDlcIiwgXCJhMTIwXCIsIFwiYTEyMVwiLCBcImExMjJcIiwgXCJhMTIzXCIsIFwiYTEyNFwiLCBcImExMjVcIiwgXCJhMTI2XCIsIFwiYTEyN1wiLCBcImExMjhcIiwgXCJhMTI5XCIsIFwiYTEzMFwiLCBcImExMzFcIiwgXCJhMTMyXCIsIFwiYTEzM1wiLCBcImExMzRcIiwgXCJhMTM1XCIsIFwiYTEzNlwiLCBcImExMzdcIiwgXCJhMTM4XCIsIFwiYTEzOVwiLCBcImExNDBcIiwgXCJhMTQxXCIsIFwiYTE0MlwiLCBcImExNDNcIiwgXCJhMTQ0XCIsIFwiYTE0NVwiLCBcImExNDZcIiwgXCJhMTQ3XCIsIFwiYTE0OFwiLCBcImExNDlcIiwgXCJhMTUwXCIsIFwiYTE1MVwiLCBcImExNTJcIiwgXCJhMTUzXCIsIFwiYTE1NFwiLCBcImExNTVcIiwgXCJhMTU2XCIsIFwiYTE1N1wiLCBcImExNThcIiwgXCJhMTU5XCIsIFwiYTE2MFwiLCBcImExNjFcIiwgXCJhMTYzXCIsIFwiYTE2NFwiLCBcImExOTZcIiwgXCJhMTY1XCIsIFwiYTE5MlwiLCBcImExNjZcIiwgXCJhMTY3XCIsIFwiYTE2OFwiLCBcImExNjlcIiwgXCJhMTcwXCIsIFwiYTE3MVwiLCBcImExNzJcIiwgXCJhMTczXCIsIFwiYTE2MlwiLCBcImExNzRcIiwgXCJhMTc1XCIsIFwiYTE3NlwiLCBcImExNzdcIiwgXCJhMTc4XCIsIFwiYTE3OVwiLCBcImExOTNcIiwgXCJhMTgwXCIsIFwiYTE5OVwiLCBcImExODFcIiwgXCJhMjAwXCIsIFwiYTE4MlwiLCBcIlwiLCBcImEyMDFcIiwgXCJhMTgzXCIsIFwiYTE4NFwiLCBcImExOTdcIiwgXCJhMTg1XCIsIFwiYTE5NFwiLCBcImExOThcIiwgXCJhMTg2XCIsIFwiYTE5NVwiLCBcImExODdcIiwgXCJhMTg4XCIsIFwiYTE4OVwiLCBcImExOTBcIiwgXCJhMTkxXCIsIFwiXCJdO1xuZXhwb3J0cy5aYXBmRGluZ2JhdHNFbmNvZGluZyA9IFphcGZEaW5nYmF0c0VuY29kaW5nO1xuXG5mdW5jdGlvbiBnZXRFbmNvZGluZyhlbmNvZGluZ05hbWUpIHtcbiAgc3dpdGNoIChlbmNvZGluZ05hbWUpIHtcbiAgICBjYXNlIFwiV2luQW5zaUVuY29kaW5nXCI6XG4gICAgICByZXR1cm4gV2luQW5zaUVuY29kaW5nO1xuXG4gICAgY2FzZSBcIlN0YW5kYXJkRW5jb2RpbmdcIjpcbiAgICAgIHJldHVybiBTdGFuZGFyZEVuY29kaW5nO1xuXG4gICAgY2FzZSBcIk1hY1JvbWFuRW5jb2RpbmdcIjpcbiAgICAgIHJldHVybiBNYWNSb21hbkVuY29kaW5nO1xuXG4gICAgY2FzZSBcIlN5bWJvbFNldEVuY29kaW5nXCI6XG4gICAgICByZXR1cm4gU3ltYm9sU2V0RW5jb2Rpbmc7XG5cbiAgICBjYXNlIFwiWmFwZkRpbmdiYXRzRW5jb2RpbmdcIjpcbiAgICAgIHJldHVybiBaYXBmRGluZ2JhdHNFbmNvZGluZztcblxuICAgIGNhc2UgXCJFeHBlcnRFbmNvZGluZ1wiOlxuICAgICAgcmV0dXJuIEV4cGVydEVuY29kaW5nO1xuXG4gICAgY2FzZSBcIk1hY0V4cGVydEVuY29kaW5nXCI6XG4gICAgICByZXR1cm4gTWFjRXhwZXJ0RW5jb2Rpbmc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqKi8gfSksXG4vKiAzMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG52YXIgZ2V0TG9va3VwVGFibGVGYWN0b3J5ID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KS5nZXRMb29rdXBUYWJsZUZhY3Rvcnk7XG52YXIgZ2V0R2x5cGhzVW5pY29kZSA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkge1xuIHQuQSA9IDB4MDA0MTtcbiB0LkFFID0gMHgwMGM2O1xuIHQuQUVhY3V0ZSA9IDB4MDFmYztcbiB0LkFFbWFjcm9uID0gMHgwMWUyO1xuIHQuQUVzbWFsbCA9IDB4ZjdlNjtcbiB0LkFhY3V0ZSA9IDB4MDBjMTtcbiB0LkFhY3V0ZXNtYWxsID0gMHhmN2UxO1xuIHQuQWJyZXZlID0gMHgwMTAyO1xuIHQuQWJyZXZlYWN1dGUgPSAweDFlYWU7XG4gdC5BYnJldmVjeXJpbGxpYyA9IDB4MDRkMDtcbiB0LkFicmV2ZWRvdGJlbG93ID0gMHgxZWI2O1xuIHQuQWJyZXZlZ3JhdmUgPSAweDFlYjA7XG4gdC5BYnJldmVob29rYWJvdmUgPSAweDFlYjI7XG4gdC5BYnJldmV0aWxkZSA9IDB4MWViNDtcbiB0LkFjYXJvbiA9IDB4MDFjZDtcbiB0LkFjaXJjbGUgPSAweDI0YjY7XG4gdC5BY2lyY3VtZmxleCA9IDB4MDBjMjtcbiB0LkFjaXJjdW1mbGV4YWN1dGUgPSAweDFlYTQ7XG4gdC5BY2lyY3VtZmxleGRvdGJlbG93ID0gMHgxZWFjO1xuIHQuQWNpcmN1bWZsZXhncmF2ZSA9IDB4MWVhNjtcbiB0LkFjaXJjdW1mbGV4aG9va2Fib3ZlID0gMHgxZWE4O1xuIHQuQWNpcmN1bWZsZXhzbWFsbCA9IDB4ZjdlMjtcbiB0LkFjaXJjdW1mbGV4dGlsZGUgPSAweDFlYWE7XG4gdC5BY3V0ZSA9IDB4ZjZjOTtcbiB0LkFjdXRlc21hbGwgPSAweGY3YjQ7XG4gdC5BY3lyaWxsaWMgPSAweDA0MTA7XG4gdC5BZGJsZ3JhdmUgPSAweDAyMDA7XG4gdC5BZGllcmVzaXMgPSAweDAwYzQ7XG4gdC5BZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRkMjtcbiB0LkFkaWVyZXNpc21hY3JvbiA9IDB4MDFkZTtcbiB0LkFkaWVyZXNpc3NtYWxsID0gMHhmN2U0O1xuIHQuQWRvdGJlbG93ID0gMHgxZWEwO1xuIHQuQWRvdG1hY3JvbiA9IDB4MDFlMDtcbiB0LkFncmF2ZSA9IDB4MDBjMDtcbiB0LkFncmF2ZXNtYWxsID0gMHhmN2UwO1xuIHQuQWhvb2thYm92ZSA9IDB4MWVhMjtcbiB0LkFpZWN5cmlsbGljID0gMHgwNGQ0O1xuIHQuQWludmVydGVkYnJldmUgPSAweDAyMDI7XG4gdC5BbHBoYSA9IDB4MDM5MTtcbiB0LkFscGhhdG9ub3MgPSAweDAzODY7XG4gdC5BbWFjcm9uID0gMHgwMTAwO1xuIHQuQW1vbm9zcGFjZSA9IDB4ZmYyMTtcbiB0LkFvZ29uZWsgPSAweDAxMDQ7XG4gdC5BcmluZyA9IDB4MDBjNTtcbiB0LkFyaW5nYWN1dGUgPSAweDAxZmE7XG4gdC5BcmluZ2JlbG93ID0gMHgxZTAwO1xuIHQuQXJpbmdzbWFsbCA9IDB4ZjdlNTtcbiB0LkFzbWFsbCA9IDB4Zjc2MTtcbiB0LkF0aWxkZSA9IDB4MDBjMztcbiB0LkF0aWxkZXNtYWxsID0gMHhmN2UzO1xuIHQuQXliYXJtZW5pYW4gPSAweDA1MzE7XG4gdC5CID0gMHgwMDQyO1xuIHQuQmNpcmNsZSA9IDB4MjRiNztcbiB0LkJkb3RhY2NlbnQgPSAweDFlMDI7XG4gdC5CZG90YmVsb3cgPSAweDFlMDQ7XG4gdC5CZWN5cmlsbGljID0gMHgwNDExO1xuIHQuQmVuYXJtZW5pYW4gPSAweDA1MzI7XG4gdC5CZXRhID0gMHgwMzkyO1xuIHQuQmhvb2sgPSAweDAxODE7XG4gdC5CbGluZWJlbG93ID0gMHgxZTA2O1xuIHQuQm1vbm9zcGFjZSA9IDB4ZmYyMjtcbiB0LkJyZXZlc21hbGwgPSAweGY2ZjQ7XG4gdC5Cc21hbGwgPSAweGY3NjI7XG4gdC5CdG9wYmFyID0gMHgwMTgyO1xuIHQuQyA9IDB4MDA0MztcbiB0LkNhYXJtZW5pYW4gPSAweDA1M2U7XG4gdC5DYWN1dGUgPSAweDAxMDY7XG4gdC5DYXJvbiA9IDB4ZjZjYTtcbiB0LkNhcm9uc21hbGwgPSAweGY2ZjU7XG4gdC5DY2Fyb24gPSAweDAxMGM7XG4gdC5DY2VkaWxsYSA9IDB4MDBjNztcbiB0LkNjZWRpbGxhYWN1dGUgPSAweDFlMDg7XG4gdC5DY2VkaWxsYXNtYWxsID0gMHhmN2U3O1xuIHQuQ2NpcmNsZSA9IDB4MjRiODtcbiB0LkNjaXJjdW1mbGV4ID0gMHgwMTA4O1xuIHQuQ2RvdCA9IDB4MDEwYTtcbiB0LkNkb3RhY2NlbnQgPSAweDAxMGE7XG4gdC5DZWRpbGxhc21hbGwgPSAweGY3Yjg7XG4gdC5DaGFhcm1lbmlhbiA9IDB4MDU0OTtcbiB0LkNoZWFia2hhc2lhbmN5cmlsbGljID0gMHgwNGJjO1xuIHQuQ2hlY3lyaWxsaWMgPSAweDA0Mjc7XG4gdC5DaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYyA9IDB4MDRiZTtcbiB0LkNoZWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNGI2O1xuIHQuQ2hlZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRmNDtcbiB0LkNoZWhhcm1lbmlhbiA9IDB4MDU0MztcbiB0LkNoZWtoYWthc3NpYW5jeXJpbGxpYyA9IDB4MDRjYjtcbiB0LkNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMgPSAweDA0Yjg7XG4gdC5DaGkgPSAweDAzYTc7XG4gdC5DaG9vayA9IDB4MDE4NztcbiB0LkNpcmN1bWZsZXhzbWFsbCA9IDB4ZjZmNjtcbiB0LkNtb25vc3BhY2UgPSAweGZmMjM7XG4gdC5Db2FybWVuaWFuID0gMHgwNTUxO1xuIHQuQ3NtYWxsID0gMHhmNzYzO1xuIHQuRCA9IDB4MDA0NDtcbiB0LkRaID0gMHgwMWYxO1xuIHQuRFpjYXJvbiA9IDB4MDFjNDtcbiB0LkRhYXJtZW5pYW4gPSAweDA1MzQ7XG4gdC5EYWZyaWNhbiA9IDB4MDE4OTtcbiB0LkRjYXJvbiA9IDB4MDEwZTtcbiB0LkRjZWRpbGxhID0gMHgxZTEwO1xuIHQuRGNpcmNsZSA9IDB4MjRiOTtcbiB0LkRjaXJjdW1mbGV4YmVsb3cgPSAweDFlMTI7XG4gdC5EY3JvYXQgPSAweDAxMTA7XG4gdC5EZG90YWNjZW50ID0gMHgxZTBhO1xuIHQuRGRvdGJlbG93ID0gMHgxZTBjO1xuIHQuRGVjeXJpbGxpYyA9IDB4MDQxNDtcbiB0LkRlaWNvcHRpYyA9IDB4MDNlZTtcbiB0LkRlbHRhID0gMHgyMjA2O1xuIHQuRGVsdGFncmVlayA9IDB4MDM5NDtcbiB0LkRob29rID0gMHgwMThhO1xuIHQuRGllcmVzaXMgPSAweGY2Y2I7XG4gdC5EaWVyZXNpc0FjdXRlID0gMHhmNmNjO1xuIHQuRGllcmVzaXNHcmF2ZSA9IDB4ZjZjZDtcbiB0LkRpZXJlc2lzc21hbGwgPSAweGY3YTg7XG4gdC5EaWdhbW1hZ3JlZWsgPSAweDAzZGM7XG4gdC5EamVjeXJpbGxpYyA9IDB4MDQwMjtcbiB0LkRsaW5lYmVsb3cgPSAweDFlMGU7XG4gdC5EbW9ub3NwYWNlID0gMHhmZjI0O1xuIHQuRG90YWNjZW50c21hbGwgPSAweGY2Zjc7XG4gdC5Ec2xhc2ggPSAweDAxMTA7XG4gdC5Ec21hbGwgPSAweGY3NjQ7XG4gdC5EdG9wYmFyID0gMHgwMThiO1xuIHQuRHogPSAweDAxZjI7XG4gdC5EemNhcm9uID0gMHgwMWM1O1xuIHQuRHplYWJraGFzaWFuY3lyaWxsaWMgPSAweDA0ZTA7XG4gdC5EemVjeXJpbGxpYyA9IDB4MDQwNTtcbiB0LkR6aGVjeXJpbGxpYyA9IDB4MDQwZjtcbiB0LkUgPSAweDAwNDU7XG4gdC5FYWN1dGUgPSAweDAwYzk7XG4gdC5FYWN1dGVzbWFsbCA9IDB4ZjdlOTtcbiB0LkVicmV2ZSA9IDB4MDExNDtcbiB0LkVjYXJvbiA9IDB4MDExYTtcbiB0LkVjZWRpbGxhYnJldmUgPSAweDFlMWM7XG4gdC5FY2hhcm1lbmlhbiA9IDB4MDUzNTtcbiB0LkVjaXJjbGUgPSAweDI0YmE7XG4gdC5FY2lyY3VtZmxleCA9IDB4MDBjYTtcbiB0LkVjaXJjdW1mbGV4YWN1dGUgPSAweDFlYmU7XG4gdC5FY2lyY3VtZmxleGJlbG93ID0gMHgxZTE4O1xuIHQuRWNpcmN1bWZsZXhkb3RiZWxvdyA9IDB4MWVjNjtcbiB0LkVjaXJjdW1mbGV4Z3JhdmUgPSAweDFlYzA7XG4gdC5FY2lyY3VtZmxleGhvb2thYm92ZSA9IDB4MWVjMjtcbiB0LkVjaXJjdW1mbGV4c21hbGwgPSAweGY3ZWE7XG4gdC5FY2lyY3VtZmxleHRpbGRlID0gMHgxZWM0O1xuIHQuRWN5cmlsbGljID0gMHgwNDA0O1xuIHQuRWRibGdyYXZlID0gMHgwMjA0O1xuIHQuRWRpZXJlc2lzID0gMHgwMGNiO1xuIHQuRWRpZXJlc2lzc21hbGwgPSAweGY3ZWI7XG4gdC5FZG90ID0gMHgwMTE2O1xuIHQuRWRvdGFjY2VudCA9IDB4MDExNjtcbiB0LkVkb3RiZWxvdyA9IDB4MWViODtcbiB0LkVmY3lyaWxsaWMgPSAweDA0MjQ7XG4gdC5FZ3JhdmUgPSAweDAwYzg7XG4gdC5FZ3JhdmVzbWFsbCA9IDB4ZjdlODtcbiB0LkVoYXJtZW5pYW4gPSAweDA1Mzc7XG4gdC5FaG9va2Fib3ZlID0gMHgxZWJhO1xuIHQuRWlnaHRyb21hbiA9IDB4MjE2NztcbiB0LkVpbnZlcnRlZGJyZXZlID0gMHgwMjA2O1xuIHQuRWlvdGlmaWVkY3lyaWxsaWMgPSAweDA0NjQ7XG4gdC5FbGN5cmlsbGljID0gMHgwNDFiO1xuIHQuRWxldmVucm9tYW4gPSAweDIxNmE7XG4gdC5FbWFjcm9uID0gMHgwMTEyO1xuIHQuRW1hY3JvbmFjdXRlID0gMHgxZTE2O1xuIHQuRW1hY3JvbmdyYXZlID0gMHgxZTE0O1xuIHQuRW1jeXJpbGxpYyA9IDB4MDQxYztcbiB0LkVtb25vc3BhY2UgPSAweGZmMjU7XG4gdC5FbmN5cmlsbGljID0gMHgwNDFkO1xuIHQuRW5kZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDRhMjtcbiB0LkVuZyA9IDB4MDE0YTtcbiB0LkVuZ2hlY3lyaWxsaWMgPSAweDA0YTQ7XG4gdC5Fbmhvb2tjeXJpbGxpYyA9IDB4MDRjNztcbiB0LkVvZ29uZWsgPSAweDAxMTg7XG4gdC5Fb3BlbiA9IDB4MDE5MDtcbiB0LkVwc2lsb24gPSAweDAzOTU7XG4gdC5FcHNpbG9udG9ub3MgPSAweDAzODg7XG4gdC5FcmN5cmlsbGljID0gMHgwNDIwO1xuIHQuRXJldmVyc2VkID0gMHgwMThlO1xuIHQuRXJldmVyc2VkY3lyaWxsaWMgPSAweDA0MmQ7XG4gdC5Fc2N5cmlsbGljID0gMHgwNDIxO1xuIHQuRXNkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDRhYTtcbiB0LkVzaCA9IDB4MDFhOTtcbiB0LkVzbWFsbCA9IDB4Zjc2NTtcbiB0LkV0YSA9IDB4MDM5NztcbiB0LkV0YXJtZW5pYW4gPSAweDA1Mzg7XG4gdC5FdGF0b25vcyA9IDB4MDM4OTtcbiB0LkV0aCA9IDB4MDBkMDtcbiB0LkV0aHNtYWxsID0gMHhmN2YwO1xuIHQuRXRpbGRlID0gMHgxZWJjO1xuIHQuRXRpbGRlYmVsb3cgPSAweDFlMWE7XG4gdC5FdXJvID0gMHgyMGFjO1xuIHQuRXpoID0gMHgwMWI3O1xuIHQuRXpoY2Fyb24gPSAweDAxZWU7XG4gdC5FemhyZXZlcnNlZCA9IDB4MDFiODtcbiB0LkYgPSAweDAwNDY7XG4gdC5GY2lyY2xlID0gMHgyNGJiO1xuIHQuRmRvdGFjY2VudCA9IDB4MWUxZTtcbiB0LkZlaGFybWVuaWFuID0gMHgwNTU2O1xuIHQuRmVpY29wdGljID0gMHgwM2U0O1xuIHQuRmhvb2sgPSAweDAxOTE7XG4gdC5GaXRhY3lyaWxsaWMgPSAweDA0NzI7XG4gdC5GaXZlcm9tYW4gPSAweDIxNjQ7XG4gdC5GbW9ub3NwYWNlID0gMHhmZjI2O1xuIHQuRm91cnJvbWFuID0gMHgyMTYzO1xuIHQuRnNtYWxsID0gMHhmNzY2O1xuIHQuRyA9IDB4MDA0NztcbiB0LkdCc3F1YXJlID0gMHgzMzg3O1xuIHQuR2FjdXRlID0gMHgwMWY0O1xuIHQuR2FtbWEgPSAweDAzOTM7XG4gdC5HYW1tYWFmcmljYW4gPSAweDAxOTQ7XG4gdC5HYW5naWFjb3B0aWMgPSAweDAzZWE7XG4gdC5HYnJldmUgPSAweDAxMWU7XG4gdC5HY2Fyb24gPSAweDAxZTY7XG4gdC5HY2VkaWxsYSA9IDB4MDEyMjtcbiB0LkdjaXJjbGUgPSAweDI0YmM7XG4gdC5HY2lyY3VtZmxleCA9IDB4MDExYztcbiB0Lkdjb21tYWFjY2VudCA9IDB4MDEyMjtcbiB0Lkdkb3QgPSAweDAxMjA7XG4gdC5HZG90YWNjZW50ID0gMHgwMTIwO1xuIHQuR2VjeXJpbGxpYyA9IDB4MDQxMztcbiB0LkdoYWRhcm1lbmlhbiA9IDB4MDU0MjtcbiB0LkdoZW1pZGRsZWhvb2tjeXJpbGxpYyA9IDB4MDQ5NDtcbiB0LkdoZXN0cm9rZWN5cmlsbGljID0gMHgwNDkyO1xuIHQuR2hldXB0dXJuY3lyaWxsaWMgPSAweDA0OTA7XG4gdC5HaG9vayA9IDB4MDE5MztcbiB0LkdpbWFybWVuaWFuID0gMHgwNTMzO1xuIHQuR2plY3lyaWxsaWMgPSAweDA0MDM7XG4gdC5HbWFjcm9uID0gMHgxZTIwO1xuIHQuR21vbm9zcGFjZSA9IDB4ZmYyNztcbiB0LkdyYXZlID0gMHhmNmNlO1xuIHQuR3JhdmVzbWFsbCA9IDB4Zjc2MDtcbiB0LkdzbWFsbCA9IDB4Zjc2NztcbiB0LkdzbWFsbGhvb2sgPSAweDAyOWI7XG4gdC5Hc3Ryb2tlID0gMHgwMWU0O1xuIHQuSCA9IDB4MDA0ODtcbiB0LkgxODUzMyA9IDB4MjVjZjtcbiB0LkgxODU0MyA9IDB4MjVhYTtcbiB0LkgxODU1MSA9IDB4MjVhYjtcbiB0LkgyMjA3MyA9IDB4MjVhMTtcbiB0LkhQc3F1YXJlID0gMHgzM2NiO1xuIHQuSGFhYmtoYXNpYW5jeXJpbGxpYyA9IDB4MDRhODtcbiB0LkhhZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0YjI7XG4gdC5IYXJkc2lnbmN5cmlsbGljID0gMHgwNDJhO1xuIHQuSGJhciA9IDB4MDEyNjtcbiB0LkhicmV2ZWJlbG93ID0gMHgxZTJhO1xuIHQuSGNlZGlsbGEgPSAweDFlMjg7XG4gdC5IY2lyY2xlID0gMHgyNGJkO1xuIHQuSGNpcmN1bWZsZXggPSAweDAxMjQ7XG4gdC5IZGllcmVzaXMgPSAweDFlMjY7XG4gdC5IZG90YWNjZW50ID0gMHgxZTIyO1xuIHQuSGRvdGJlbG93ID0gMHgxZTI0O1xuIHQuSG1vbm9zcGFjZSA9IDB4ZmYyODtcbiB0LkhvYXJtZW5pYW4gPSAweDA1NDA7XG4gdC5Ib3JpY29wdGljID0gMHgwM2U4O1xuIHQuSHNtYWxsID0gMHhmNzY4O1xuIHQuSHVuZ2FydW1sYXV0ID0gMHhmNmNmO1xuIHQuSHVuZ2FydW1sYXV0c21hbGwgPSAweGY2Zjg7XG4gdC5IenNxdWFyZSA9IDB4MzM5MDtcbiB0LkkgPSAweDAwNDk7XG4gdC5JQWN5cmlsbGljID0gMHgwNDJmO1xuIHQuSUogPSAweDAxMzI7XG4gdC5JVWN5cmlsbGljID0gMHgwNDJlO1xuIHQuSWFjdXRlID0gMHgwMGNkO1xuIHQuSWFjdXRlc21hbGwgPSAweGY3ZWQ7XG4gdC5JYnJldmUgPSAweDAxMmM7XG4gdC5JY2Fyb24gPSAweDAxY2Y7XG4gdC5JY2lyY2xlID0gMHgyNGJlO1xuIHQuSWNpcmN1bWZsZXggPSAweDAwY2U7XG4gdC5JY2lyY3VtZmxleHNtYWxsID0gMHhmN2VlO1xuIHQuSWN5cmlsbGljID0gMHgwNDA2O1xuIHQuSWRibGdyYXZlID0gMHgwMjA4O1xuIHQuSWRpZXJlc2lzID0gMHgwMGNmO1xuIHQuSWRpZXJlc2lzYWN1dGUgPSAweDFlMmU7XG4gdC5JZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRlNDtcbiB0LklkaWVyZXNpc3NtYWxsID0gMHhmN2VmO1xuIHQuSWRvdCA9IDB4MDEzMDtcbiB0Lklkb3RhY2NlbnQgPSAweDAxMzA7XG4gdC5JZG90YmVsb3cgPSAweDFlY2E7XG4gdC5JZWJyZXZlY3lyaWxsaWMgPSAweDA0ZDY7XG4gdC5JZWN5cmlsbGljID0gMHgwNDE1O1xuIHQuSWZyYWt0dXIgPSAweDIxMTE7XG4gdC5JZ3JhdmUgPSAweDAwY2M7XG4gdC5JZ3JhdmVzbWFsbCA9IDB4ZjdlYztcbiB0Lklob29rYWJvdmUgPSAweDFlYzg7XG4gdC5JaWN5cmlsbGljID0gMHgwNDE4O1xuIHQuSWludmVydGVkYnJldmUgPSAweDAyMGE7XG4gdC5JaXNob3J0Y3lyaWxsaWMgPSAweDA0MTk7XG4gdC5JbWFjcm9uID0gMHgwMTJhO1xuIHQuSW1hY3JvbmN5cmlsbGljID0gMHgwNGUyO1xuIHQuSW1vbm9zcGFjZSA9IDB4ZmYyOTtcbiB0LkluaWFybWVuaWFuID0gMHgwNTNiO1xuIHQuSW9jeXJpbGxpYyA9IDB4MDQwMTtcbiB0LklvZ29uZWsgPSAweDAxMmU7XG4gdC5Jb3RhID0gMHgwMzk5O1xuIHQuSW90YWFmcmljYW4gPSAweDAxOTY7XG4gdC5Jb3RhZGllcmVzaXMgPSAweDAzYWE7XG4gdC5Jb3RhdG9ub3MgPSAweDAzOGE7XG4gdC5Jc21hbGwgPSAweGY3Njk7XG4gdC5Jc3Ryb2tlID0gMHgwMTk3O1xuIHQuSXRpbGRlID0gMHgwMTI4O1xuIHQuSXRpbGRlYmVsb3cgPSAweDFlMmM7XG4gdC5JemhpdHNhY3lyaWxsaWMgPSAweDA0NzQ7XG4gdC5JemhpdHNhZGJsZ3JhdmVjeXJpbGxpYyA9IDB4MDQ3NjtcbiB0LkogPSAweDAwNGE7XG4gdC5KYWFybWVuaWFuID0gMHgwNTQxO1xuIHQuSmNpcmNsZSA9IDB4MjRiZjtcbiB0LkpjaXJjdW1mbGV4ID0gMHgwMTM0O1xuIHQuSmVjeXJpbGxpYyA9IDB4MDQwODtcbiB0LkpoZWhhcm1lbmlhbiA9IDB4MDU0YjtcbiB0Lkptb25vc3BhY2UgPSAweGZmMmE7XG4gdC5Kc21hbGwgPSAweGY3NmE7XG4gdC5LID0gMHgwMDRiO1xuIHQuS0JzcXVhcmUgPSAweDMzODU7XG4gdC5LS3NxdWFyZSA9IDB4MzNjZDtcbiB0LkthYmFzaGtpcmN5cmlsbGljID0gMHgwNGEwO1xuIHQuS2FjdXRlID0gMHgxZTMwO1xuIHQuS2FjeXJpbGxpYyA9IDB4MDQxYTtcbiB0LkthZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0OWE7XG4gdC5LYWhvb2tjeXJpbGxpYyA9IDB4MDRjMztcbiB0LkthcHBhID0gMHgwMzlhO1xuIHQuS2FzdHJva2VjeXJpbGxpYyA9IDB4MDQ5ZTtcbiB0LkthdmVydGljYWxzdHJva2VjeXJpbGxpYyA9IDB4MDQ5YztcbiB0LktjYXJvbiA9IDB4MDFlODtcbiB0LktjZWRpbGxhID0gMHgwMTM2O1xuIHQuS2NpcmNsZSA9IDB4MjRjMDtcbiB0Lktjb21tYWFjY2VudCA9IDB4MDEzNjtcbiB0Lktkb3RiZWxvdyA9IDB4MWUzMjtcbiB0LktlaGFybWVuaWFuID0gMHgwNTU0O1xuIHQuS2VuYXJtZW5pYW4gPSAweDA1M2Y7XG4gdC5LaGFjeXJpbGxpYyA9IDB4MDQyNTtcbiB0LktoZWljb3B0aWMgPSAweDAzZTY7XG4gdC5LaG9vayA9IDB4MDE5ODtcbiB0LktqZWN5cmlsbGljID0gMHgwNDBjO1xuIHQuS2xpbmViZWxvdyA9IDB4MWUzNDtcbiB0Lkttb25vc3BhY2UgPSAweGZmMmI7XG4gdC5Lb3BwYWN5cmlsbGljID0gMHgwNDgwO1xuIHQuS29wcGFncmVlayA9IDB4MDNkZTtcbiB0LktzaWN5cmlsbGljID0gMHgwNDZlO1xuIHQuS3NtYWxsID0gMHhmNzZiO1xuIHQuTCA9IDB4MDA0YztcbiB0LkxKID0gMHgwMWM3O1xuIHQuTEwgPSAweGY2YmY7XG4gdC5MYWN1dGUgPSAweDAxMzk7XG4gdC5MYW1iZGEgPSAweDAzOWI7XG4gdC5MY2Fyb24gPSAweDAxM2Q7XG4gdC5MY2VkaWxsYSA9IDB4MDEzYjtcbiB0LkxjaXJjbGUgPSAweDI0YzE7XG4gdC5MY2lyY3VtZmxleGJlbG93ID0gMHgxZTNjO1xuIHQuTGNvbW1hYWNjZW50ID0gMHgwMTNiO1xuIHQuTGRvdCA9IDB4MDEzZjtcbiB0Lkxkb3RhY2NlbnQgPSAweDAxM2Y7XG4gdC5MZG90YmVsb3cgPSAweDFlMzY7XG4gdC5MZG90YmVsb3dtYWNyb24gPSAweDFlMzg7XG4gdC5MaXduYXJtZW5pYW4gPSAweDA1M2M7XG4gdC5MaiA9IDB4MDFjODtcbiB0LkxqZWN5cmlsbGljID0gMHgwNDA5O1xuIHQuTGxpbmViZWxvdyA9IDB4MWUzYTtcbiB0Lkxtb25vc3BhY2UgPSAweGZmMmM7XG4gdC5Mc2xhc2ggPSAweDAxNDE7XG4gdC5Mc2xhc2hzbWFsbCA9IDB4ZjZmOTtcbiB0LkxzbWFsbCA9IDB4Zjc2YztcbiB0Lk0gPSAweDAwNGQ7XG4gdC5NQnNxdWFyZSA9IDB4MzM4NjtcbiB0Lk1hY3JvbiA9IDB4ZjZkMDtcbiB0Lk1hY3JvbnNtYWxsID0gMHhmN2FmO1xuIHQuTWFjdXRlID0gMHgxZTNlO1xuIHQuTWNpcmNsZSA9IDB4MjRjMjtcbiB0Lk1kb3RhY2NlbnQgPSAweDFlNDA7XG4gdC5NZG90YmVsb3cgPSAweDFlNDI7XG4gdC5NZW5hcm1lbmlhbiA9IDB4MDU0NDtcbiB0Lk1tb25vc3BhY2UgPSAweGZmMmQ7XG4gdC5Nc21hbGwgPSAweGY3NmQ7XG4gdC5NdHVybmVkID0gMHgwMTljO1xuIHQuTXUgPSAweDAzOWM7XG4gdC5OID0gMHgwMDRlO1xuIHQuTkogPSAweDAxY2E7XG4gdC5OYWN1dGUgPSAweDAxNDM7XG4gdC5OY2Fyb24gPSAweDAxNDc7XG4gdC5OY2VkaWxsYSA9IDB4MDE0NTtcbiB0Lk5jaXJjbGUgPSAweDI0YzM7XG4gdC5OY2lyY3VtZmxleGJlbG93ID0gMHgxZTRhO1xuIHQuTmNvbW1hYWNjZW50ID0gMHgwMTQ1O1xuIHQuTmRvdGFjY2VudCA9IDB4MWU0NDtcbiB0Lk5kb3RiZWxvdyA9IDB4MWU0NjtcbiB0Lk5ob29rbGVmdCA9IDB4MDE5ZDtcbiB0Lk5pbmVyb21hbiA9IDB4MjE2ODtcbiB0Lk5qID0gMHgwMWNiO1xuIHQuTmplY3lyaWxsaWMgPSAweDA0MGE7XG4gdC5ObGluZWJlbG93ID0gMHgxZTQ4O1xuIHQuTm1vbm9zcGFjZSA9IDB4ZmYyZTtcbiB0Lk5vd2FybWVuaWFuID0gMHgwNTQ2O1xuIHQuTnNtYWxsID0gMHhmNzZlO1xuIHQuTnRpbGRlID0gMHgwMGQxO1xuIHQuTnRpbGRlc21hbGwgPSAweGY3ZjE7XG4gdC5OdSA9IDB4MDM5ZDtcbiB0Lk8gPSAweDAwNGY7XG4gdC5PRSA9IDB4MDE1MjtcbiB0Lk9Fc21hbGwgPSAweGY2ZmE7XG4gdC5PYWN1dGUgPSAweDAwZDM7XG4gdC5PYWN1dGVzbWFsbCA9IDB4ZjdmMztcbiB0Lk9iYXJyZWRjeXJpbGxpYyA9IDB4MDRlODtcbiB0Lk9iYXJyZWRkaWVyZXNpc2N5cmlsbGljID0gMHgwNGVhO1xuIHQuT2JyZXZlID0gMHgwMTRlO1xuIHQuT2Nhcm9uID0gMHgwMWQxO1xuIHQuT2NlbnRlcmVkdGlsZGUgPSAweDAxOWY7XG4gdC5PY2lyY2xlID0gMHgyNGM0O1xuIHQuT2NpcmN1bWZsZXggPSAweDAwZDQ7XG4gdC5PY2lyY3VtZmxleGFjdXRlID0gMHgxZWQwO1xuIHQuT2NpcmN1bWZsZXhkb3RiZWxvdyA9IDB4MWVkODtcbiB0Lk9jaXJjdW1mbGV4Z3JhdmUgPSAweDFlZDI7XG4gdC5PY2lyY3VtZmxleGhvb2thYm92ZSA9IDB4MWVkNDtcbiB0Lk9jaXJjdW1mbGV4c21hbGwgPSAweGY3ZjQ7XG4gdC5PY2lyY3VtZmxleHRpbGRlID0gMHgxZWQ2O1xuIHQuT2N5cmlsbGljID0gMHgwNDFlO1xuIHQuT2RibGFjdXRlID0gMHgwMTUwO1xuIHQuT2RibGdyYXZlID0gMHgwMjBjO1xuIHQuT2RpZXJlc2lzID0gMHgwMGQ2O1xuIHQuT2RpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZTY7XG4gdC5PZGllcmVzaXNzbWFsbCA9IDB4ZjdmNjtcbiB0Lk9kb3RiZWxvdyA9IDB4MWVjYztcbiB0Lk9nb25la3NtYWxsID0gMHhmNmZiO1xuIHQuT2dyYXZlID0gMHgwMGQyO1xuIHQuT2dyYXZlc21hbGwgPSAweGY3ZjI7XG4gdC5PaGFybWVuaWFuID0gMHgwNTU1O1xuIHQuT2htID0gMHgyMTI2O1xuIHQuT2hvb2thYm92ZSA9IDB4MWVjZTtcbiB0Lk9ob3JuID0gMHgwMWEwO1xuIHQuT2hvcm5hY3V0ZSA9IDB4MWVkYTtcbiB0Lk9ob3JuZG90YmVsb3cgPSAweDFlZTI7XG4gdC5PaG9ybmdyYXZlID0gMHgxZWRjO1xuIHQuT2hvcm5ob29rYWJvdmUgPSAweDFlZGU7XG4gdC5PaG9ybnRpbGRlID0gMHgxZWUwO1xuIHQuT2h1bmdhcnVtbGF1dCA9IDB4MDE1MDtcbiB0Lk9pID0gMHgwMWEyO1xuIHQuT2ludmVydGVkYnJldmUgPSAweDAyMGU7XG4gdC5PbWFjcm9uID0gMHgwMTRjO1xuIHQuT21hY3JvbmFjdXRlID0gMHgxZTUyO1xuIHQuT21hY3JvbmdyYXZlID0gMHgxZTUwO1xuIHQuT21lZ2EgPSAweDIxMjY7XG4gdC5PbWVnYWN5cmlsbGljID0gMHgwNDYwO1xuIHQuT21lZ2FncmVlayA9IDB4MDNhOTtcbiB0Lk9tZWdhcm91bmRjeXJpbGxpYyA9IDB4MDQ3YTtcbiB0Lk9tZWdhdGl0bG9jeXJpbGxpYyA9IDB4MDQ3YztcbiB0Lk9tZWdhdG9ub3MgPSAweDAzOGY7XG4gdC5PbWljcm9uID0gMHgwMzlmO1xuIHQuT21pY3JvbnRvbm9zID0gMHgwMzhjO1xuIHQuT21vbm9zcGFjZSA9IDB4ZmYyZjtcbiB0Lk9uZXJvbWFuID0gMHgyMTYwO1xuIHQuT29nb25layA9IDB4MDFlYTtcbiB0Lk9vZ29uZWttYWNyb24gPSAweDAxZWM7XG4gdC5Pb3BlbiA9IDB4MDE4NjtcbiB0Lk9zbGFzaCA9IDB4MDBkODtcbiB0Lk9zbGFzaGFjdXRlID0gMHgwMWZlO1xuIHQuT3NsYXNoc21hbGwgPSAweGY3Zjg7XG4gdC5Pc21hbGwgPSAweGY3NmY7XG4gdC5Pc3Ryb2tlYWN1dGUgPSAweDAxZmU7XG4gdC5PdGN5cmlsbGljID0gMHgwNDdlO1xuIHQuT3RpbGRlID0gMHgwMGQ1O1xuIHQuT3RpbGRlYWN1dGUgPSAweDFlNGM7XG4gdC5PdGlsZGVkaWVyZXNpcyA9IDB4MWU0ZTtcbiB0Lk90aWxkZXNtYWxsID0gMHhmN2Y1O1xuIHQuUCA9IDB4MDA1MDtcbiB0LlBhY3V0ZSA9IDB4MWU1NDtcbiB0LlBjaXJjbGUgPSAweDI0YzU7XG4gdC5QZG90YWNjZW50ID0gMHgxZTU2O1xuIHQuUGVjeXJpbGxpYyA9IDB4MDQxZjtcbiB0LlBlaGFybWVuaWFuID0gMHgwNTRhO1xuIHQuUGVtaWRkbGVob29rY3lyaWxsaWMgPSAweDA0YTY7XG4gdC5QaGkgPSAweDAzYTY7XG4gdC5QaG9vayA9IDB4MDFhNDtcbiB0LlBpID0gMHgwM2EwO1xuIHQuUGl3cmFybWVuaWFuID0gMHgwNTUzO1xuIHQuUG1vbm9zcGFjZSA9IDB4ZmYzMDtcbiB0LlBzaSA9IDB4MDNhODtcbiB0LlBzaWN5cmlsbGljID0gMHgwNDcwO1xuIHQuUHNtYWxsID0gMHhmNzcwO1xuIHQuUSA9IDB4MDA1MTtcbiB0LlFjaXJjbGUgPSAweDI0YzY7XG4gdC5RbW9ub3NwYWNlID0gMHhmZjMxO1xuIHQuUXNtYWxsID0gMHhmNzcxO1xuIHQuUiA9IDB4MDA1MjtcbiB0LlJhYXJtZW5pYW4gPSAweDA1NGM7XG4gdC5SYWN1dGUgPSAweDAxNTQ7XG4gdC5SY2Fyb24gPSAweDAxNTg7XG4gdC5SY2VkaWxsYSA9IDB4MDE1NjtcbiB0LlJjaXJjbGUgPSAweDI0Yzc7XG4gdC5SY29tbWFhY2NlbnQgPSAweDAxNTY7XG4gdC5SZGJsZ3JhdmUgPSAweDAyMTA7XG4gdC5SZG90YWNjZW50ID0gMHgxZTU4O1xuIHQuUmRvdGJlbG93ID0gMHgxZTVhO1xuIHQuUmRvdGJlbG93bWFjcm9uID0gMHgxZTVjO1xuIHQuUmVoYXJtZW5pYW4gPSAweDA1NTA7XG4gdC5SZnJha3R1ciA9IDB4MjExYztcbiB0LlJobyA9IDB4MDNhMTtcbiB0LlJpbmdzbWFsbCA9IDB4ZjZmYztcbiB0LlJpbnZlcnRlZGJyZXZlID0gMHgwMjEyO1xuIHQuUmxpbmViZWxvdyA9IDB4MWU1ZTtcbiB0LlJtb25vc3BhY2UgPSAweGZmMzI7XG4gdC5Sc21hbGwgPSAweGY3NzI7XG4gdC5Sc21hbGxpbnZlcnRlZCA9IDB4MDI4MTtcbiB0LlJzbWFsbGludmVydGVkc3VwZXJpb3IgPSAweDAyYjY7XG4gdC5TID0gMHgwMDUzO1xuIHQuU0YwMTAwMDAgPSAweDI1MGM7XG4gdC5TRjAyMDAwMCA9IDB4MjUxNDtcbiB0LlNGMDMwMDAwID0gMHgyNTEwO1xuIHQuU0YwNDAwMDAgPSAweDI1MTg7XG4gdC5TRjA1MDAwMCA9IDB4MjUzYztcbiB0LlNGMDYwMDAwID0gMHgyNTJjO1xuIHQuU0YwNzAwMDAgPSAweDI1MzQ7XG4gdC5TRjA4MDAwMCA9IDB4MjUxYztcbiB0LlNGMDkwMDAwID0gMHgyNTI0O1xuIHQuU0YxMDAwMDAgPSAweDI1MDA7XG4gdC5TRjExMDAwMCA9IDB4MjUwMjtcbiB0LlNGMTkwMDAwID0gMHgyNTYxO1xuIHQuU0YyMDAwMDAgPSAweDI1NjI7XG4gdC5TRjIxMDAwMCA9IDB4MjU1NjtcbiB0LlNGMjIwMDAwID0gMHgyNTU1O1xuIHQuU0YyMzAwMDAgPSAweDI1NjM7XG4gdC5TRjI0MDAwMCA9IDB4MjU1MTtcbiB0LlNGMjUwMDAwID0gMHgyNTU3O1xuIHQuU0YyNjAwMDAgPSAweDI1NWQ7XG4gdC5TRjI3MDAwMCA9IDB4MjU1YztcbiB0LlNGMjgwMDAwID0gMHgyNTViO1xuIHQuU0YzNjAwMDAgPSAweDI1NWU7XG4gdC5TRjM3MDAwMCA9IDB4MjU1ZjtcbiB0LlNGMzgwMDAwID0gMHgyNTVhO1xuIHQuU0YzOTAwMDAgPSAweDI1NTQ7XG4gdC5TRjQwMDAwMCA9IDB4MjU2OTtcbiB0LlNGNDEwMDAwID0gMHgyNTY2O1xuIHQuU0Y0MjAwMDAgPSAweDI1NjA7XG4gdC5TRjQzMDAwMCA9IDB4MjU1MDtcbiB0LlNGNDQwMDAwID0gMHgyNTZjO1xuIHQuU0Y0NTAwMDAgPSAweDI1Njc7XG4gdC5TRjQ2MDAwMCA9IDB4MjU2ODtcbiB0LlNGNDcwMDAwID0gMHgyNTY0O1xuIHQuU0Y0ODAwMDAgPSAweDI1NjU7XG4gdC5TRjQ5MDAwMCA9IDB4MjU1OTtcbiB0LlNGNTAwMDAwID0gMHgyNTU4O1xuIHQuU0Y1MTAwMDAgPSAweDI1NTI7XG4gdC5TRjUyMDAwMCA9IDB4MjU1MztcbiB0LlNGNTMwMDAwID0gMHgyNTZiO1xuIHQuU0Y1NDAwMDAgPSAweDI1NmE7XG4gdC5TYWN1dGUgPSAweDAxNWE7XG4gdC5TYWN1dGVkb3RhY2NlbnQgPSAweDFlNjQ7XG4gdC5TYW1waWdyZWVrID0gMHgwM2UwO1xuIHQuU2Nhcm9uID0gMHgwMTYwO1xuIHQuU2Nhcm9uZG90YWNjZW50ID0gMHgxZTY2O1xuIHQuU2Nhcm9uc21hbGwgPSAweGY2ZmQ7XG4gdC5TY2VkaWxsYSA9IDB4MDE1ZTtcbiB0LlNjaHdhID0gMHgwMThmO1xuIHQuU2Nod2FjeXJpbGxpYyA9IDB4MDRkODtcbiB0LlNjaHdhZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRkYTtcbiB0LlNjaXJjbGUgPSAweDI0Yzg7XG4gdC5TY2lyY3VtZmxleCA9IDB4MDE1YztcbiB0LlNjb21tYWFjY2VudCA9IDB4MDIxODtcbiB0LlNkb3RhY2NlbnQgPSAweDFlNjA7XG4gdC5TZG90YmVsb3cgPSAweDFlNjI7XG4gdC5TZG90YmVsb3dkb3RhY2NlbnQgPSAweDFlNjg7XG4gdC5TZWhhcm1lbmlhbiA9IDB4MDU0ZDtcbiB0LlNldmVucm9tYW4gPSAweDIxNjY7XG4gdC5TaGFhcm1lbmlhbiA9IDB4MDU0NztcbiB0LlNoYWN5cmlsbGljID0gMHgwNDI4O1xuIHQuU2hjaGFjeXJpbGxpYyA9IDB4MDQyOTtcbiB0LlNoZWljb3B0aWMgPSAweDAzZTI7XG4gdC5TaGhhY3lyaWxsaWMgPSAweDA0YmE7XG4gdC5TaGltYWNvcHRpYyA9IDB4MDNlYztcbiB0LlNpZ21hID0gMHgwM2EzO1xuIHQuU2l4cm9tYW4gPSAweDIxNjU7XG4gdC5TbW9ub3NwYWNlID0gMHhmZjMzO1xuIHQuU29mdHNpZ25jeXJpbGxpYyA9IDB4MDQyYztcbiB0LlNzbWFsbCA9IDB4Zjc3MztcbiB0LlN0aWdtYWdyZWVrID0gMHgwM2RhO1xuIHQuVCA9IDB4MDA1NDtcbiB0LlRhdSA9IDB4MDNhNDtcbiB0LlRiYXIgPSAweDAxNjY7XG4gdC5UY2Fyb24gPSAweDAxNjQ7XG4gdC5UY2VkaWxsYSA9IDB4MDE2MjtcbiB0LlRjaXJjbGUgPSAweDI0Yzk7XG4gdC5UY2lyY3VtZmxleGJlbG93ID0gMHgxZTcwO1xuIHQuVGNvbW1hYWNjZW50ID0gMHgwMTYyO1xuIHQuVGRvdGFjY2VudCA9IDB4MWU2YTtcbiB0LlRkb3RiZWxvdyA9IDB4MWU2YztcbiB0LlRlY3lyaWxsaWMgPSAweDA0MjI7XG4gdC5UZWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNGFjO1xuIHQuVGVucm9tYW4gPSAweDIxNjk7XG4gdC5UZXRzZWN5cmlsbGljID0gMHgwNGI0O1xuIHQuVGhldGEgPSAweDAzOTg7XG4gdC5UaG9vayA9IDB4MDFhYztcbiB0LlRob3JuID0gMHgwMGRlO1xuIHQuVGhvcm5zbWFsbCA9IDB4ZjdmZTtcbiB0LlRocmVlcm9tYW4gPSAweDIxNjI7XG4gdC5UaWxkZXNtYWxsID0gMHhmNmZlO1xuIHQuVGl3bmFybWVuaWFuID0gMHgwNTRmO1xuIHQuVGxpbmViZWxvdyA9IDB4MWU2ZTtcbiB0LlRtb25vc3BhY2UgPSAweGZmMzQ7XG4gdC5Ub2FybWVuaWFuID0gMHgwNTM5O1xuIHQuVG9uZWZpdmUgPSAweDAxYmM7XG4gdC5Ub25lc2l4ID0gMHgwMTg0O1xuIHQuVG9uZXR3byA9IDB4MDFhNztcbiB0LlRyZXRyb2ZsZXhob29rID0gMHgwMWFlO1xuIHQuVHNlY3lyaWxsaWMgPSAweDA0MjY7XG4gdC5Uc2hlY3lyaWxsaWMgPSAweDA0MGI7XG4gdC5Uc21hbGwgPSAweGY3NzQ7XG4gdC5Ud2VsdmVyb21hbiA9IDB4MjE2YjtcbiB0LlR3b3JvbWFuID0gMHgyMTYxO1xuIHQuVSA9IDB4MDA1NTtcbiB0LlVhY3V0ZSA9IDB4MDBkYTtcbiB0LlVhY3V0ZXNtYWxsID0gMHhmN2ZhO1xuIHQuVWJyZXZlID0gMHgwMTZjO1xuIHQuVWNhcm9uID0gMHgwMWQzO1xuIHQuVWNpcmNsZSA9IDB4MjRjYTtcbiB0LlVjaXJjdW1mbGV4ID0gMHgwMGRiO1xuIHQuVWNpcmN1bWZsZXhiZWxvdyA9IDB4MWU3NjtcbiB0LlVjaXJjdW1mbGV4c21hbGwgPSAweGY3ZmI7XG4gdC5VY3lyaWxsaWMgPSAweDA0MjM7XG4gdC5VZGJsYWN1dGUgPSAweDAxNzA7XG4gdC5VZGJsZ3JhdmUgPSAweDAyMTQ7XG4gdC5VZGllcmVzaXMgPSAweDAwZGM7XG4gdC5VZGllcmVzaXNhY3V0ZSA9IDB4MDFkNztcbiB0LlVkaWVyZXNpc2JlbG93ID0gMHgxZTcyO1xuIHQuVWRpZXJlc2lzY2Fyb24gPSAweDAxZDk7XG4gdC5VZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRmMDtcbiB0LlVkaWVyZXNpc2dyYXZlID0gMHgwMWRiO1xuIHQuVWRpZXJlc2lzbWFjcm9uID0gMHgwMWQ1O1xuIHQuVWRpZXJlc2lzc21hbGwgPSAweGY3ZmM7XG4gdC5VZG90YmVsb3cgPSAweDFlZTQ7XG4gdC5VZ3JhdmUgPSAweDAwZDk7XG4gdC5VZ3JhdmVzbWFsbCA9IDB4ZjdmOTtcbiB0LlVob29rYWJvdmUgPSAweDFlZTY7XG4gdC5VaG9ybiA9IDB4MDFhZjtcbiB0LlVob3JuYWN1dGUgPSAweDFlZTg7XG4gdC5VaG9ybmRvdGJlbG93ID0gMHgxZWYwO1xuIHQuVWhvcm5ncmF2ZSA9IDB4MWVlYTtcbiB0LlVob3JuaG9va2Fib3ZlID0gMHgxZWVjO1xuIHQuVWhvcm50aWxkZSA9IDB4MWVlZTtcbiB0LlVodW5nYXJ1bWxhdXQgPSAweDAxNzA7XG4gdC5VaHVuZ2FydW1sYXV0Y3lyaWxsaWMgPSAweDA0ZjI7XG4gdC5VaW52ZXJ0ZWRicmV2ZSA9IDB4MDIxNjtcbiB0LlVrY3lyaWxsaWMgPSAweDA0Nzg7XG4gdC5VbWFjcm9uID0gMHgwMTZhO1xuIHQuVW1hY3JvbmN5cmlsbGljID0gMHgwNGVlO1xuIHQuVW1hY3JvbmRpZXJlc2lzID0gMHgxZTdhO1xuIHQuVW1vbm9zcGFjZSA9IDB4ZmYzNTtcbiB0LlVvZ29uZWsgPSAweDAxNzI7XG4gdC5VcHNpbG9uID0gMHgwM2E1O1xuIHQuVXBzaWxvbjEgPSAweDAzZDI7XG4gdC5VcHNpbG9uYWN1dGVob29rc3ltYm9sZ3JlZWsgPSAweDAzZDM7XG4gdC5VcHNpbG9uYWZyaWNhbiA9IDB4MDFiMTtcbiB0LlVwc2lsb25kaWVyZXNpcyA9IDB4MDNhYjtcbiB0LlVwc2lsb25kaWVyZXNpc2hvb2tzeW1ib2xncmVlayA9IDB4MDNkNDtcbiB0LlVwc2lsb25ob29rc3ltYm9sID0gMHgwM2QyO1xuIHQuVXBzaWxvbnRvbm9zID0gMHgwMzhlO1xuIHQuVXJpbmcgPSAweDAxNmU7XG4gdC5Vc2hvcnRjeXJpbGxpYyA9IDB4MDQwZTtcbiB0LlVzbWFsbCA9IDB4Zjc3NTtcbiB0LlVzdHJhaWdodGN5cmlsbGljID0gMHgwNGFlO1xuIHQuVXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMgPSAweDA0YjA7XG4gdC5VdGlsZGUgPSAweDAxNjg7XG4gdC5VdGlsZGVhY3V0ZSA9IDB4MWU3ODtcbiB0LlV0aWxkZWJlbG93ID0gMHgxZTc0O1xuIHQuViA9IDB4MDA1NjtcbiB0LlZjaXJjbGUgPSAweDI0Y2I7XG4gdC5WZG90YmVsb3cgPSAweDFlN2U7XG4gdC5WZWN5cmlsbGljID0gMHgwNDEyO1xuIHQuVmV3YXJtZW5pYW4gPSAweDA1NGU7XG4gdC5WaG9vayA9IDB4MDFiMjtcbiB0LlZtb25vc3BhY2UgPSAweGZmMzY7XG4gdC5Wb2FybWVuaWFuID0gMHgwNTQ4O1xuIHQuVnNtYWxsID0gMHhmNzc2O1xuIHQuVnRpbGRlID0gMHgxZTdjO1xuIHQuVyA9IDB4MDA1NztcbiB0LldhY3V0ZSA9IDB4MWU4MjtcbiB0LldjaXJjbGUgPSAweDI0Y2M7XG4gdC5XY2lyY3VtZmxleCA9IDB4MDE3NDtcbiB0LldkaWVyZXNpcyA9IDB4MWU4NDtcbiB0Lldkb3RhY2NlbnQgPSAweDFlODY7XG4gdC5XZG90YmVsb3cgPSAweDFlODg7XG4gdC5XZ3JhdmUgPSAweDFlODA7XG4gdC5XbW9ub3NwYWNlID0gMHhmZjM3O1xuIHQuV3NtYWxsID0gMHhmNzc3O1xuIHQuWCA9IDB4MDA1ODtcbiB0LlhjaXJjbGUgPSAweDI0Y2Q7XG4gdC5YZGllcmVzaXMgPSAweDFlOGM7XG4gdC5YZG90YWNjZW50ID0gMHgxZThhO1xuIHQuWGVoYXJtZW5pYW4gPSAweDA1M2Q7XG4gdC5YaSA9IDB4MDM5ZTtcbiB0Llhtb25vc3BhY2UgPSAweGZmMzg7XG4gdC5Yc21hbGwgPSAweGY3Nzg7XG4gdC5ZID0gMHgwMDU5O1xuIHQuWWFjdXRlID0gMHgwMGRkO1xuIHQuWWFjdXRlc21hbGwgPSAweGY3ZmQ7XG4gdC5ZYXRjeXJpbGxpYyA9IDB4MDQ2MjtcbiB0LlljaXJjbGUgPSAweDI0Y2U7XG4gdC5ZY2lyY3VtZmxleCA9IDB4MDE3NjtcbiB0LllkaWVyZXNpcyA9IDB4MDE3ODtcbiB0LllkaWVyZXNpc3NtYWxsID0gMHhmN2ZmO1xuIHQuWWRvdGFjY2VudCA9IDB4MWU4ZTtcbiB0Lllkb3RiZWxvdyA9IDB4MWVmNDtcbiB0LlllcmljeXJpbGxpYyA9IDB4MDQyYjtcbiB0LlllcnVkaWVyZXNpc2N5cmlsbGljID0gMHgwNGY4O1xuIHQuWWdyYXZlID0gMHgxZWYyO1xuIHQuWWhvb2sgPSAweDAxYjM7XG4gdC5ZaG9va2Fib3ZlID0gMHgxZWY2O1xuIHQuWWlhcm1lbmlhbiA9IDB4MDU0NTtcbiB0LllpY3lyaWxsaWMgPSAweDA0MDc7XG4gdC5ZaXduYXJtZW5pYW4gPSAweDA1NTI7XG4gdC5ZbW9ub3NwYWNlID0gMHhmZjM5O1xuIHQuWXNtYWxsID0gMHhmNzc5O1xuIHQuWXRpbGRlID0gMHgxZWY4O1xuIHQuWXVzYmlnY3lyaWxsaWMgPSAweDA0NmE7XG4gdC5ZdXNiaWdpb3RpZmllZGN5cmlsbGljID0gMHgwNDZjO1xuIHQuWXVzbGl0dGxlY3lyaWxsaWMgPSAweDA0NjY7XG4gdC5ZdXNsaXR0bGVpb3RpZmllZGN5cmlsbGljID0gMHgwNDY4O1xuIHQuWiA9IDB4MDA1YTtcbiB0LlphYXJtZW5pYW4gPSAweDA1MzY7XG4gdC5aYWN1dGUgPSAweDAxNzk7XG4gdC5aY2Fyb24gPSAweDAxN2Q7XG4gdC5aY2Fyb25zbWFsbCA9IDB4ZjZmZjtcbiB0LlpjaXJjbGUgPSAweDI0Y2Y7XG4gdC5aY2lyY3VtZmxleCA9IDB4MWU5MDtcbiB0Llpkb3QgPSAweDAxN2I7XG4gdC5aZG90YWNjZW50ID0gMHgwMTdiO1xuIHQuWmRvdGJlbG93ID0gMHgxZTkyO1xuIHQuWmVjeXJpbGxpYyA9IDB4MDQxNztcbiB0LlplZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0OTg7XG4gdC5aZWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZGU7XG4gdC5aZXRhID0gMHgwMzk2O1xuIHQuWmhlYXJtZW5pYW4gPSAweDA1M2E7XG4gdC5aaGVicmV2ZWN5cmlsbGljID0gMHgwNGMxO1xuIHQuWmhlY3lyaWxsaWMgPSAweDA0MTY7XG4gdC5aaGVkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDQ5NjtcbiB0LlpoZWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZGM7XG4gdC5abGluZWJlbG93ID0gMHgxZTk0O1xuIHQuWm1vbm9zcGFjZSA9IDB4ZmYzYTtcbiB0LlpzbWFsbCA9IDB4Zjc3YTtcbiB0LlpzdHJva2UgPSAweDAxYjU7XG4gdC5hID0gMHgwMDYxO1xuIHQuYWFiZW5nYWxpID0gMHgwOTg2O1xuIHQuYWFjdXRlID0gMHgwMGUxO1xuIHQuYWFkZXZhID0gMHgwOTA2O1xuIHQuYWFndWphcmF0aSA9IDB4MGE4NjtcbiB0LmFhZ3VybXVraGkgPSAweDBhMDY7XG4gdC5hYW1hdHJhZ3VybXVraGkgPSAweDBhM2U7XG4gdC5hYXJ1c3F1YXJlID0gMHgzMzAzO1xuIHQuYWF2b3dlbHNpZ25iZW5nYWxpID0gMHgwOWJlO1xuIHQuYWF2b3dlbHNpZ25kZXZhID0gMHgwOTNlO1xuIHQuYWF2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFiZTtcbiB0LmFiYnJldmlhdGlvbm1hcmthcm1lbmlhbiA9IDB4MDU1ZjtcbiB0LmFiYnJldmlhdGlvbnNpZ25kZXZhID0gMHgwOTcwO1xuIHQuYWJlbmdhbGkgPSAweDA5ODU7XG4gdC5hYm9wb21vZm8gPSAweDMxMWE7XG4gdC5hYnJldmUgPSAweDAxMDM7XG4gdC5hYnJldmVhY3V0ZSA9IDB4MWVhZjtcbiB0LmFicmV2ZWN5cmlsbGljID0gMHgwNGQxO1xuIHQuYWJyZXZlZG90YmVsb3cgPSAweDFlYjc7XG4gdC5hYnJldmVncmF2ZSA9IDB4MWViMTtcbiB0LmFicmV2ZWhvb2thYm92ZSA9IDB4MWViMztcbiB0LmFicmV2ZXRpbGRlID0gMHgxZWI1O1xuIHQuYWNhcm9uID0gMHgwMWNlO1xuIHQuYWNpcmNsZSA9IDB4MjRkMDtcbiB0LmFjaXJjdW1mbGV4ID0gMHgwMGUyO1xuIHQuYWNpcmN1bWZsZXhhY3V0ZSA9IDB4MWVhNTtcbiB0LmFjaXJjdW1mbGV4ZG90YmVsb3cgPSAweDFlYWQ7XG4gdC5hY2lyY3VtZmxleGdyYXZlID0gMHgxZWE3O1xuIHQuYWNpcmN1bWZsZXhob29rYWJvdmUgPSAweDFlYTk7XG4gdC5hY2lyY3VtZmxleHRpbGRlID0gMHgxZWFiO1xuIHQuYWN1dGUgPSAweDAwYjQ7XG4gdC5hY3V0ZWJlbG93Y21iID0gMHgwMzE3O1xuIHQuYWN1dGVjbWIgPSAweDAzMDE7XG4gdC5hY3V0ZWNvbWIgPSAweDAzMDE7XG4gdC5hY3V0ZWRldmEgPSAweDA5NTQ7XG4gdC5hY3V0ZWxvd21vZCA9IDB4MDJjZjtcbiB0LmFjdXRldG9uZWNtYiA9IDB4MDM0MTtcbiB0LmFjeXJpbGxpYyA9IDB4MDQzMDtcbiB0LmFkYmxncmF2ZSA9IDB4MDIwMTtcbiB0LmFkZGFrZ3VybXVraGkgPSAweDBhNzE7XG4gdC5hZGV2YSA9IDB4MDkwNTtcbiB0LmFkaWVyZXNpcyA9IDB4MDBlNDtcbiB0LmFkaWVyZXNpc2N5cmlsbGljID0gMHgwNGQzO1xuIHQuYWRpZXJlc2lzbWFjcm9uID0gMHgwMWRmO1xuIHQuYWRvdGJlbG93ID0gMHgxZWExO1xuIHQuYWRvdG1hY3JvbiA9IDB4MDFlMTtcbiB0LmFlID0gMHgwMGU2O1xuIHQuYWVhY3V0ZSA9IDB4MDFmZDtcbiB0LmFla29yZWFuID0gMHgzMTUwO1xuIHQuYWVtYWNyb24gPSAweDAxZTM7XG4gdC5hZmlpMDAyMDggPSAweDIwMTU7XG4gdC5hZmlpMDg5NDEgPSAweDIwYTQ7XG4gdC5hZmlpMTAwMTcgPSAweDA0MTA7XG4gdC5hZmlpMTAwMTggPSAweDA0MTE7XG4gdC5hZmlpMTAwMTkgPSAweDA0MTI7XG4gdC5hZmlpMTAwMjAgPSAweDA0MTM7XG4gdC5hZmlpMTAwMjEgPSAweDA0MTQ7XG4gdC5hZmlpMTAwMjIgPSAweDA0MTU7XG4gdC5hZmlpMTAwMjMgPSAweDA0MDE7XG4gdC5hZmlpMTAwMjQgPSAweDA0MTY7XG4gdC5hZmlpMTAwMjUgPSAweDA0MTc7XG4gdC5hZmlpMTAwMjYgPSAweDA0MTg7XG4gdC5hZmlpMTAwMjcgPSAweDA0MTk7XG4gdC5hZmlpMTAwMjggPSAweDA0MWE7XG4gdC5hZmlpMTAwMjkgPSAweDA0MWI7XG4gdC5hZmlpMTAwMzAgPSAweDA0MWM7XG4gdC5hZmlpMTAwMzEgPSAweDA0MWQ7XG4gdC5hZmlpMTAwMzIgPSAweDA0MWU7XG4gdC5hZmlpMTAwMzMgPSAweDA0MWY7XG4gdC5hZmlpMTAwMzQgPSAweDA0MjA7XG4gdC5hZmlpMTAwMzUgPSAweDA0MjE7XG4gdC5hZmlpMTAwMzYgPSAweDA0MjI7XG4gdC5hZmlpMTAwMzcgPSAweDA0MjM7XG4gdC5hZmlpMTAwMzggPSAweDA0MjQ7XG4gdC5hZmlpMTAwMzkgPSAweDA0MjU7XG4gdC5hZmlpMTAwNDAgPSAweDA0MjY7XG4gdC5hZmlpMTAwNDEgPSAweDA0Mjc7XG4gdC5hZmlpMTAwNDIgPSAweDA0Mjg7XG4gdC5hZmlpMTAwNDMgPSAweDA0Mjk7XG4gdC5hZmlpMTAwNDQgPSAweDA0MmE7XG4gdC5hZmlpMTAwNDUgPSAweDA0MmI7XG4gdC5hZmlpMTAwNDYgPSAweDA0MmM7XG4gdC5hZmlpMTAwNDcgPSAweDA0MmQ7XG4gdC5hZmlpMTAwNDggPSAweDA0MmU7XG4gdC5hZmlpMTAwNDkgPSAweDA0MmY7XG4gdC5hZmlpMTAwNTAgPSAweDA0OTA7XG4gdC5hZmlpMTAwNTEgPSAweDA0MDI7XG4gdC5hZmlpMTAwNTIgPSAweDA0MDM7XG4gdC5hZmlpMTAwNTMgPSAweDA0MDQ7XG4gdC5hZmlpMTAwNTQgPSAweDA0MDU7XG4gdC5hZmlpMTAwNTUgPSAweDA0MDY7XG4gdC5hZmlpMTAwNTYgPSAweDA0MDc7XG4gdC5hZmlpMTAwNTcgPSAweDA0MDg7XG4gdC5hZmlpMTAwNTggPSAweDA0MDk7XG4gdC5hZmlpMTAwNTkgPSAweDA0MGE7XG4gdC5hZmlpMTAwNjAgPSAweDA0MGI7XG4gdC5hZmlpMTAwNjEgPSAweDA0MGM7XG4gdC5hZmlpMTAwNjIgPSAweDA0MGU7XG4gdC5hZmlpMTAwNjMgPSAweGY2YzQ7XG4gdC5hZmlpMTAwNjQgPSAweGY2YzU7XG4gdC5hZmlpMTAwNjUgPSAweDA0MzA7XG4gdC5hZmlpMTAwNjYgPSAweDA0MzE7XG4gdC5hZmlpMTAwNjcgPSAweDA0MzI7XG4gdC5hZmlpMTAwNjggPSAweDA0MzM7XG4gdC5hZmlpMTAwNjkgPSAweDA0MzQ7XG4gdC5hZmlpMTAwNzAgPSAweDA0MzU7XG4gdC5hZmlpMTAwNzEgPSAweDA0NTE7XG4gdC5hZmlpMTAwNzIgPSAweDA0MzY7XG4gdC5hZmlpMTAwNzMgPSAweDA0Mzc7XG4gdC5hZmlpMTAwNzQgPSAweDA0Mzg7XG4gdC5hZmlpMTAwNzUgPSAweDA0Mzk7XG4gdC5hZmlpMTAwNzYgPSAweDA0M2E7XG4gdC5hZmlpMTAwNzcgPSAweDA0M2I7XG4gdC5hZmlpMTAwNzggPSAweDA0M2M7XG4gdC5hZmlpMTAwNzkgPSAweDA0M2Q7XG4gdC5hZmlpMTAwODAgPSAweDA0M2U7XG4gdC5hZmlpMTAwODEgPSAweDA0M2Y7XG4gdC5hZmlpMTAwODIgPSAweDA0NDA7XG4gdC5hZmlpMTAwODMgPSAweDA0NDE7XG4gdC5hZmlpMTAwODQgPSAweDA0NDI7XG4gdC5hZmlpMTAwODUgPSAweDA0NDM7XG4gdC5hZmlpMTAwODYgPSAweDA0NDQ7XG4gdC5hZmlpMTAwODcgPSAweDA0NDU7XG4gdC5hZmlpMTAwODggPSAweDA0NDY7XG4gdC5hZmlpMTAwODkgPSAweDA0NDc7XG4gdC5hZmlpMTAwOTAgPSAweDA0NDg7XG4gdC5hZmlpMTAwOTEgPSAweDA0NDk7XG4gdC5hZmlpMTAwOTIgPSAweDA0NGE7XG4gdC5hZmlpMTAwOTMgPSAweDA0NGI7XG4gdC5hZmlpMTAwOTQgPSAweDA0NGM7XG4gdC5hZmlpMTAwOTUgPSAweDA0NGQ7XG4gdC5hZmlpMTAwOTYgPSAweDA0NGU7XG4gdC5hZmlpMTAwOTcgPSAweDA0NGY7XG4gdC5hZmlpMTAwOTggPSAweDA0OTE7XG4gdC5hZmlpMTAwOTkgPSAweDA0NTI7XG4gdC5hZmlpMTAxMDAgPSAweDA0NTM7XG4gdC5hZmlpMTAxMDEgPSAweDA0NTQ7XG4gdC5hZmlpMTAxMDIgPSAweDA0NTU7XG4gdC5hZmlpMTAxMDMgPSAweDA0NTY7XG4gdC5hZmlpMTAxMDQgPSAweDA0NTc7XG4gdC5hZmlpMTAxMDUgPSAweDA0NTg7XG4gdC5hZmlpMTAxMDYgPSAweDA0NTk7XG4gdC5hZmlpMTAxMDcgPSAweDA0NWE7XG4gdC5hZmlpMTAxMDggPSAweDA0NWI7XG4gdC5hZmlpMTAxMDkgPSAweDA0NWM7XG4gdC5hZmlpMTAxMTAgPSAweDA0NWU7XG4gdC5hZmlpMTAxNDUgPSAweDA0MGY7XG4gdC5hZmlpMTAxNDYgPSAweDA0NjI7XG4gdC5hZmlpMTAxNDcgPSAweDA0NzI7XG4gdC5hZmlpMTAxNDggPSAweDA0NzQ7XG4gdC5hZmlpMTAxOTIgPSAweGY2YzY7XG4gdC5hZmlpMTAxOTMgPSAweDA0NWY7XG4gdC5hZmlpMTAxOTQgPSAweDA0NjM7XG4gdC5hZmlpMTAxOTUgPSAweDA0NzM7XG4gdC5hZmlpMTAxOTYgPSAweDA0NzU7XG4gdC5hZmlpMTA4MzEgPSAweGY2Yzc7XG4gdC5hZmlpMTA4MzIgPSAweGY2Yzg7XG4gdC5hZmlpMTA4NDYgPSAweDA0ZDk7XG4gdC5hZmlpMjk5ID0gMHgyMDBlO1xuIHQuYWZpaTMwMCA9IDB4MjAwZjtcbiB0LmFmaWkzMDEgPSAweDIwMGQ7XG4gdC5hZmlpNTczODEgPSAweDA2NmE7XG4gdC5hZmlpNTczODggPSAweDA2MGM7XG4gdC5hZmlpNTczOTIgPSAweDA2NjA7XG4gdC5hZmlpNTczOTMgPSAweDA2NjE7XG4gdC5hZmlpNTczOTQgPSAweDA2NjI7XG4gdC5hZmlpNTczOTUgPSAweDA2NjM7XG4gdC5hZmlpNTczOTYgPSAweDA2NjQ7XG4gdC5hZmlpNTczOTcgPSAweDA2NjU7XG4gdC5hZmlpNTczOTggPSAweDA2NjY7XG4gdC5hZmlpNTczOTkgPSAweDA2Njc7XG4gdC5hZmlpNTc0MDAgPSAweDA2Njg7XG4gdC5hZmlpNTc0MDEgPSAweDA2Njk7XG4gdC5hZmlpNTc0MDMgPSAweDA2MWI7XG4gdC5hZmlpNTc0MDcgPSAweDA2MWY7XG4gdC5hZmlpNTc0MDkgPSAweDA2MjE7XG4gdC5hZmlpNTc0MTAgPSAweDA2MjI7XG4gdC5hZmlpNTc0MTEgPSAweDA2MjM7XG4gdC5hZmlpNTc0MTIgPSAweDA2MjQ7XG4gdC5hZmlpNTc0MTMgPSAweDA2MjU7XG4gdC5hZmlpNTc0MTQgPSAweDA2MjY7XG4gdC5hZmlpNTc0MTUgPSAweDA2Mjc7XG4gdC5hZmlpNTc0MTYgPSAweDA2Mjg7XG4gdC5hZmlpNTc0MTcgPSAweDA2Mjk7XG4gdC5hZmlpNTc0MTggPSAweDA2MmE7XG4gdC5hZmlpNTc0MTkgPSAweDA2MmI7XG4gdC5hZmlpNTc0MjAgPSAweDA2MmM7XG4gdC5hZmlpNTc0MjEgPSAweDA2MmQ7XG4gdC5hZmlpNTc0MjIgPSAweDA2MmU7XG4gdC5hZmlpNTc0MjMgPSAweDA2MmY7XG4gdC5hZmlpNTc0MjQgPSAweDA2MzA7XG4gdC5hZmlpNTc0MjUgPSAweDA2MzE7XG4gdC5hZmlpNTc0MjYgPSAweDA2MzI7XG4gdC5hZmlpNTc0MjcgPSAweDA2MzM7XG4gdC5hZmlpNTc0MjggPSAweDA2MzQ7XG4gdC5hZmlpNTc0MjkgPSAweDA2MzU7XG4gdC5hZmlpNTc0MzAgPSAweDA2MzY7XG4gdC5hZmlpNTc0MzEgPSAweDA2Mzc7XG4gdC5hZmlpNTc0MzIgPSAweDA2Mzg7XG4gdC5hZmlpNTc0MzMgPSAweDA2Mzk7XG4gdC5hZmlpNTc0MzQgPSAweDA2M2E7XG4gdC5hZmlpNTc0NDAgPSAweDA2NDA7XG4gdC5hZmlpNTc0NDEgPSAweDA2NDE7XG4gdC5hZmlpNTc0NDIgPSAweDA2NDI7XG4gdC5hZmlpNTc0NDMgPSAweDA2NDM7XG4gdC5hZmlpNTc0NDQgPSAweDA2NDQ7XG4gdC5hZmlpNTc0NDUgPSAweDA2NDU7XG4gdC5hZmlpNTc0NDYgPSAweDA2NDY7XG4gdC5hZmlpNTc0NDggPSAweDA2NDg7XG4gdC5hZmlpNTc0NDkgPSAweDA2NDk7XG4gdC5hZmlpNTc0NTAgPSAweDA2NGE7XG4gdC5hZmlpNTc0NTEgPSAweDA2NGI7XG4gdC5hZmlpNTc0NTIgPSAweDA2NGM7XG4gdC5hZmlpNTc0NTMgPSAweDA2NGQ7XG4gdC5hZmlpNTc0NTQgPSAweDA2NGU7XG4gdC5hZmlpNTc0NTUgPSAweDA2NGY7XG4gdC5hZmlpNTc0NTYgPSAweDA2NTA7XG4gdC5hZmlpNTc0NTcgPSAweDA2NTE7XG4gdC5hZmlpNTc0NTggPSAweDA2NTI7XG4gdC5hZmlpNTc0NzAgPSAweDA2NDc7XG4gdC5hZmlpNTc1MDUgPSAweDA2YTQ7XG4gdC5hZmlpNTc1MDYgPSAweDA2N2U7XG4gdC5hZmlpNTc1MDcgPSAweDA2ODY7XG4gdC5hZmlpNTc1MDggPSAweDA2OTg7XG4gdC5hZmlpNTc1MDkgPSAweDA2YWY7XG4gdC5hZmlpNTc1MTEgPSAweDA2Nzk7XG4gdC5hZmlpNTc1MTIgPSAweDA2ODg7XG4gdC5hZmlpNTc1MTMgPSAweDA2OTE7XG4gdC5hZmlpNTc1MTQgPSAweDA2YmE7XG4gdC5hZmlpNTc1MTkgPSAweDA2ZDI7XG4gdC5hZmlpNTc1MzQgPSAweDA2ZDU7XG4gdC5hZmlpNTc2MzYgPSAweDIwYWE7XG4gdC5hZmlpNTc2NDUgPSAweDA1YmU7XG4gdC5hZmlpNTc2NTggPSAweDA1YzM7XG4gdC5hZmlpNTc2NjQgPSAweDA1ZDA7XG4gdC5hZmlpNTc2NjUgPSAweDA1ZDE7XG4gdC5hZmlpNTc2NjYgPSAweDA1ZDI7XG4gdC5hZmlpNTc2NjcgPSAweDA1ZDM7XG4gdC5hZmlpNTc2NjggPSAweDA1ZDQ7XG4gdC5hZmlpNTc2NjkgPSAweDA1ZDU7XG4gdC5hZmlpNTc2NzAgPSAweDA1ZDY7XG4gdC5hZmlpNTc2NzEgPSAweDA1ZDc7XG4gdC5hZmlpNTc2NzIgPSAweDA1ZDg7XG4gdC5hZmlpNTc2NzMgPSAweDA1ZDk7XG4gdC5hZmlpNTc2NzQgPSAweDA1ZGE7XG4gdC5hZmlpNTc2NzUgPSAweDA1ZGI7XG4gdC5hZmlpNTc2NzYgPSAweDA1ZGM7XG4gdC5hZmlpNTc2NzcgPSAweDA1ZGQ7XG4gdC5hZmlpNTc2NzggPSAweDA1ZGU7XG4gdC5hZmlpNTc2NzkgPSAweDA1ZGY7XG4gdC5hZmlpNTc2ODAgPSAweDA1ZTA7XG4gdC5hZmlpNTc2ODEgPSAweDA1ZTE7XG4gdC5hZmlpNTc2ODIgPSAweDA1ZTI7XG4gdC5hZmlpNTc2ODMgPSAweDA1ZTM7XG4gdC5hZmlpNTc2ODQgPSAweDA1ZTQ7XG4gdC5hZmlpNTc2ODUgPSAweDA1ZTU7XG4gdC5hZmlpNTc2ODYgPSAweDA1ZTY7XG4gdC5hZmlpNTc2ODcgPSAweDA1ZTc7XG4gdC5hZmlpNTc2ODggPSAweDA1ZTg7XG4gdC5hZmlpNTc2ODkgPSAweDA1ZTk7XG4gdC5hZmlpNTc2OTAgPSAweDA1ZWE7XG4gdC5hZmlpNTc2OTQgPSAweGZiMmE7XG4gdC5hZmlpNTc2OTUgPSAweGZiMmI7XG4gdC5hZmlpNTc3MDAgPSAweGZiNGI7XG4gdC5hZmlpNTc3MDUgPSAweGZiMWY7XG4gdC5hZmlpNTc3MTYgPSAweDA1ZjA7XG4gdC5hZmlpNTc3MTcgPSAweDA1ZjE7XG4gdC5hZmlpNTc3MTggPSAweDA1ZjI7XG4gdC5hZmlpNTc3MjMgPSAweGZiMzU7XG4gdC5hZmlpNTc3OTMgPSAweDA1YjQ7XG4gdC5hZmlpNTc3OTQgPSAweDA1YjU7XG4gdC5hZmlpNTc3OTUgPSAweDA1YjY7XG4gdC5hZmlpNTc3OTYgPSAweDA1YmI7XG4gdC5hZmlpNTc3OTcgPSAweDA1Yjg7XG4gdC5hZmlpNTc3OTggPSAweDA1Yjc7XG4gdC5hZmlpNTc3OTkgPSAweDA1YjA7XG4gdC5hZmlpNTc4MDAgPSAweDA1YjI7XG4gdC5hZmlpNTc4MDEgPSAweDA1YjE7XG4gdC5hZmlpNTc4MDIgPSAweDA1YjM7XG4gdC5hZmlpNTc4MDMgPSAweDA1YzI7XG4gdC5hZmlpNTc4MDQgPSAweDA1YzE7XG4gdC5hZmlpNTc4MDYgPSAweDA1Yjk7XG4gdC5hZmlpNTc4MDcgPSAweDA1YmM7XG4gdC5hZmlpNTc4MzkgPSAweDA1YmQ7XG4gdC5hZmlpNTc4NDEgPSAweDA1YmY7XG4gdC5hZmlpNTc4NDIgPSAweDA1YzA7XG4gdC5hZmlpNTc5MjkgPSAweDAyYmM7XG4gdC5hZmlpNjEyNDggPSAweDIxMDU7XG4gdC5hZmlpNjEyODkgPSAweDIxMTM7XG4gdC5hZmlpNjEzNTIgPSAweDIxMTY7XG4gdC5hZmlpNjE1NzMgPSAweDIwMmM7XG4gdC5hZmlpNjE1NzQgPSAweDIwMmQ7XG4gdC5hZmlpNjE1NzUgPSAweDIwMmU7XG4gdC5hZmlpNjE2NjQgPSAweDIwMGM7XG4gdC5hZmlpNjMxNjcgPSAweDA2NmQ7XG4gdC5hZmlpNjQ5MzcgPSAweDAyYmQ7XG4gdC5hZ3JhdmUgPSAweDAwZTA7XG4gdC5hZ3VqYXJhdGkgPSAweDBhODU7XG4gdC5hZ3VybXVraGkgPSAweDBhMDU7XG4gdC5haGlyYWdhbmEgPSAweDMwNDI7XG4gdC5haG9va2Fib3ZlID0gMHgxZWEzO1xuIHQuYWliZW5nYWxpID0gMHgwOTkwO1xuIHQuYWlib3BvbW9mbyA9IDB4MzExZTtcbiB0LmFpZGV2YSA9IDB4MDkxMDtcbiB0LmFpZWN5cmlsbGljID0gMHgwNGQ1O1xuIHQuYWlndWphcmF0aSA9IDB4MGE5MDtcbiB0LmFpZ3VybXVraGkgPSAweDBhMTA7XG4gdC5haW1hdHJhZ3VybXVraGkgPSAweDBhNDg7XG4gdC5haW5hcmFiaWMgPSAweDA2Mzk7XG4gdC5haW5maW5hbGFyYWJpYyA9IDB4ZmVjYTtcbiB0LmFpbmluaXRpYWxhcmFiaWMgPSAweGZlY2I7XG4gdC5haW5tZWRpYWxhcmFiaWMgPSAweGZlY2M7XG4gdC5haW52ZXJ0ZWRicmV2ZSA9IDB4MDIwMztcbiB0LmFpdm93ZWxzaWduYmVuZ2FsaSA9IDB4MDljODtcbiB0LmFpdm93ZWxzaWduZGV2YSA9IDB4MDk0ODtcbiB0LmFpdm93ZWxzaWduZ3VqYXJhdGkgPSAweDBhYzg7XG4gdC5ha2F0YWthbmEgPSAweDMwYTI7XG4gdC5ha2F0YWthbmFoYWxmd2lkdGggPSAweGZmNzE7XG4gdC5ha29yZWFuID0gMHgzMTRmO1xuIHQuYWxlZiA9IDB4MDVkMDtcbiB0LmFsZWZhcmFiaWMgPSAweDA2Mjc7XG4gdC5hbGVmZGFnZXNoaGVicmV3ID0gMHhmYjMwO1xuIHQuYWxlZmZpbmFsYXJhYmljID0gMHhmZThlO1xuIHQuYWxlZmhhbXphYWJvdmVhcmFiaWMgPSAweDA2MjM7XG4gdC5hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljID0gMHhmZTg0O1xuIHQuYWxlZmhhbXphYmVsb3dhcmFiaWMgPSAweDA2MjU7XG4gdC5hbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljID0gMHhmZTg4O1xuIHQuYWxlZmhlYnJldyA9IDB4MDVkMDtcbiB0LmFsZWZsYW1lZGhlYnJldyA9IDB4ZmI0ZjtcbiB0LmFsZWZtYWRkYWFib3ZlYXJhYmljID0gMHgwNjIyO1xuIHQuYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYyA9IDB4ZmU4MjtcbiB0LmFsZWZtYWtzdXJhYXJhYmljID0gMHgwNjQ5O1xuIHQuYWxlZm1ha3N1cmFmaW5hbGFyYWJpYyA9IDB4ZmVmMDtcbiB0LmFsZWZtYWtzdXJhaW5pdGlhbGFyYWJpYyA9IDB4ZmVmMztcbiB0LmFsZWZtYWtzdXJhbWVkaWFsYXJhYmljID0gMHhmZWY0O1xuIHQuYWxlZnBhdGFoaGVicmV3ID0gMHhmYjJlO1xuIHQuYWxlZnFhbWF0c2hlYnJldyA9IDB4ZmIyZjtcbiB0LmFsZXBoID0gMHgyMTM1O1xuIHQuYWxsZXF1YWwgPSAweDIyNGM7XG4gdC5hbHBoYSA9IDB4MDNiMTtcbiB0LmFscGhhdG9ub3MgPSAweDAzYWM7XG4gdC5hbWFjcm9uID0gMHgwMTAxO1xuIHQuYW1vbm9zcGFjZSA9IDB4ZmY0MTtcbiB0LmFtcGVyc2FuZCA9IDB4MDAyNjtcbiB0LmFtcGVyc2FuZG1vbm9zcGFjZSA9IDB4ZmYwNjtcbiB0LmFtcGVyc2FuZHNtYWxsID0gMHhmNzI2O1xuIHQuYW1zcXVhcmUgPSAweDMzYzI7XG4gdC5hbmJvcG9tb2ZvID0gMHgzMTIyO1xuIHQuYW5nYm9wb21vZm8gPSAweDMxMjQ7XG4gdC5hbmdicmFja2V0bGVmdCA9IDB4MzAwODtcbiB0LmFuZ2JyYWNrZXRyaWdodCA9IDB4MzAwOTtcbiB0LmFuZ2toYW5raHV0aGFpID0gMHgwZTVhO1xuIHQuYW5nbGUgPSAweDIyMjA7XG4gdC5hbmdsZWJyYWNrZXRsZWZ0ID0gMHgzMDA4O1xuIHQuYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsID0gMHhmZTNmO1xuIHQuYW5nbGVicmFja2V0cmlnaHQgPSAweDMwMDk7XG4gdC5hbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsID0gMHhmZTQwO1xuIHQuYW5nbGVsZWZ0ID0gMHgyMzI5O1xuIHQuYW5nbGVyaWdodCA9IDB4MjMyYTtcbiB0LmFuZ3N0cm9tID0gMHgyMTJiO1xuIHQuYW5vdGVsZWlhID0gMHgwMzg3O1xuIHQuYW51ZGF0dGFkZXZhID0gMHgwOTUyO1xuIHQuYW51c3ZhcmFiZW5nYWxpID0gMHgwOTgyO1xuIHQuYW51c3ZhcmFkZXZhID0gMHgwOTAyO1xuIHQuYW51c3ZhcmFndWphcmF0aSA9IDB4MGE4MjtcbiB0LmFvZ29uZWsgPSAweDAxMDU7XG4gdC5hcGFhdG9zcXVhcmUgPSAweDMzMDA7XG4gdC5hcGFyZW4gPSAweDI0OWM7XG4gdC5hcG9zdHJvcGhlYXJtZW5pYW4gPSAweDA1NWE7XG4gdC5hcG9zdHJvcGhlbW9kID0gMHgwMmJjO1xuIHQuYXBwbGUgPSAweGY4ZmY7XG4gdC5hcHByb2FjaGVzID0gMHgyMjUwO1xuIHQuYXBwcm94ZXF1YWwgPSAweDIyNDg7XG4gdC5hcHByb3hlcXVhbG9yaW1hZ2UgPSAweDIyNTI7XG4gdC5hcHByb3hpbWF0ZWx5ZXF1YWwgPSAweDIyNDU7XG4gdC5hcmFlYWVrb3JlYW4gPSAweDMxOGU7XG4gdC5hcmFlYWtvcmVhbiA9IDB4MzE4ZDtcbiB0LmFyYyA9IDB4MjMxMjtcbiB0LmFyaWdodGhhbGZyaW5nID0gMHgxZTlhO1xuIHQuYXJpbmcgPSAweDAwZTU7XG4gdC5hcmluZ2FjdXRlID0gMHgwMWZiO1xuIHQuYXJpbmdiZWxvdyA9IDB4MWUwMTtcbiB0LmFycm93Ym90aCA9IDB4MjE5NDtcbiB0LmFycm93ZGFzaGRvd24gPSAweDIxZTM7XG4gdC5hcnJvd2Rhc2hsZWZ0ID0gMHgyMWUwO1xuIHQuYXJyb3dkYXNocmlnaHQgPSAweDIxZTI7XG4gdC5hcnJvd2Rhc2h1cCA9IDB4MjFlMTtcbiB0LmFycm93ZGJsYm90aCA9IDB4MjFkNDtcbiB0LmFycm93ZGJsZG93biA9IDB4MjFkMztcbiB0LmFycm93ZGJsbGVmdCA9IDB4MjFkMDtcbiB0LmFycm93ZGJscmlnaHQgPSAweDIxZDI7XG4gdC5hcnJvd2RibHVwID0gMHgyMWQxO1xuIHQuYXJyb3dkb3duID0gMHgyMTkzO1xuIHQuYXJyb3dkb3dubGVmdCA9IDB4MjE5OTtcbiB0LmFycm93ZG93bnJpZ2h0ID0gMHgyMTk4O1xuIHQuYXJyb3dkb3dud2hpdGUgPSAweDIxZTk7XG4gdC5hcnJvd2hlYWRkb3dubW9kID0gMHgwMmM1O1xuIHQuYXJyb3doZWFkbGVmdG1vZCA9IDB4MDJjMjtcbiB0LmFycm93aGVhZHJpZ2h0bW9kID0gMHgwMmMzO1xuIHQuYXJyb3doZWFkdXBtb2QgPSAweDAyYzQ7XG4gdC5hcnJvd2hvcml6ZXggPSAweGY4ZTc7XG4gdC5hcnJvd2xlZnQgPSAweDIxOTA7XG4gdC5hcnJvd2xlZnRkYmwgPSAweDIxZDA7XG4gdC5hcnJvd2xlZnRkYmxzdHJva2UgPSAweDIxY2Q7XG4gdC5hcnJvd2xlZnRvdmVycmlnaHQgPSAweDIxYzY7XG4gdC5hcnJvd2xlZnR3aGl0ZSA9IDB4MjFlNjtcbiB0LmFycm93cmlnaHQgPSAweDIxOTI7XG4gdC5hcnJvd3JpZ2h0ZGJsc3Ryb2tlID0gMHgyMWNmO1xuIHQuYXJyb3dyaWdodGhlYXZ5ID0gMHgyNzllO1xuIHQuYXJyb3dyaWdodG92ZXJsZWZ0ID0gMHgyMWM0O1xuIHQuYXJyb3dyaWdodHdoaXRlID0gMHgyMWU4O1xuIHQuYXJyb3d0YWJsZWZ0ID0gMHgyMWU0O1xuIHQuYXJyb3d0YWJyaWdodCA9IDB4MjFlNTtcbiB0LmFycm93dXAgPSAweDIxOTE7XG4gdC5hcnJvd3VwZG4gPSAweDIxOTU7XG4gdC5hcnJvd3VwZG5ic2UgPSAweDIxYTg7XG4gdC5hcnJvd3VwZG93bmJhc2UgPSAweDIxYTg7XG4gdC5hcnJvd3VwbGVmdCA9IDB4MjE5NjtcbiB0LmFycm93dXBsZWZ0b2Zkb3duID0gMHgyMWM1O1xuIHQuYXJyb3d1cHJpZ2h0ID0gMHgyMTk3O1xuIHQuYXJyb3d1cHdoaXRlID0gMHgyMWU3O1xuIHQuYXJyb3d2ZXJ0ZXggPSAweGY4ZTY7XG4gdC5hc2NpaWNpcmN1bSA9IDB4MDA1ZTtcbiB0LmFzY2lpY2lyY3VtbW9ub3NwYWNlID0gMHhmZjNlO1xuIHQuYXNjaWl0aWxkZSA9IDB4MDA3ZTtcbiB0LmFzY2lpdGlsZGVtb25vc3BhY2UgPSAweGZmNWU7XG4gdC5hc2NyaXB0ID0gMHgwMjUxO1xuIHQuYXNjcmlwdHR1cm5lZCA9IDB4MDI1MjtcbiB0LmFzbWFsbGhpcmFnYW5hID0gMHgzMDQxO1xuIHQuYXNtYWxsa2F0YWthbmEgPSAweDMwYTE7XG4gdC5hc21hbGxrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2NztcbiB0LmFzdGVyaXNrID0gMHgwMDJhO1xuIHQuYXN0ZXJpc2thbHRvbmVhcmFiaWMgPSAweDA2NmQ7XG4gdC5hc3Rlcmlza2FyYWJpYyA9IDB4MDY2ZDtcbiB0LmFzdGVyaXNrbWF0aCA9IDB4MjIxNztcbiB0LmFzdGVyaXNrbW9ub3NwYWNlID0gMHhmZjBhO1xuIHQuYXN0ZXJpc2tzbWFsbCA9IDB4ZmU2MTtcbiB0LmFzdGVyaXNtID0gMHgyMDQyO1xuIHQuYXN1cGVyaW9yID0gMHhmNmU5O1xuIHQuYXN5bXB0b3RpY2FsbHllcXVhbCA9IDB4MjI0MztcbiB0LmF0ID0gMHgwMDQwO1xuIHQuYXRpbGRlID0gMHgwMGUzO1xuIHQuYXRtb25vc3BhY2UgPSAweGZmMjA7XG4gdC5hdHNtYWxsID0gMHhmZTZiO1xuIHQuYXR1cm5lZCA9IDB4MDI1MDtcbiB0LmF1YmVuZ2FsaSA9IDB4MDk5NDtcbiB0LmF1Ym9wb21vZm8gPSAweDMxMjA7XG4gdC5hdWRldmEgPSAweDA5MTQ7XG4gdC5hdWd1amFyYXRpID0gMHgwYTk0O1xuIHQuYXVndXJtdWtoaSA9IDB4MGExNDtcbiB0LmF1bGVuZ3RobWFya2JlbmdhbGkgPSAweDA5ZDc7XG4gdC5hdW1hdHJhZ3VybXVraGkgPSAweDBhNGM7XG4gdC5hdXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5Y2M7XG4gdC5hdXZvd2Vsc2lnbmRldmEgPSAweDA5NGM7XG4gdC5hdXZvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWNjO1xuIHQuYXZhZ3JhaGFkZXZhID0gMHgwOTNkO1xuIHQuYXliYXJtZW5pYW4gPSAweDA1NjE7XG4gdC5heWluID0gMHgwNWUyO1xuIHQuYXlpbmFsdG9uZWhlYnJldyA9IDB4ZmIyMDtcbiB0LmF5aW5oZWJyZXcgPSAweDA1ZTI7XG4gdC5iID0gMHgwMDYyO1xuIHQuYmFiZW5nYWxpID0gMHgwOWFjO1xuIHQuYmFja3NsYXNoID0gMHgwMDVjO1xuIHQuYmFja3NsYXNobW9ub3NwYWNlID0gMHhmZjNjO1xuIHQuYmFkZXZhID0gMHgwOTJjO1xuIHQuYmFndWphcmF0aSA9IDB4MGFhYztcbiB0LmJhZ3VybXVraGkgPSAweDBhMmM7XG4gdC5iYWhpcmFnYW5hID0gMHgzMDcwO1xuIHQuYmFodHRoYWkgPSAweDBlM2Y7XG4gdC5iYWthdGFrYW5hID0gMHgzMGQwO1xuIHQuYmFyID0gMHgwMDdjO1xuIHQuYmFybW9ub3NwYWNlID0gMHhmZjVjO1xuIHQuYmJvcG9tb2ZvID0gMHgzMTA1O1xuIHQuYmNpcmNsZSA9IDB4MjRkMTtcbiB0LmJkb3RhY2NlbnQgPSAweDFlMDM7XG4gdC5iZG90YmVsb3cgPSAweDFlMDU7XG4gdC5iZWFtZWRzaXh0ZWVudGhub3RlcyA9IDB4MjY2YztcbiB0LmJlY2F1c2UgPSAweDIyMzU7XG4gdC5iZWN5cmlsbGljID0gMHgwNDMxO1xuIHQuYmVoYXJhYmljID0gMHgwNjI4O1xuIHQuYmVoZmluYWxhcmFiaWMgPSAweGZlOTA7XG4gdC5iZWhpbml0aWFsYXJhYmljID0gMHhmZTkxO1xuIHQuYmVoaXJhZ2FuYSA9IDB4MzA3OTtcbiB0LmJlaG1lZGlhbGFyYWJpYyA9IDB4ZmU5MjtcbiB0LmJlaG1lZW1pbml0aWFsYXJhYmljID0gMHhmYzlmO1xuIHQuYmVobWVlbWlzb2xhdGVkYXJhYmljID0gMHhmYzA4O1xuIHQuYmVobm9vbmZpbmFsYXJhYmljID0gMHhmYzZkO1xuIHQuYmVrYXRha2FuYSA9IDB4MzBkOTtcbiB0LmJlbmFybWVuaWFuID0gMHgwNTYyO1xuIHQuYmV0ID0gMHgwNWQxO1xuIHQuYmV0YSA9IDB4MDNiMjtcbiB0LmJldGFzeW1ib2xncmVlayA9IDB4MDNkMDtcbiB0LmJldGRhZ2VzaCA9IDB4ZmIzMTtcbiB0LmJldGRhZ2VzaGhlYnJldyA9IDB4ZmIzMTtcbiB0LmJldGhlYnJldyA9IDB4MDVkMTtcbiB0LmJldHJhZmVoZWJyZXcgPSAweGZiNGM7XG4gdC5iaGFiZW5nYWxpID0gMHgwOWFkO1xuIHQuYmhhZGV2YSA9IDB4MDkyZDtcbiB0LmJoYWd1amFyYXRpID0gMHgwYWFkO1xuIHQuYmhhZ3VybXVraGkgPSAweDBhMmQ7XG4gdC5iaG9vayA9IDB4MDI1MztcbiB0LmJpaGlyYWdhbmEgPSAweDMwNzM7XG4gdC5iaWthdGFrYW5hID0gMHgzMGQzO1xuIHQuYmlsYWJpYWxjbGljayA9IDB4MDI5ODtcbiB0LmJpbmRpZ3VybXVraGkgPSAweDBhMDI7XG4gdC5iaXJ1c3F1YXJlID0gMHgzMzMxO1xuIHQuYmxhY2tjaXJjbGUgPSAweDI1Y2Y7XG4gdC5ibGFja2RpYW1vbmQgPSAweDI1YzY7XG4gdC5ibGFja2Rvd25wb2ludGluZ3RyaWFuZ2xlID0gMHgyNWJjO1xuIHQuYmxhY2tsZWZ0cG9pbnRpbmdwb2ludGVyID0gMHgyNWM0O1xuIHQuYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZSA9IDB4MjVjMDtcbiB0LmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0ID0gMHgzMDEwO1xuIHQuYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbCA9IDB4ZmUzYjtcbiB0LmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodCA9IDB4MzAxMTtcbiB0LmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodHZlcnRpY2FsID0gMHhmZTNjO1xuIHQuYmxhY2tsb3dlcmxlZnR0cmlhbmdsZSA9IDB4MjVlMztcbiB0LmJsYWNrbG93ZXJyaWdodHRyaWFuZ2xlID0gMHgyNWUyO1xuIHQuYmxhY2tyZWN0YW5nbGUgPSAweDI1YWM7XG4gdC5ibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyID0gMHgyNWJhO1xuIHQuYmxhY2tyaWdodHBvaW50aW5ndHJpYW5nbGUgPSAweDI1YjY7XG4gdC5ibGFja3NtYWxsc3F1YXJlID0gMHgyNWFhO1xuIHQuYmxhY2tzbWlsaW5nZmFjZSA9IDB4MjYzYjtcbiB0LmJsYWNrc3F1YXJlID0gMHgyNWEwO1xuIHQuYmxhY2tzdGFyID0gMHgyNjA1O1xuIHQuYmxhY2t1cHBlcmxlZnR0cmlhbmdsZSA9IDB4MjVlNDtcbiB0LmJsYWNrdXBwZXJyaWdodHRyaWFuZ2xlID0gMHgyNWU1O1xuIHQuYmxhY2t1cHBvaW50aW5nc21hbGx0cmlhbmdsZSA9IDB4MjViNDtcbiB0LmJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlID0gMHgyNWIyO1xuIHQuYmxhbmsgPSAweDI0MjM7XG4gdC5ibGluZWJlbG93ID0gMHgxZTA3O1xuIHQuYmxvY2sgPSAweDI1ODg7XG4gdC5ibW9ub3NwYWNlID0gMHhmZjQyO1xuIHQuYm9iYWltYWl0aGFpID0gMHgwZTFhO1xuIHQuYm9oaXJhZ2FuYSA9IDB4MzA3YztcbiB0LmJva2F0YWthbmEgPSAweDMwZGM7XG4gdC5icGFyZW4gPSAweDI0OWQ7XG4gdC5icXNxdWFyZSA9IDB4MzNjMztcbiB0LmJyYWNlZXggPSAweGY4ZjQ7XG4gdC5icmFjZWxlZnQgPSAweDAwN2I7XG4gdC5icmFjZWxlZnRidCA9IDB4ZjhmMztcbiB0LmJyYWNlbGVmdG1pZCA9IDB4ZjhmMjtcbiB0LmJyYWNlbGVmdG1vbm9zcGFjZSA9IDB4ZmY1YjtcbiB0LmJyYWNlbGVmdHNtYWxsID0gMHhmZTViO1xuIHQuYnJhY2VsZWZ0dHAgPSAweGY4ZjE7XG4gdC5icmFjZWxlZnR2ZXJ0aWNhbCA9IDB4ZmUzNztcbiB0LmJyYWNlcmlnaHQgPSAweDAwN2Q7XG4gdC5icmFjZXJpZ2h0YnQgPSAweGY4ZmU7XG4gdC5icmFjZXJpZ2h0bWlkID0gMHhmOGZkO1xuIHQuYnJhY2VyaWdodG1vbm9zcGFjZSA9IDB4ZmY1ZDtcbiB0LmJyYWNlcmlnaHRzbWFsbCA9IDB4ZmU1YztcbiB0LmJyYWNlcmlnaHR0cCA9IDB4ZjhmYztcbiB0LmJyYWNlcmlnaHR2ZXJ0aWNhbCA9IDB4ZmUzODtcbiB0LmJyYWNrZXRsZWZ0ID0gMHgwMDViO1xuIHQuYnJhY2tldGxlZnRidCA9IDB4ZjhmMDtcbiB0LmJyYWNrZXRsZWZ0ZXggPSAweGY4ZWY7XG4gdC5icmFja2V0bGVmdG1vbm9zcGFjZSA9IDB4ZmYzYjtcbiB0LmJyYWNrZXRsZWZ0dHAgPSAweGY4ZWU7XG4gdC5icmFja2V0cmlnaHQgPSAweDAwNWQ7XG4gdC5icmFja2V0cmlnaHRidCA9IDB4ZjhmYjtcbiB0LmJyYWNrZXRyaWdodGV4ID0gMHhmOGZhO1xuIHQuYnJhY2tldHJpZ2h0bW9ub3NwYWNlID0gMHhmZjNkO1xuIHQuYnJhY2tldHJpZ2h0dHAgPSAweGY4Zjk7XG4gdC5icmV2ZSA9IDB4MDJkODtcbiB0LmJyZXZlYmVsb3djbWIgPSAweDAzMmU7XG4gdC5icmV2ZWNtYiA9IDB4MDMwNjtcbiB0LmJyZXZlaW52ZXJ0ZWRiZWxvd2NtYiA9IDB4MDMyZjtcbiB0LmJyZXZlaW52ZXJ0ZWRjbWIgPSAweDAzMTE7XG4gdC5icmV2ZWludmVydGVkZG91YmxlY21iID0gMHgwMzYxO1xuIHQuYnJpZGdlYmVsb3djbWIgPSAweDAzMmE7XG4gdC5icmlkZ2VpbnZlcnRlZGJlbG93Y21iID0gMHgwMzNhO1xuIHQuYnJva2VuYmFyID0gMHgwMGE2O1xuIHQuYnN0cm9rZSA9IDB4MDE4MDtcbiB0LmJzdXBlcmlvciA9IDB4ZjZlYTtcbiB0LmJ0b3BiYXIgPSAweDAxODM7XG4gdC5idWhpcmFnYW5hID0gMHgzMDc2O1xuIHQuYnVrYXRha2FuYSA9IDB4MzBkNjtcbiB0LmJ1bGxldCA9IDB4MjAyMjtcbiB0LmJ1bGxldGludmVyc2UgPSAweDI1ZDg7XG4gdC5idWxsZXRvcGVyYXRvciA9IDB4MjIxOTtcbiB0LmJ1bGxzZXllID0gMHgyNWNlO1xuIHQuYyA9IDB4MDA2MztcbiB0LmNhYXJtZW5pYW4gPSAweDA1NmU7XG4gdC5jYWJlbmdhbGkgPSAweDA5OWE7XG4gdC5jYWN1dGUgPSAweDAxMDc7XG4gdC5jYWRldmEgPSAweDA5MWE7XG4gdC5jYWd1amFyYXRpID0gMHgwYTlhO1xuIHQuY2FndXJtdWtoaSA9IDB4MGExYTtcbiB0LmNhbHNxdWFyZSA9IDB4MzM4ODtcbiB0LmNhbmRyYWJpbmR1YmVuZ2FsaSA9IDB4MDk4MTtcbiB0LmNhbmRyYWJpbmR1Y21iID0gMHgwMzEwO1xuIHQuY2FuZHJhYmluZHVkZXZhID0gMHgwOTAxO1xuIHQuY2FuZHJhYmluZHVndWphcmF0aSA9IDB4MGE4MTtcbiB0LmNhcHNsb2NrID0gMHgyMWVhO1xuIHQuY2FyZW9mID0gMHgyMTA1O1xuIHQuY2Fyb24gPSAweDAyYzc7XG4gdC5jYXJvbmJlbG93Y21iID0gMHgwMzJjO1xuIHQuY2Fyb25jbWIgPSAweDAzMGM7XG4gdC5jYXJyaWFnZXJldHVybiA9IDB4MjFiNTtcbiB0LmNib3BvbW9mbyA9IDB4MzExODtcbiB0LmNjYXJvbiA9IDB4MDEwZDtcbiB0LmNjZWRpbGxhID0gMHgwMGU3O1xuIHQuY2NlZGlsbGFhY3V0ZSA9IDB4MWUwOTtcbiB0LmNjaXJjbGUgPSAweDI0ZDI7XG4gdC5jY2lyY3VtZmxleCA9IDB4MDEwOTtcbiB0LmNjdXJsID0gMHgwMjU1O1xuIHQuY2RvdCA9IDB4MDEwYjtcbiB0LmNkb3RhY2NlbnQgPSAweDAxMGI7XG4gdC5jZHNxdWFyZSA9IDB4MzNjNTtcbiB0LmNlZGlsbGEgPSAweDAwYjg7XG4gdC5jZWRpbGxhY21iID0gMHgwMzI3O1xuIHQuY2VudCA9IDB4MDBhMjtcbiB0LmNlbnRpZ3JhZGUgPSAweDIxMDM7XG4gdC5jZW50aW5mZXJpb3IgPSAweGY2ZGY7XG4gdC5jZW50bW9ub3NwYWNlID0gMHhmZmUwO1xuIHQuY2VudG9sZHN0eWxlID0gMHhmN2EyO1xuIHQuY2VudHN1cGVyaW9yID0gMHhmNmUwO1xuIHQuY2hhYXJtZW5pYW4gPSAweDA1Nzk7XG4gdC5jaGFiZW5nYWxpID0gMHgwOTliO1xuIHQuY2hhZGV2YSA9IDB4MDkxYjtcbiB0LmNoYWd1amFyYXRpID0gMHgwYTliO1xuIHQuY2hhZ3VybXVraGkgPSAweDBhMWI7XG4gdC5jaGJvcG9tb2ZvID0gMHgzMTE0O1xuIHQuY2hlYWJraGFzaWFuY3lyaWxsaWMgPSAweDA0YmQ7XG4gdC5jaGVja21hcmsgPSAweDI3MTM7XG4gdC5jaGVjeXJpbGxpYyA9IDB4MDQ0NztcbiB0LmNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljID0gMHgwNGJmO1xuIHQuY2hlZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0Yjc7XG4gdC5jaGVkaWVyZXNpc2N5cmlsbGljID0gMHgwNGY1O1xuIHQuY2hlaGFybWVuaWFuID0gMHgwNTczO1xuIHQuY2hla2hha2Fzc2lhbmN5cmlsbGljID0gMHgwNGNjO1xuIHQuY2hldmVydGljYWxzdHJva2VjeXJpbGxpYyA9IDB4MDRiOTtcbiB0LmNoaSA9IDB4MDNjNztcbiB0LmNoaWV1Y2hhY2lyY2xla29yZWFuID0gMHgzMjc3O1xuIHQuY2hpZXVjaGFwYXJlbmtvcmVhbiA9IDB4MzIxNztcbiB0LmNoaWV1Y2hjaXJjbGVrb3JlYW4gPSAweDMyNjk7XG4gdC5jaGlldWNoa29yZWFuID0gMHgzMTRhO1xuIHQuY2hpZXVjaHBhcmVua29yZWFuID0gMHgzMjA5O1xuIHQuY2hvY2hhbmd0aGFpID0gMHgwZTBhO1xuIHQuY2hvY2hhbnRoYWkgPSAweDBlMDg7XG4gdC5jaG9jaGluZ3RoYWkgPSAweDBlMDk7XG4gdC5jaG9jaG9ldGhhaSA9IDB4MGUwYztcbiB0LmNob29rID0gMHgwMTg4O1xuIHQuY2lldWNhY2lyY2xla29yZWFuID0gMHgzMjc2O1xuIHQuY2lldWNhcGFyZW5rb3JlYW4gPSAweDMyMTY7XG4gdC5jaWV1Y2NpcmNsZWtvcmVhbiA9IDB4MzI2ODtcbiB0LmNpZXVja29yZWFuID0gMHgzMTQ4O1xuIHQuY2lldWNwYXJlbmtvcmVhbiA9IDB4MzIwODtcbiB0LmNpZXVjdXBhcmVua29yZWFuID0gMHgzMjFjO1xuIHQuY2lyY2xlID0gMHgyNWNiO1xuIHQuY2lyY2xlY29weXJ0ID0gMHgwMGE5O1xuIHQuY2lyY2xlbXVsdGlwbHkgPSAweDIyOTc7XG4gdC5jaXJjbGVvdCA9IDB4MjI5OTtcbiB0LmNpcmNsZXBsdXMgPSAweDIyOTU7XG4gdC5jaXJjbGVwb3N0YWxtYXJrID0gMHgzMDM2O1xuIHQuY2lyY2xld2l0aGxlZnRoYWxmYmxhY2sgPSAweDI1ZDA7XG4gdC5jaXJjbGV3aXRocmlnaHRoYWxmYmxhY2sgPSAweDI1ZDE7XG4gdC5jaXJjdW1mbGV4ID0gMHgwMmM2O1xuIHQuY2lyY3VtZmxleGJlbG93Y21iID0gMHgwMzJkO1xuIHQuY2lyY3VtZmxleGNtYiA9IDB4MDMwMjtcbiB0LmNsZWFyID0gMHgyMzI3O1xuIHQuY2xpY2thbHZlb2xhciA9IDB4MDFjMjtcbiB0LmNsaWNrZGVudGFsID0gMHgwMWMwO1xuIHQuY2xpY2tsYXRlcmFsID0gMHgwMWMxO1xuIHQuY2xpY2tyZXRyb2ZsZXggPSAweDAxYzM7XG4gdC5jbHViID0gMHgyNjYzO1xuIHQuY2x1YnN1aXRibGFjayA9IDB4MjY2MztcbiB0LmNsdWJzdWl0d2hpdGUgPSAweDI2Njc7XG4gdC5jbWN1YmVkc3F1YXJlID0gMHgzM2E0O1xuIHQuY21vbm9zcGFjZSA9IDB4ZmY0MztcbiB0LmNtc3F1YXJlZHNxdWFyZSA9IDB4MzNhMDtcbiB0LmNvYXJtZW5pYW4gPSAweDA1ODE7XG4gdC5jb2xvbiA9IDB4MDAzYTtcbiB0LmNvbG9ubW9uZXRhcnkgPSAweDIwYTE7XG4gdC5jb2xvbm1vbm9zcGFjZSA9IDB4ZmYxYTtcbiB0LmNvbG9uc2lnbiA9IDB4MjBhMTtcbiB0LmNvbG9uc21hbGwgPSAweGZlNTU7XG4gdC5jb2xvbnRyaWFuZ3VsYXJoYWxmbW9kID0gMHgwMmQxO1xuIHQuY29sb250cmlhbmd1bGFybW9kID0gMHgwMmQwO1xuIHQuY29tbWEgPSAweDAwMmM7XG4gdC5jb21tYWFib3ZlY21iID0gMHgwMzEzO1xuIHQuY29tbWFhYm92ZXJpZ2h0Y21iID0gMHgwMzE1O1xuIHQuY29tbWFhY2NlbnQgPSAweGY2YzM7XG4gdC5jb21tYWFyYWJpYyA9IDB4MDYwYztcbiB0LmNvbW1hYXJtZW5pYW4gPSAweDA1NWQ7XG4gdC5jb21tYWluZmVyaW9yID0gMHhmNmUxO1xuIHQuY29tbWFtb25vc3BhY2UgPSAweGZmMGM7XG4gdC5jb21tYXJldmVyc2VkYWJvdmVjbWIgPSAweDAzMTQ7XG4gdC5jb21tYXJldmVyc2VkbW9kID0gMHgwMmJkO1xuIHQuY29tbWFzbWFsbCA9IDB4ZmU1MDtcbiB0LmNvbW1hc3VwZXJpb3IgPSAweGY2ZTI7XG4gdC5jb21tYXR1cm5lZGFib3ZlY21iID0gMHgwMzEyO1xuIHQuY29tbWF0dXJuZWRtb2QgPSAweDAyYmI7XG4gdC5jb21wYXNzID0gMHgyNjNjO1xuIHQuY29uZ3J1ZW50ID0gMHgyMjQ1O1xuIHQuY29udG91cmludGVncmFsID0gMHgyMjJlO1xuIHQuY29udHJvbCA9IDB4MjMwMztcbiB0LmNvbnRyb2xBQ0sgPSAweDAwMDY7XG4gdC5jb250cm9sQkVMID0gMHgwMDA3O1xuIHQuY29udHJvbEJTID0gMHgwMDA4O1xuIHQuY29udHJvbENBTiA9IDB4MDAxODtcbiB0LmNvbnRyb2xDUiA9IDB4MDAwZDtcbiB0LmNvbnRyb2xEQzEgPSAweDAwMTE7XG4gdC5jb250cm9sREMyID0gMHgwMDEyO1xuIHQuY29udHJvbERDMyA9IDB4MDAxMztcbiB0LmNvbnRyb2xEQzQgPSAweDAwMTQ7XG4gdC5jb250cm9sREVMID0gMHgwMDdmO1xuIHQuY29udHJvbERMRSA9IDB4MDAxMDtcbiB0LmNvbnRyb2xFTSA9IDB4MDAxOTtcbiB0LmNvbnRyb2xFTlEgPSAweDAwMDU7XG4gdC5jb250cm9sRU9UID0gMHgwMDA0O1xuIHQuY29udHJvbEVTQyA9IDB4MDAxYjtcbiB0LmNvbnRyb2xFVEIgPSAweDAwMTc7XG4gdC5jb250cm9sRVRYID0gMHgwMDAzO1xuIHQuY29udHJvbEZGID0gMHgwMDBjO1xuIHQuY29udHJvbEZTID0gMHgwMDFjO1xuIHQuY29udHJvbEdTID0gMHgwMDFkO1xuIHQuY29udHJvbEhUID0gMHgwMDA5O1xuIHQuY29udHJvbExGID0gMHgwMDBhO1xuIHQuY29udHJvbE5BSyA9IDB4MDAxNTtcbiB0LmNvbnRyb2xOVUxMID0gMHgwMDAwO1xuIHQuY29udHJvbFJTID0gMHgwMDFlO1xuIHQuY29udHJvbFNJID0gMHgwMDBmO1xuIHQuY29udHJvbFNPID0gMHgwMDBlO1xuIHQuY29udHJvbFNPVCA9IDB4MDAwMjtcbiB0LmNvbnRyb2xTVFggPSAweDAwMDE7XG4gdC5jb250cm9sU1VCID0gMHgwMDFhO1xuIHQuY29udHJvbFNZTiA9IDB4MDAxNjtcbiB0LmNvbnRyb2xVUyA9IDB4MDAxZjtcbiB0LmNvbnRyb2xWVCA9IDB4MDAwYjtcbiB0LmNvcHlyaWdodCA9IDB4MDBhOTtcbiB0LmNvcHlyaWdodHNhbnMgPSAweGY4ZTk7XG4gdC5jb3B5cmlnaHRzZXJpZiA9IDB4ZjZkOTtcbiB0LmNvcm5lcmJyYWNrZXRsZWZ0ID0gMHgzMDBjO1xuIHQuY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGggPSAweGZmNjI7XG4gdC5jb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsID0gMHhmZTQxO1xuIHQuY29ybmVyYnJhY2tldHJpZ2h0ID0gMHgzMDBkO1xuIHQuY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoID0gMHhmZjYzO1xuIHQuY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwgPSAweGZlNDI7XG4gdC5jb3Jwb3JhdGlvbnNxdWFyZSA9IDB4MzM3ZjtcbiB0LmNvc3F1YXJlID0gMHgzM2M3O1xuIHQuY292ZXJrZ3NxdWFyZSA9IDB4MzNjNjtcbiB0LmNwYXJlbiA9IDB4MjQ5ZTtcbiB0LmNydXplaXJvID0gMHgyMGEyO1xuIHQuY3N0cmV0Y2hlZCA9IDB4MDI5NztcbiB0LmN1cmx5YW5kID0gMHgyMmNmO1xuIHQuY3VybHlvciA9IDB4MjJjZTtcbiB0LmN1cnJlbmN5ID0gMHgwMGE0O1xuIHQuY3lyQnJldmUgPSAweGY2ZDE7XG4gdC5jeXJGbGV4ID0gMHhmNmQyO1xuIHQuY3lyYnJldmUgPSAweGY2ZDQ7XG4gdC5jeXJmbGV4ID0gMHhmNmQ1O1xuIHQuZCA9IDB4MDA2NDtcbiB0LmRhYXJtZW5pYW4gPSAweDA1NjQ7XG4gdC5kYWJlbmdhbGkgPSAweDA5YTY7XG4gdC5kYWRhcmFiaWMgPSAweDA2MzY7XG4gdC5kYWRldmEgPSAweDA5MjY7XG4gdC5kYWRmaW5hbGFyYWJpYyA9IDB4ZmViZTtcbiB0LmRhZGluaXRpYWxhcmFiaWMgPSAweGZlYmY7XG4gdC5kYWRtZWRpYWxhcmFiaWMgPSAweGZlYzA7XG4gdC5kYWdlc2ggPSAweDA1YmM7XG4gdC5kYWdlc2hoZWJyZXcgPSAweDA1YmM7XG4gdC5kYWdnZXIgPSAweDIwMjA7XG4gdC5kYWdnZXJkYmwgPSAweDIwMjE7XG4gdC5kYWd1amFyYXRpID0gMHgwYWE2O1xuIHQuZGFndXJtdWtoaSA9IDB4MGEyNjtcbiB0LmRhaGlyYWdhbmEgPSAweDMwNjA7XG4gdC5kYWthdGFrYW5hID0gMHgzMGMwO1xuIHQuZGFsYXJhYmljID0gMHgwNjJmO1xuIHQuZGFsZXQgPSAweDA1ZDM7XG4gdC5kYWxldGRhZ2VzaCA9IDB4ZmIzMztcbiB0LmRhbGV0ZGFnZXNoaGVicmV3ID0gMHhmYjMzO1xuIHQuZGFsZXRoZWJyZXcgPSAweDA1ZDM7XG4gdC5kYWxmaW5hbGFyYWJpYyA9IDB4ZmVhYTtcbiB0LmRhbW1hYXJhYmljID0gMHgwNjRmO1xuIHQuZGFtbWFsb3dhcmFiaWMgPSAweDA2NGY7XG4gdC5kYW1tYXRhbmFsdG9uZWFyYWJpYyA9IDB4MDY0YztcbiB0LmRhbW1hdGFuYXJhYmljID0gMHgwNjRjO1xuIHQuZGFuZGEgPSAweDA5NjQ7XG4gdC5kYXJnYWhlYnJldyA9IDB4MDVhNztcbiB0LmRhcmdhbGVmdGhlYnJldyA9IDB4MDVhNztcbiB0LmRhc2lhcG5ldW1hdGFjeXJpbGxpY2NtYiA9IDB4MDQ4NTtcbiB0LmRibEdyYXZlID0gMHhmNmQzO1xuIHQuZGJsYW5nbGVicmFja2V0bGVmdCA9IDB4MzAwYTtcbiB0LmRibGFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbCA9IDB4ZmUzZDtcbiB0LmRibGFuZ2xlYnJhY2tldHJpZ2h0ID0gMHgzMDBiO1xuIHQuZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbCA9IDB4ZmUzZTtcbiB0LmRibGFyY2hpbnZlcnRlZGJlbG93Y21iID0gMHgwMzJiO1xuIHQuZGJsYXJyb3dsZWZ0ID0gMHgyMWQ0O1xuIHQuZGJsYXJyb3dyaWdodCA9IDB4MjFkMjtcbiB0LmRibGRhbmRhID0gMHgwOTY1O1xuIHQuZGJsZ3JhdmUgPSAweGY2ZDY7XG4gdC5kYmxncmF2ZWNtYiA9IDB4MDMwZjtcbiB0LmRibGludGVncmFsID0gMHgyMjJjO1xuIHQuZGJsbG93bGluZSA9IDB4MjAxNztcbiB0LmRibGxvd2xpbmVjbWIgPSAweDAzMzM7XG4gdC5kYmxvdmVybGluZWNtYiA9IDB4MDMzZjtcbiB0LmRibHByaW1lbW9kID0gMHgwMmJhO1xuIHQuZGJsdmVydGljYWxiYXIgPSAweDIwMTY7XG4gdC5kYmx2ZXJ0aWNhbGxpbmVhYm92ZWNtYiA9IDB4MDMwZTtcbiB0LmRib3BvbW9mbyA9IDB4MzEwOTtcbiB0LmRic3F1YXJlID0gMHgzM2M4O1xuIHQuZGNhcm9uID0gMHgwMTBmO1xuIHQuZGNlZGlsbGEgPSAweDFlMTE7XG4gdC5kY2lyY2xlID0gMHgyNGQzO1xuIHQuZGNpcmN1bWZsZXhiZWxvdyA9IDB4MWUxMztcbiB0LmRjcm9hdCA9IDB4MDExMTtcbiB0LmRkYWJlbmdhbGkgPSAweDA5YTE7XG4gdC5kZGFkZXZhID0gMHgwOTIxO1xuIHQuZGRhZ3VqYXJhdGkgPSAweDBhYTE7XG4gdC5kZGFndXJtdWtoaSA9IDB4MGEyMTtcbiB0LmRkYWxhcmFiaWMgPSAweDA2ODg7XG4gdC5kZGFsZmluYWxhcmFiaWMgPSAweGZiODk7XG4gdC5kZGRoYWRldmEgPSAweDA5NWM7XG4gdC5kZGhhYmVuZ2FsaSA9IDB4MDlhMjtcbiB0LmRkaGFkZXZhID0gMHgwOTIyO1xuIHQuZGRoYWd1amFyYXRpID0gMHgwYWEyO1xuIHQuZGRoYWd1cm11a2hpID0gMHgwYTIyO1xuIHQuZGRvdGFjY2VudCA9IDB4MWUwYjtcbiB0LmRkb3RiZWxvdyA9IDB4MWUwZDtcbiB0LmRlY2ltYWxzZXBhcmF0b3JhcmFiaWMgPSAweDA2NmI7XG4gdC5kZWNpbWFsc2VwYXJhdG9ycGVyc2lhbiA9IDB4MDY2YjtcbiB0LmRlY3lyaWxsaWMgPSAweDA0MzQ7XG4gdC5kZWdyZWUgPSAweDAwYjA7XG4gdC5kZWhpaGVicmV3ID0gMHgwNWFkO1xuIHQuZGVoaXJhZ2FuYSA9IDB4MzA2NztcbiB0LmRlaWNvcHRpYyA9IDB4MDNlZjtcbiB0LmRla2F0YWthbmEgPSAweDMwYzc7XG4gdC5kZWxldGVsZWZ0ID0gMHgyMzJiO1xuIHQuZGVsZXRlcmlnaHQgPSAweDIzMjY7XG4gdC5kZWx0YSA9IDB4MDNiNDtcbiB0LmRlbHRhdHVybmVkID0gMHgwMThkO1xuIHQuZGVub21pbmF0b3JtaW51c29uZW51bWVyYXRvcmJlbmdhbGkgPSAweDA5Zjg7XG4gdC5kZXpoID0gMHgwMmE0O1xuIHQuZGhhYmVuZ2FsaSA9IDB4MDlhNztcbiB0LmRoYWRldmEgPSAweDA5Mjc7XG4gdC5kaGFndWphcmF0aSA9IDB4MGFhNztcbiB0LmRoYWd1cm11a2hpID0gMHgwYTI3O1xuIHQuZGhvb2sgPSAweDAyNTc7XG4gdC5kaWFseXRpa2F0b25vcyA9IDB4MDM4NTtcbiB0LmRpYWx5dGlrYXRvbm9zY21iID0gMHgwMzQ0O1xuIHQuZGlhbW9uZCA9IDB4MjY2NjtcbiB0LmRpYW1vbmRzdWl0d2hpdGUgPSAweDI2NjI7XG4gdC5kaWVyZXNpcyA9IDB4MDBhODtcbiB0LmRpZXJlc2lzYWN1dGUgPSAweGY2ZDc7XG4gdC5kaWVyZXNpc2JlbG93Y21iID0gMHgwMzI0O1xuIHQuZGllcmVzaXNjbWIgPSAweDAzMDg7XG4gdC5kaWVyZXNpc2dyYXZlID0gMHhmNmQ4O1xuIHQuZGllcmVzaXN0b25vcyA9IDB4MDM4NTtcbiB0LmRpaGlyYWdhbmEgPSAweDMwNjI7XG4gdC5kaWthdGFrYW5hID0gMHgzMGMyO1xuIHQuZGl0dG9tYXJrID0gMHgzMDAzO1xuIHQuZGl2aWRlID0gMHgwMGY3O1xuIHQuZGl2aWRlcyA9IDB4MjIyMztcbiB0LmRpdmlzaW9uc2xhc2ggPSAweDIyMTU7XG4gdC5kamVjeXJpbGxpYyA9IDB4MDQ1MjtcbiB0LmRrc2hhZGUgPSAweDI1OTM7XG4gdC5kbGluZWJlbG93ID0gMHgxZTBmO1xuIHQuZGxzcXVhcmUgPSAweDMzOTc7XG4gdC5kbWFjcm9uID0gMHgwMTExO1xuIHQuZG1vbm9zcGFjZSA9IDB4ZmY0NDtcbiB0LmRuYmxvY2sgPSAweDI1ODQ7XG4gdC5kb2NoYWRhdGhhaSA9IDB4MGUwZTtcbiB0LmRvZGVrdGhhaSA9IDB4MGUxNDtcbiB0LmRvaGlyYWdhbmEgPSAweDMwNjk7XG4gdC5kb2thdGFrYW5hID0gMHgzMGM5O1xuIHQuZG9sbGFyID0gMHgwMDI0O1xuIHQuZG9sbGFyaW5mZXJpb3IgPSAweGY2ZTM7XG4gdC5kb2xsYXJtb25vc3BhY2UgPSAweGZmMDQ7XG4gdC5kb2xsYXJvbGRzdHlsZSA9IDB4ZjcyNDtcbiB0LmRvbGxhcnNtYWxsID0gMHhmZTY5O1xuIHQuZG9sbGFyc3VwZXJpb3IgPSAweGY2ZTQ7XG4gdC5kb25nID0gMHgyMGFiO1xuIHQuZG9ydXNxdWFyZSA9IDB4MzMyNjtcbiB0LmRvdGFjY2VudCA9IDB4MDJkOTtcbiB0LmRvdGFjY2VudGNtYiA9IDB4MDMwNztcbiB0LmRvdGJlbG93Y21iID0gMHgwMzIzO1xuIHQuZG90YmVsb3djb21iID0gMHgwMzIzO1xuIHQuZG90a2F0YWthbmEgPSAweDMwZmI7XG4gdC5kb3RsZXNzaSA9IDB4MDEzMTtcbiB0LmRvdGxlc3NqID0gMHhmNmJlO1xuIHQuZG90bGVzc2pzdHJva2Vob29rID0gMHgwMjg0O1xuIHQuZG90bWF0aCA9IDB4MjJjNTtcbiB0LmRvdHRlZGNpcmNsZSA9IDB4MjVjYztcbiB0LmRvdWJsZXlvZHBhdGFoID0gMHhmYjFmO1xuIHQuZG91YmxleW9kcGF0YWhoZWJyZXcgPSAweGZiMWY7XG4gdC5kb3dudGFja2JlbG93Y21iID0gMHgwMzFlO1xuIHQuZG93bnRhY2ttb2QgPSAweDAyZDU7XG4gdC5kcGFyZW4gPSAweDI0OWY7XG4gdC5kc3VwZXJpb3IgPSAweGY2ZWI7XG4gdC5kdGFpbCA9IDB4MDI1NjtcbiB0LmR0b3BiYXIgPSAweDAxOGM7XG4gdC5kdWhpcmFnYW5hID0gMHgzMDY1O1xuIHQuZHVrYXRha2FuYSA9IDB4MzBjNTtcbiB0LmR6ID0gMHgwMWYzO1xuIHQuZHphbHRvbmUgPSAweDAyYTM7XG4gdC5kemNhcm9uID0gMHgwMWM2O1xuIHQuZHpjdXJsID0gMHgwMmE1O1xuIHQuZHplYWJraGFzaWFuY3lyaWxsaWMgPSAweDA0ZTE7XG4gdC5kemVjeXJpbGxpYyA9IDB4MDQ1NTtcbiB0LmR6aGVjeXJpbGxpYyA9IDB4MDQ1ZjtcbiB0LmUgPSAweDAwNjU7XG4gdC5lYWN1dGUgPSAweDAwZTk7XG4gdC5lYXJ0aCA9IDB4MjY0MTtcbiB0LmViZW5nYWxpID0gMHgwOThmO1xuIHQuZWJvcG9tb2ZvID0gMHgzMTFjO1xuIHQuZWJyZXZlID0gMHgwMTE1O1xuIHQuZWNhbmRyYWRldmEgPSAweDA5MGQ7XG4gdC5lY2FuZHJhZ3VqYXJhdGkgPSAweDBhOGQ7XG4gdC5lY2FuZHJhdm93ZWxzaWduZGV2YSA9IDB4MDk0NTtcbiB0LmVjYW5kcmF2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjNTtcbiB0LmVjYXJvbiA9IDB4MDExYjtcbiB0LmVjZWRpbGxhYnJldmUgPSAweDFlMWQ7XG4gdC5lY2hhcm1lbmlhbiA9IDB4MDU2NTtcbiB0LmVjaHlpd25hcm1lbmlhbiA9IDB4MDU4NztcbiB0LmVjaXJjbGUgPSAweDI0ZDQ7XG4gdC5lY2lyY3VtZmxleCA9IDB4MDBlYTtcbiB0LmVjaXJjdW1mbGV4YWN1dGUgPSAweDFlYmY7XG4gdC5lY2lyY3VtZmxleGJlbG93ID0gMHgxZTE5O1xuIHQuZWNpcmN1bWZsZXhkb3RiZWxvdyA9IDB4MWVjNztcbiB0LmVjaXJjdW1mbGV4Z3JhdmUgPSAweDFlYzE7XG4gdC5lY2lyY3VtZmxleGhvb2thYm92ZSA9IDB4MWVjMztcbiB0LmVjaXJjdW1mbGV4dGlsZGUgPSAweDFlYzU7XG4gdC5lY3lyaWxsaWMgPSAweDA0NTQ7XG4gdC5lZGJsZ3JhdmUgPSAweDAyMDU7XG4gdC5lZGV2YSA9IDB4MDkwZjtcbiB0LmVkaWVyZXNpcyA9IDB4MDBlYjtcbiB0LmVkb3QgPSAweDAxMTc7XG4gdC5lZG90YWNjZW50ID0gMHgwMTE3O1xuIHQuZWRvdGJlbG93ID0gMHgxZWI5O1xuIHQuZWVndXJtdWtoaSA9IDB4MGEwZjtcbiB0LmVlbWF0cmFndXJtdWtoaSA9IDB4MGE0NztcbiB0LmVmY3lyaWxsaWMgPSAweDA0NDQ7XG4gdC5lZ3JhdmUgPSAweDAwZTg7XG4gdC5lZ3VqYXJhdGkgPSAweDBhOGY7XG4gdC5laGFybWVuaWFuID0gMHgwNTY3O1xuIHQuZWhib3BvbW9mbyA9IDB4MzExZDtcbiB0LmVoaXJhZ2FuYSA9IDB4MzA0ODtcbiB0LmVob29rYWJvdmUgPSAweDFlYmI7XG4gdC5laWJvcG9tb2ZvID0gMHgzMTFmO1xuIHQuZWlnaHQgPSAweDAwMzg7XG4gdC5laWdodGFyYWJpYyA9IDB4MDY2ODtcbiB0LmVpZ2h0YmVuZ2FsaSA9IDB4MDllZTtcbiB0LmVpZ2h0Y2lyY2xlID0gMHgyNDY3O1xuIHQuZWlnaHRjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmID0gMHgyNzkxO1xuIHQuZWlnaHRkZXZhID0gMHgwOTZlO1xuIHQuZWlnaHRlZW5jaXJjbGUgPSAweDI0NzE7XG4gdC5laWdodGVlbnBhcmVuID0gMHgyNDg1O1xuIHQuZWlnaHRlZW5wZXJpb2QgPSAweDI0OTk7XG4gdC5laWdodGd1amFyYXRpID0gMHgwYWVlO1xuIHQuZWlnaHRndXJtdWtoaSA9IDB4MGE2ZTtcbiB0LmVpZ2h0aGFja2FyYWJpYyA9IDB4MDY2ODtcbiB0LmVpZ2h0aGFuZ3pob3UgPSAweDMwMjg7XG4gdC5laWdodGhub3RlYmVhbWVkID0gMHgyNjZiO1xuIHQuZWlnaHRpZGVvZ3JhcGhpY3BhcmVuID0gMHgzMjI3O1xuIHQuZWlnaHRpbmZlcmlvciA9IDB4MjA4ODtcbiB0LmVpZ2h0bW9ub3NwYWNlID0gMHhmZjE4O1xuIHQuZWlnaHRvbGRzdHlsZSA9IDB4ZjczODtcbiB0LmVpZ2h0cGFyZW4gPSAweDI0N2I7XG4gdC5laWdodHBlcmlvZCA9IDB4MjQ4ZjtcbiB0LmVpZ2h0cGVyc2lhbiA9IDB4MDZmODtcbiB0LmVpZ2h0cm9tYW4gPSAweDIxNzc7XG4gdC5laWdodHN1cGVyaW9yID0gMHgyMDc4O1xuIHQuZWlnaHR0aGFpID0gMHgwZTU4O1xuIHQuZWludmVydGVkYnJldmUgPSAweDAyMDc7XG4gdC5laW90aWZpZWRjeXJpbGxpYyA9IDB4MDQ2NTtcbiB0LmVrYXRha2FuYSA9IDB4MzBhODtcbiB0LmVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3NDtcbiB0LmVrb25rYXJndXJtdWtoaSA9IDB4MGE3NDtcbiB0LmVrb3JlYW4gPSAweDMxNTQ7XG4gdC5lbGN5cmlsbGljID0gMHgwNDNiO1xuIHQuZWxlbWVudCA9IDB4MjIwODtcbiB0LmVsZXZlbmNpcmNsZSA9IDB4MjQ2YTtcbiB0LmVsZXZlbnBhcmVuID0gMHgyNDdlO1xuIHQuZWxldmVucGVyaW9kID0gMHgyNDkyO1xuIHQuZWxldmVucm9tYW4gPSAweDIxN2E7XG4gdC5lbGxpcHNpcyA9IDB4MjAyNjtcbiB0LmVsbGlwc2lzdmVydGljYWwgPSAweDIyZWU7XG4gdC5lbWFjcm9uID0gMHgwMTEzO1xuIHQuZW1hY3JvbmFjdXRlID0gMHgxZTE3O1xuIHQuZW1hY3JvbmdyYXZlID0gMHgxZTE1O1xuIHQuZW1jeXJpbGxpYyA9IDB4MDQzYztcbiB0LmVtZGFzaCA9IDB4MjAxNDtcbiB0LmVtZGFzaHZlcnRpY2FsID0gMHhmZTMxO1xuIHQuZW1vbm9zcGFjZSA9IDB4ZmY0NTtcbiB0LmVtcGhhc2lzbWFya2FybWVuaWFuID0gMHgwNTViO1xuIHQuZW1wdHlzZXQgPSAweDIyMDU7XG4gdC5lbmJvcG9tb2ZvID0gMHgzMTIzO1xuIHQuZW5jeXJpbGxpYyA9IDB4MDQzZDtcbiB0LmVuZGFzaCA9IDB4MjAxMztcbiB0LmVuZGFzaHZlcnRpY2FsID0gMHhmZTMyO1xuIHQuZW5kZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDRhMztcbiB0LmVuZyA9IDB4MDE0YjtcbiB0LmVuZ2JvcG9tb2ZvID0gMHgzMTI1O1xuIHQuZW5naGVjeXJpbGxpYyA9IDB4MDRhNTtcbiB0LmVuaG9va2N5cmlsbGljID0gMHgwNGM4O1xuIHQuZW5zcGFjZSA9IDB4MjAwMjtcbiB0LmVvZ29uZWsgPSAweDAxMTk7XG4gdC5lb2tvcmVhbiA9IDB4MzE1MztcbiB0LmVvcGVuID0gMHgwMjViO1xuIHQuZW9wZW5jbG9zZWQgPSAweDAyOWE7XG4gdC5lb3BlbnJldmVyc2VkID0gMHgwMjVjO1xuIHQuZW9wZW5yZXZlcnNlZGNsb3NlZCA9IDB4MDI1ZTtcbiB0LmVvcGVucmV2ZXJzZWRob29rID0gMHgwMjVkO1xuIHQuZXBhcmVuID0gMHgyNGEwO1xuIHQuZXBzaWxvbiA9IDB4MDNiNTtcbiB0LmVwc2lsb250b25vcyA9IDB4MDNhZDtcbiB0LmVxdWFsID0gMHgwMDNkO1xuIHQuZXF1YWxtb25vc3BhY2UgPSAweGZmMWQ7XG4gdC5lcXVhbHNtYWxsID0gMHhmZTY2O1xuIHQuZXF1YWxzdXBlcmlvciA9IDB4MjA3YztcbiB0LmVxdWl2YWxlbmNlID0gMHgyMjYxO1xuIHQuZXJib3BvbW9mbyA9IDB4MzEyNjtcbiB0LmVyY3lyaWxsaWMgPSAweDA0NDA7XG4gdC5lcmV2ZXJzZWQgPSAweDAyNTg7XG4gdC5lcmV2ZXJzZWRjeXJpbGxpYyA9IDB4MDQ0ZDtcbiB0LmVzY3lyaWxsaWMgPSAweDA0NDE7XG4gdC5lc2Rlc2NlbmRlcmN5cmlsbGljID0gMHgwNGFiO1xuIHQuZXNoID0gMHgwMjgzO1xuIHQuZXNoY3VybCA9IDB4MDI4NjtcbiB0LmVzaG9ydGRldmEgPSAweDA5MGU7XG4gdC5lc2hvcnR2b3dlbHNpZ25kZXZhID0gMHgwOTQ2O1xuIHQuZXNocmV2ZXJzZWRsb29wID0gMHgwMWFhO1xuIHQuZXNoc3F1YXRyZXZlcnNlZCA9IDB4MDI4NTtcbiB0LmVzbWFsbGhpcmFnYW5hID0gMHgzMDQ3O1xuIHQuZXNtYWxsa2F0YWthbmEgPSAweDMwYTc7XG4gdC5lc21hbGxrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2YTtcbiB0LmVzdGltYXRlZCA9IDB4MjEyZTtcbiB0LmVzdXBlcmlvciA9IDB4ZjZlYztcbiB0LmV0YSA9IDB4MDNiNztcbiB0LmV0YXJtZW5pYW4gPSAweDA1Njg7XG4gdC5ldGF0b25vcyA9IDB4MDNhZTtcbiB0LmV0aCA9IDB4MDBmMDtcbiB0LmV0aWxkZSA9IDB4MWViZDtcbiB0LmV0aWxkZWJlbG93ID0gMHgxZTFiO1xuIHQuZXRuYWh0YWZvdWtoaGVicmV3ID0gMHgwNTkxO1xuIHQuZXRuYWh0YWZvdWtobGVmdGhlYnJldyA9IDB4MDU5MTtcbiB0LmV0bmFodGFoZWJyZXcgPSAweDA1OTE7XG4gdC5ldG5haHRhbGVmdGhlYnJldyA9IDB4MDU5MTtcbiB0LmV0dXJuZWQgPSAweDAxZGQ7XG4gdC5ldWtvcmVhbiA9IDB4MzE2MTtcbiB0LmV1cm8gPSAweDIwYWM7XG4gdC5ldm93ZWxzaWduYmVuZ2FsaSA9IDB4MDljNztcbiB0LmV2b3dlbHNpZ25kZXZhID0gMHgwOTQ3O1xuIHQuZXZvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWM3O1xuIHQuZXhjbGFtID0gMHgwMDIxO1xuIHQuZXhjbGFtYXJtZW5pYW4gPSAweDA1NWM7XG4gdC5leGNsYW1kYmwgPSAweDIwM2M7XG4gdC5leGNsYW1kb3duID0gMHgwMGExO1xuIHQuZXhjbGFtZG93bnNtYWxsID0gMHhmN2ExO1xuIHQuZXhjbGFtbW9ub3NwYWNlID0gMHhmZjAxO1xuIHQuZXhjbGFtc21hbGwgPSAweGY3MjE7XG4gdC5leGlzdGVudGlhbCA9IDB4MjIwMztcbiB0LmV6aCA9IDB4MDI5MjtcbiB0LmV6aGNhcm9uID0gMHgwMWVmO1xuIHQuZXpoY3VybCA9IDB4MDI5MztcbiB0LmV6aHJldmVyc2VkID0gMHgwMWI5O1xuIHQuZXpodGFpbCA9IDB4MDFiYTtcbiB0LmYgPSAweDAwNjY7XG4gdC5mYWRldmEgPSAweDA5NWU7XG4gdC5mYWd1cm11a2hpID0gMHgwYTVlO1xuIHQuZmFocmVuaGVpdCA9IDB4MjEwOTtcbiB0LmZhdGhhYXJhYmljID0gMHgwNjRlO1xuIHQuZmF0aGFsb3dhcmFiaWMgPSAweDA2NGU7XG4gdC5mYXRoYXRhbmFyYWJpYyA9IDB4MDY0YjtcbiB0LmZib3BvbW9mbyA9IDB4MzEwODtcbiB0LmZjaXJjbGUgPSAweDI0ZDU7XG4gdC5mZG90YWNjZW50ID0gMHgxZTFmO1xuIHQuZmVoYXJhYmljID0gMHgwNjQxO1xuIHQuZmVoYXJtZW5pYW4gPSAweDA1ODY7XG4gdC5mZWhmaW5hbGFyYWJpYyA9IDB4ZmVkMjtcbiB0LmZlaGluaXRpYWxhcmFiaWMgPSAweGZlZDM7XG4gdC5mZWhtZWRpYWxhcmFiaWMgPSAweGZlZDQ7XG4gdC5mZWljb3B0aWMgPSAweDAzZTU7XG4gdC5mZW1hbGUgPSAweDI2NDA7XG4gdC5mZiA9IDB4ZmIwMDtcbiB0LmZfZiA9IDB4ZmIwMDtcbiB0LmZmaSA9IDB4ZmIwMztcbiB0LmZmbCA9IDB4ZmIwNDtcbiB0LmZpID0gMHhmYjAxO1xuIHQuZmlmdGVlbmNpcmNsZSA9IDB4MjQ2ZTtcbiB0LmZpZnRlZW5wYXJlbiA9IDB4MjQ4MjtcbiB0LmZpZnRlZW5wZXJpb2QgPSAweDI0OTY7XG4gdC5maWd1cmVkYXNoID0gMHgyMDEyO1xuIHQuZmlsbGVkYm94ID0gMHgyNWEwO1xuIHQuZmlsbGVkcmVjdCA9IDB4MjVhYztcbiB0LmZpbmFsa2FmID0gMHgwNWRhO1xuIHQuZmluYWxrYWZkYWdlc2ggPSAweGZiM2E7XG4gdC5maW5hbGthZmRhZ2VzaGhlYnJldyA9IDB4ZmIzYTtcbiB0LmZpbmFsa2FmaGVicmV3ID0gMHgwNWRhO1xuIHQuZmluYWxtZW0gPSAweDA1ZGQ7XG4gdC5maW5hbG1lbWhlYnJldyA9IDB4MDVkZDtcbiB0LmZpbmFsbnVuID0gMHgwNWRmO1xuIHQuZmluYWxudW5oZWJyZXcgPSAweDA1ZGY7XG4gdC5maW5hbHBlID0gMHgwNWUzO1xuIHQuZmluYWxwZWhlYnJldyA9IDB4MDVlMztcbiB0LmZpbmFsdHNhZGkgPSAweDA1ZTU7XG4gdC5maW5hbHRzYWRpaGVicmV3ID0gMHgwNWU1O1xuIHQuZmlyc3R0b25lY2hpbmVzZSA9IDB4MDJjOTtcbiB0LmZpc2hleWUgPSAweDI1Yzk7XG4gdC5maXRhY3lyaWxsaWMgPSAweDA0NzM7XG4gdC5maXZlID0gMHgwMDM1O1xuIHQuZml2ZWFyYWJpYyA9IDB4MDY2NTtcbiB0LmZpdmViZW5nYWxpID0gMHgwOWViO1xuIHQuZml2ZWNpcmNsZSA9IDB4MjQ2NDtcbiB0LmZpdmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmID0gMHgyNzhlO1xuIHQuZml2ZWRldmEgPSAweDA5NmI7XG4gdC5maXZlZWlnaHRocyA9IDB4MjE1ZDtcbiB0LmZpdmVndWphcmF0aSA9IDB4MGFlYjtcbiB0LmZpdmVndXJtdWtoaSA9IDB4MGE2YjtcbiB0LmZpdmVoYWNrYXJhYmljID0gMHgwNjY1O1xuIHQuZml2ZWhhbmd6aG91ID0gMHgzMDI1O1xuIHQuZml2ZWlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjQ7XG4gdC5maXZlaW5mZXJpb3IgPSAweDIwODU7XG4gdC5maXZlbW9ub3NwYWNlID0gMHhmZjE1O1xuIHQuZml2ZW9sZHN0eWxlID0gMHhmNzM1O1xuIHQuZml2ZXBhcmVuID0gMHgyNDc4O1xuIHQuZml2ZXBlcmlvZCA9IDB4MjQ4YztcbiB0LmZpdmVwZXJzaWFuID0gMHgwNmY1O1xuIHQuZml2ZXJvbWFuID0gMHgyMTc0O1xuIHQuZml2ZXN1cGVyaW9yID0gMHgyMDc1O1xuIHQuZml2ZXRoYWkgPSAweDBlNTU7XG4gdC5mbCA9IDB4ZmIwMjtcbiB0LmZsb3JpbiA9IDB4MDE5MjtcbiB0LmZtb25vc3BhY2UgPSAweGZmNDY7XG4gdC5mbXNxdWFyZSA9IDB4MzM5OTtcbiB0LmZvZmFudGhhaSA9IDB4MGUxZjtcbiB0LmZvZmF0aGFpID0gMHgwZTFkO1xuIHQuZm9uZ21hbnRoYWkgPSAweDBlNGY7XG4gdC5mb3JhbGwgPSAweDIyMDA7XG4gdC5mb3VyID0gMHgwMDM0O1xuIHQuZm91cmFyYWJpYyA9IDB4MDY2NDtcbiB0LmZvdXJiZW5nYWxpID0gMHgwOWVhO1xuIHQuZm91cmNpcmNsZSA9IDB4MjQ2MztcbiB0LmZvdXJjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmID0gMHgyNzhkO1xuIHQuZm91cmRldmEgPSAweDA5NmE7XG4gdC5mb3VyZ3VqYXJhdGkgPSAweDBhZWE7XG4gdC5mb3VyZ3VybXVraGkgPSAweDBhNmE7XG4gdC5mb3VyaGFja2FyYWJpYyA9IDB4MDY2NDtcbiB0LmZvdXJoYW5nemhvdSA9IDB4MzAyNDtcbiB0LmZvdXJpZGVvZ3JhcGhpY3BhcmVuID0gMHgzMjIzO1xuIHQuZm91cmluZmVyaW9yID0gMHgyMDg0O1xuIHQuZm91cm1vbm9zcGFjZSA9IDB4ZmYxNDtcbiB0LmZvdXJudW1lcmF0b3JiZW5nYWxpID0gMHgwOWY3O1xuIHQuZm91cm9sZHN0eWxlID0gMHhmNzM0O1xuIHQuZm91cnBhcmVuID0gMHgyNDc3O1xuIHQuZm91cnBlcmlvZCA9IDB4MjQ4YjtcbiB0LmZvdXJwZXJzaWFuID0gMHgwNmY0O1xuIHQuZm91cnJvbWFuID0gMHgyMTczO1xuIHQuZm91cnN1cGVyaW9yID0gMHgyMDc0O1xuIHQuZm91cnRlZW5jaXJjbGUgPSAweDI0NmQ7XG4gdC5mb3VydGVlbnBhcmVuID0gMHgyNDgxO1xuIHQuZm91cnRlZW5wZXJpb2QgPSAweDI0OTU7XG4gdC5mb3VydGhhaSA9IDB4MGU1NDtcbiB0LmZvdXJ0aHRvbmVjaGluZXNlID0gMHgwMmNiO1xuIHQuZnBhcmVuID0gMHgyNGExO1xuIHQuZnJhY3Rpb24gPSAweDIwNDQ7XG4gdC5mcmFuYyA9IDB4MjBhMztcbiB0LmcgPSAweDAwNjc7XG4gdC5nYWJlbmdhbGkgPSAweDA5OTc7XG4gdC5nYWN1dGUgPSAweDAxZjU7XG4gdC5nYWRldmEgPSAweDA5MTc7XG4gdC5nYWZhcmFiaWMgPSAweDA2YWY7XG4gdC5nYWZmaW5hbGFyYWJpYyA9IDB4ZmI5MztcbiB0LmdhZmluaXRpYWxhcmFiaWMgPSAweGZiOTQ7XG4gdC5nYWZtZWRpYWxhcmFiaWMgPSAweGZiOTU7XG4gdC5nYWd1amFyYXRpID0gMHgwYTk3O1xuIHQuZ2FndXJtdWtoaSA9IDB4MGExNztcbiB0LmdhaGlyYWdhbmEgPSAweDMwNGM7XG4gdC5nYWthdGFrYW5hID0gMHgzMGFjO1xuIHQuZ2FtbWEgPSAweDAzYjM7XG4gdC5nYW1tYWxhdGluc21hbGwgPSAweDAyNjM7XG4gdC5nYW1tYXN1cGVyaW9yID0gMHgwMmUwO1xuIHQuZ2FuZ2lhY29wdGljID0gMHgwM2ViO1xuIHQuZ2JvcG9tb2ZvID0gMHgzMTBkO1xuIHQuZ2JyZXZlID0gMHgwMTFmO1xuIHQuZ2Nhcm9uID0gMHgwMWU3O1xuIHQuZ2NlZGlsbGEgPSAweDAxMjM7XG4gdC5nY2lyY2xlID0gMHgyNGQ2O1xuIHQuZ2NpcmN1bWZsZXggPSAweDAxMWQ7XG4gdC5nY29tbWFhY2NlbnQgPSAweDAxMjM7XG4gdC5nZG90ID0gMHgwMTIxO1xuIHQuZ2RvdGFjY2VudCA9IDB4MDEyMTtcbiB0LmdlY3lyaWxsaWMgPSAweDA0MzM7XG4gdC5nZWhpcmFnYW5hID0gMHgzMDUyO1xuIHQuZ2VrYXRha2FuYSA9IDB4MzBiMjtcbiB0Lmdlb21ldHJpY2FsbHllcXVhbCA9IDB4MjI1MTtcbiB0LmdlcmVzaGFjY2VudGhlYnJldyA9IDB4MDU5YztcbiB0LmdlcmVzaGhlYnJldyA9IDB4MDVmMztcbiB0LmdlcmVzaG11cWRhbWhlYnJldyA9IDB4MDU5ZDtcbiB0Lmdlcm1hbmRibHMgPSAweDAwZGY7XG4gdC5nZXJzaGF5aW1hY2NlbnRoZWJyZXcgPSAweDA1OWU7XG4gdC5nZXJzaGF5aW1oZWJyZXcgPSAweDA1ZjQ7XG4gdC5nZXRhbWFyayA9IDB4MzAxMztcbiB0LmdoYWJlbmdhbGkgPSAweDA5OTg7XG4gdC5naGFkYXJtZW5pYW4gPSAweDA1NzI7XG4gdC5naGFkZXZhID0gMHgwOTE4O1xuIHQuZ2hhZ3VqYXJhdGkgPSAweDBhOTg7XG4gdC5naGFndXJtdWtoaSA9IDB4MGExODtcbiB0LmdoYWluYXJhYmljID0gMHgwNjNhO1xuIHQuZ2hhaW5maW5hbGFyYWJpYyA9IDB4ZmVjZTtcbiB0LmdoYWluaW5pdGlhbGFyYWJpYyA9IDB4ZmVjZjtcbiB0LmdoYWlubWVkaWFsYXJhYmljID0gMHhmZWQwO1xuIHQuZ2hlbWlkZGxlaG9va2N5cmlsbGljID0gMHgwNDk1O1xuIHQuZ2hlc3Ryb2tlY3lyaWxsaWMgPSAweDA0OTM7XG4gdC5naGV1cHR1cm5jeXJpbGxpYyA9IDB4MDQ5MTtcbiB0LmdoaGFkZXZhID0gMHgwOTVhO1xuIHQuZ2hoYWd1cm11a2hpID0gMHgwYTVhO1xuIHQuZ2hvb2sgPSAweDAyNjA7XG4gdC5naHpzcXVhcmUgPSAweDMzOTM7XG4gdC5naWhpcmFnYW5hID0gMHgzMDRlO1xuIHQuZ2lrYXRha2FuYSA9IDB4MzBhZTtcbiB0LmdpbWFybWVuaWFuID0gMHgwNTYzO1xuIHQuZ2ltZWwgPSAweDA1ZDI7XG4gdC5naW1lbGRhZ2VzaCA9IDB4ZmIzMjtcbiB0LmdpbWVsZGFnZXNoaGVicmV3ID0gMHhmYjMyO1xuIHQuZ2ltZWxoZWJyZXcgPSAweDA1ZDI7XG4gdC5namVjeXJpbGxpYyA9IDB4MDQ1MztcbiB0Lmdsb3R0YWxpbnZlcnRlZHN0cm9rZSA9IDB4MDFiZTtcbiB0Lmdsb3R0YWxzdG9wID0gMHgwMjk0O1xuIHQuZ2xvdHRhbHN0b3BpbnZlcnRlZCA9IDB4MDI5NjtcbiB0Lmdsb3R0YWxzdG9wbW9kID0gMHgwMmMwO1xuIHQuZ2xvdHRhbHN0b3ByZXZlcnNlZCA9IDB4MDI5NTtcbiB0Lmdsb3R0YWxzdG9wcmV2ZXJzZWRtb2QgPSAweDAyYzE7XG4gdC5nbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3IgPSAweDAyZTQ7XG4gdC5nbG90dGFsc3RvcHN0cm9rZSA9IDB4MDJhMTtcbiB0Lmdsb3R0YWxzdG9wc3Ryb2tlcmV2ZXJzZWQgPSAweDAyYTI7XG4gdC5nbWFjcm9uID0gMHgxZTIxO1xuIHQuZ21vbm9zcGFjZSA9IDB4ZmY0NztcbiB0LmdvaGlyYWdhbmEgPSAweDMwNTQ7XG4gdC5nb2thdGFrYW5hID0gMHgzMGI0O1xuIHQuZ3BhcmVuID0gMHgyNGEyO1xuIHQuZ3Bhc3F1YXJlID0gMHgzM2FjO1xuIHQuZ3JhZGllbnQgPSAweDIyMDc7XG4gdC5ncmF2ZSA9IDB4MDA2MDtcbiB0LmdyYXZlYmVsb3djbWIgPSAweDAzMTY7XG4gdC5ncmF2ZWNtYiA9IDB4MDMwMDtcbiB0LmdyYXZlY29tYiA9IDB4MDMwMDtcbiB0LmdyYXZlZGV2YSA9IDB4MDk1MztcbiB0LmdyYXZlbG93bW9kID0gMHgwMmNlO1xuIHQuZ3JhdmVtb25vc3BhY2UgPSAweGZmNDA7XG4gdC5ncmF2ZXRvbmVjbWIgPSAweDAzNDA7XG4gdC5ncmVhdGVyID0gMHgwMDNlO1xuIHQuZ3JlYXRlcmVxdWFsID0gMHgyMjY1O1xuIHQuZ3JlYXRlcmVxdWFsb3JsZXNzID0gMHgyMmRiO1xuIHQuZ3JlYXRlcm1vbm9zcGFjZSA9IDB4ZmYxZTtcbiB0LmdyZWF0ZXJvcmVxdWl2YWxlbnQgPSAweDIyNzM7XG4gdC5ncmVhdGVyb3JsZXNzID0gMHgyMjc3O1xuIHQuZ3JlYXRlcm92ZXJlcXVhbCA9IDB4MjI2NztcbiB0LmdyZWF0ZXJzbWFsbCA9IDB4ZmU2NTtcbiB0LmdzY3JpcHQgPSAweDAyNjE7XG4gdC5nc3Ryb2tlID0gMHgwMWU1O1xuIHQuZ3VoaXJhZ2FuYSA9IDB4MzA1MDtcbiB0Lmd1aWxsZW1vdGxlZnQgPSAweDAwYWI7XG4gdC5ndWlsbGVtb3RyaWdodCA9IDB4MDBiYjtcbiB0Lmd1aWxzaW5nbGxlZnQgPSAweDIwMzk7XG4gdC5ndWlsc2luZ2xyaWdodCA9IDB4MjAzYTtcbiB0Lmd1a2F0YWthbmEgPSAweDMwYjA7XG4gdC5ndXJhbXVzcXVhcmUgPSAweDMzMTg7XG4gdC5neXNxdWFyZSA9IDB4MzNjOTtcbiB0LmggPSAweDAwNjg7XG4gdC5oYWFia2hhc2lhbmN5cmlsbGljID0gMHgwNGE5O1xuIHQuaGFhbHRvbmVhcmFiaWMgPSAweDA2YzE7XG4gdC5oYWJlbmdhbGkgPSAweDA5Yjk7XG4gdC5oYWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNGIzO1xuIHQuaGFkZXZhID0gMHgwOTM5O1xuIHQuaGFndWphcmF0aSA9IDB4MGFiOTtcbiB0LmhhZ3VybXVraGkgPSAweDBhMzk7XG4gdC5oYWhhcmFiaWMgPSAweDA2MmQ7XG4gdC5oYWhmaW5hbGFyYWJpYyA9IDB4ZmVhMjtcbiB0LmhhaGluaXRpYWxhcmFiaWMgPSAweGZlYTM7XG4gdC5oYWhpcmFnYW5hID0gMHgzMDZmO1xuIHQuaGFobWVkaWFsYXJhYmljID0gMHhmZWE0O1xuIHQuaGFpdHVzcXVhcmUgPSAweDMzMmE7XG4gdC5oYWthdGFrYW5hID0gMHgzMGNmO1xuIHQuaGFrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4YTtcbiB0LmhhbGFudGd1cm11a2hpID0gMHgwYTRkO1xuIHQuaGFtemFhcmFiaWMgPSAweDA2MjE7XG4gdC5oYW16YWxvd2FyYWJpYyA9IDB4MDYyMTtcbiB0Lmhhbmd1bGZpbGxlciA9IDB4MzE2NDtcbiB0LmhhcmRzaWduY3lyaWxsaWMgPSAweDA0NGE7XG4gdC5oYXJwb29ubGVmdGJhcmJ1cCA9IDB4MjFiYztcbiB0LmhhcnBvb25yaWdodGJhcmJ1cCA9IDB4MjFjMDtcbiB0Lmhhc3F1YXJlID0gMHgzM2NhO1xuIHQuaGF0YWZwYXRhaCA9IDB4MDViMjtcbiB0LmhhdGFmcGF0YWgxNiA9IDB4MDViMjtcbiB0LmhhdGFmcGF0YWgyMyA9IDB4MDViMjtcbiB0LmhhdGFmcGF0YWgyZiA9IDB4MDViMjtcbiB0LmhhdGFmcGF0YWhoZWJyZXcgPSAweDA1YjI7XG4gdC5oYXRhZnBhdGFobmFycm93aGVicmV3ID0gMHgwNWIyO1xuIHQuaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXcgPSAweDA1YjI7XG4gdC5oYXRhZnBhdGFod2lkZWhlYnJldyA9IDB4MDViMjtcbiB0LmhhdGFmcWFtYXRzID0gMHgwNWIzO1xuIHQuaGF0YWZxYW1hdHMxYiA9IDB4MDViMztcbiB0LmhhdGFmcWFtYXRzMjggPSAweDA1YjM7XG4gdC5oYXRhZnFhbWF0czM0ID0gMHgwNWIzO1xuIHQuaGF0YWZxYW1hdHNoZWJyZXcgPSAweDA1YjM7XG4gdC5oYXRhZnFhbWF0c25hcnJvd2hlYnJldyA9IDB4MDViMztcbiB0LmhhdGFmcWFtYXRzcXVhcnRlcmhlYnJldyA9IDB4MDViMztcbiB0LmhhdGFmcWFtYXRzd2lkZWhlYnJldyA9IDB4MDViMztcbiB0LmhhdGFmc2Vnb2wgPSAweDA1YjE7XG4gdC5oYXRhZnNlZ29sMTcgPSAweDA1YjE7XG4gdC5oYXRhZnNlZ29sMjQgPSAweDA1YjE7XG4gdC5oYXRhZnNlZ29sMzAgPSAweDA1YjE7XG4gdC5oYXRhZnNlZ29saGVicmV3ID0gMHgwNWIxO1xuIHQuaGF0YWZzZWdvbG5hcnJvd2hlYnJldyA9IDB4MDViMTtcbiB0LmhhdGFmc2Vnb2xxdWFydGVyaGVicmV3ID0gMHgwNWIxO1xuIHQuaGF0YWZzZWdvbHdpZGVoZWJyZXcgPSAweDA1YjE7XG4gdC5oYmFyID0gMHgwMTI3O1xuIHQuaGJvcG9tb2ZvID0gMHgzMTBmO1xuIHQuaGJyZXZlYmVsb3cgPSAweDFlMmI7XG4gdC5oY2VkaWxsYSA9IDB4MWUyOTtcbiB0LmhjaXJjbGUgPSAweDI0ZDc7XG4gdC5oY2lyY3VtZmxleCA9IDB4MDEyNTtcbiB0LmhkaWVyZXNpcyA9IDB4MWUyNztcbiB0Lmhkb3RhY2NlbnQgPSAweDFlMjM7XG4gdC5oZG90YmVsb3cgPSAweDFlMjU7XG4gdC5oZSA9IDB4MDVkNDtcbiB0LmhlYXJ0ID0gMHgyNjY1O1xuIHQuaGVhcnRzdWl0YmxhY2sgPSAweDI2NjU7XG4gdC5oZWFydHN1aXR3aGl0ZSA9IDB4MjY2MTtcbiB0LmhlZGFnZXNoID0gMHhmYjM0O1xuIHQuaGVkYWdlc2hoZWJyZXcgPSAweGZiMzQ7XG4gdC5oZWhhbHRvbmVhcmFiaWMgPSAweDA2YzE7XG4gdC5oZWhhcmFiaWMgPSAweDA2NDc7XG4gdC5oZWhlYnJldyA9IDB4MDVkNDtcbiB0LmhlaGZpbmFsYWx0b25lYXJhYmljID0gMHhmYmE3O1xuIHQuaGVoZmluYWxhbHR0d29hcmFiaWMgPSAweGZlZWE7XG4gdC5oZWhmaW5hbGFyYWJpYyA9IDB4ZmVlYTtcbiB0LmhlaGhhbXphYWJvdmVmaW5hbGFyYWJpYyA9IDB4ZmJhNTtcbiB0LmhlaGhhbXphYWJvdmVpc29sYXRlZGFyYWJpYyA9IDB4ZmJhNDtcbiB0LmhlaGluaXRpYWxhbHRvbmVhcmFiaWMgPSAweGZiYTg7XG4gdC5oZWhpbml0aWFsYXJhYmljID0gMHhmZWViO1xuIHQuaGVoaXJhZ2FuYSA9IDB4MzA3ODtcbiB0LmhlaG1lZGlhbGFsdG9uZWFyYWJpYyA9IDB4ZmJhOTtcbiB0LmhlaG1lZGlhbGFyYWJpYyA9IDB4ZmVlYztcbiB0LmhlaXNlaWVyYXNxdWFyZSA9IDB4MzM3YjtcbiB0Lmhla2F0YWthbmEgPSAweDMwZDg7XG4gdC5oZWthdGFrYW5haGFsZndpZHRoID0gMHhmZjhkO1xuIHQuaGVrdXRhYXJ1c3F1YXJlID0gMHgzMzM2O1xuIHQuaGVuZ2hvb2sgPSAweDAyNjc7XG4gdC5oZXJ1dHVzcXVhcmUgPSAweDMzMzk7XG4gdC5oZXQgPSAweDA1ZDc7XG4gdC5oZXRoZWJyZXcgPSAweDA1ZDc7XG4gdC5oaG9vayA9IDB4MDI2NjtcbiB0Lmhob29rc3VwZXJpb3IgPSAweDAyYjE7XG4gdC5oaWV1aGFjaXJjbGVrb3JlYW4gPSAweDMyN2I7XG4gdC5oaWV1aGFwYXJlbmtvcmVhbiA9IDB4MzIxYjtcbiB0LmhpZXVoY2lyY2xla29yZWFuID0gMHgzMjZkO1xuIHQuaGlldWhrb3JlYW4gPSAweDMxNGU7XG4gdC5oaWV1aHBhcmVua29yZWFuID0gMHgzMjBkO1xuIHQuaGloaXJhZ2FuYSA9IDB4MzA3MjtcbiB0Lmhpa2F0YWthbmEgPSAweDMwZDI7XG4gdC5oaWthdGFrYW5haGFsZndpZHRoID0gMHhmZjhiO1xuIHQuaGlyaXEgPSAweDA1YjQ7XG4gdC5oaXJpcTE0ID0gMHgwNWI0O1xuIHQuaGlyaXEyMSA9IDB4MDViNDtcbiB0LmhpcmlxMmQgPSAweDA1YjQ7XG4gdC5oaXJpcWhlYnJldyA9IDB4MDViNDtcbiB0LmhpcmlxbmFycm93aGVicmV3ID0gMHgwNWI0O1xuIHQuaGlyaXFxdWFydGVyaGVicmV3ID0gMHgwNWI0O1xuIHQuaGlyaXF3aWRlaGVicmV3ID0gMHgwNWI0O1xuIHQuaGxpbmViZWxvdyA9IDB4MWU5NjtcbiB0Lmhtb25vc3BhY2UgPSAweGZmNDg7XG4gdC5ob2FybWVuaWFuID0gMHgwNTcwO1xuIHQuaG9oaXB0aGFpID0gMHgwZTJiO1xuIHQuaG9oaXJhZ2FuYSA9IDB4MzA3YjtcbiB0Lmhva2F0YWthbmEgPSAweDMwZGI7XG4gdC5ob2thdGFrYW5haGFsZndpZHRoID0gMHhmZjhlO1xuIHQuaG9sYW0gPSAweDA1Yjk7XG4gdC5ob2xhbTE5ID0gMHgwNWI5O1xuIHQuaG9sYW0yNiA9IDB4MDViOTtcbiB0LmhvbGFtMzIgPSAweDA1Yjk7XG4gdC5ob2xhbWhlYnJldyA9IDB4MDViOTtcbiB0LmhvbGFtbmFycm93aGVicmV3ID0gMHgwNWI5O1xuIHQuaG9sYW1xdWFydGVyaGVicmV3ID0gMHgwNWI5O1xuIHQuaG9sYW13aWRlaGVicmV3ID0gMHgwNWI5O1xuIHQuaG9ub2todWt0aGFpID0gMHgwZTJlO1xuIHQuaG9va2Fib3ZlY29tYiA9IDB4MDMwOTtcbiB0Lmhvb2tjbWIgPSAweDAzMDk7XG4gdC5ob29rcGFsYXRhbGl6ZWRiZWxvd2NtYiA9IDB4MDMyMTtcbiB0Lmhvb2tyZXRyb2ZsZXhiZWxvd2NtYiA9IDB4MDMyMjtcbiB0Lmhvb25zcXVhcmUgPSAweDMzNDI7XG4gdC5ob3JpY29wdGljID0gMHgwM2U5O1xuIHQuaG9yaXpvbnRhbGJhciA9IDB4MjAxNTtcbiB0Lmhvcm5jbWIgPSAweDAzMWI7XG4gdC5ob3RzcHJpbmdzID0gMHgyNjY4O1xuIHQuaG91c2UgPSAweDIzMDI7XG4gdC5ocGFyZW4gPSAweDI0YTM7XG4gdC5oc3VwZXJpb3IgPSAweDAyYjA7XG4gdC5odHVybmVkID0gMHgwMjY1O1xuIHQuaHVoaXJhZ2FuYSA9IDB4MzA3NTtcbiB0Lmh1aWl0b3NxdWFyZSA9IDB4MzMzMztcbiB0Lmh1a2F0YWthbmEgPSAweDMwZDU7XG4gdC5odWthdGFrYW5haGFsZndpZHRoID0gMHhmZjhjO1xuIHQuaHVuZ2FydW1sYXV0ID0gMHgwMmRkO1xuIHQuaHVuZ2FydW1sYXV0Y21iID0gMHgwMzBiO1xuIHQuaHYgPSAweDAxOTU7XG4gdC5oeXBoZW4gPSAweDAwMmQ7XG4gdC5oeXBoZW5pbmZlcmlvciA9IDB4ZjZlNTtcbiB0Lmh5cGhlbm1vbm9zcGFjZSA9IDB4ZmYwZDtcbiB0Lmh5cGhlbnNtYWxsID0gMHhmZTYzO1xuIHQuaHlwaGVuc3VwZXJpb3IgPSAweGY2ZTY7XG4gdC5oeXBoZW50d28gPSAweDIwMTA7XG4gdC5pID0gMHgwMDY5O1xuIHQuaWFjdXRlID0gMHgwMGVkO1xuIHQuaWFjeXJpbGxpYyA9IDB4MDQ0ZjtcbiB0LmliZW5nYWxpID0gMHgwOTg3O1xuIHQuaWJvcG9tb2ZvID0gMHgzMTI3O1xuIHQuaWJyZXZlID0gMHgwMTJkO1xuIHQuaWNhcm9uID0gMHgwMWQwO1xuIHQuaWNpcmNsZSA9IDB4MjRkODtcbiB0LmljaXJjdW1mbGV4ID0gMHgwMGVlO1xuIHQuaWN5cmlsbGljID0gMHgwNDU2O1xuIHQuaWRibGdyYXZlID0gMHgwMjA5O1xuIHQuaWRlb2dyYXBoZWFydGhjaXJjbGUgPSAweDMyOGY7XG4gdC5pZGVvZ3JhcGhmaXJlY2lyY2xlID0gMHgzMjhiO1xuIHQuaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuID0gMHgzMjNmO1xuIHQuaWRlb2dyYXBoaWNjYWxscGFyZW4gPSAweDMyM2E7XG4gdC5pZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZSA9IDB4MzJhNTtcbiB0LmlkZW9ncmFwaGljY2xvc2UgPSAweDMwMDY7XG4gdC5pZGVvZ3JhcGhpY2NvbW1hID0gMHgzMDAxO1xuIHQuaWRlb2dyYXBoaWNjb21tYWxlZnQgPSAweGZmNjQ7XG4gdC5pZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4gPSAweDMyMzc7XG4gdC5pZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGUgPSAweDMyYTM7XG4gdC5pZGVvZ3JhcGhpY2VhcnRocGFyZW4gPSAweDMyMmY7XG4gdC5pZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiA9IDB4MzIzZDtcbiB0LmlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlID0gMHgzMjlkO1xuIHQuaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuID0gMHgzMjQwO1xuIHQuaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUgPSAweDMyOTY7XG4gdC5pZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuID0gMHgzMjM2O1xuIHQuaWRlb2dyYXBoaWNmaXJlcGFyZW4gPSAweDMyMmI7XG4gdC5pZGVvZ3JhcGhpY2hhdmVwYXJlbiA9IDB4MzIzMjtcbiB0LmlkZW9ncmFwaGljaGlnaGNpcmNsZSA9IDB4MzJhNDtcbiB0LmlkZW9ncmFwaGljaXRlcmF0aW9ubWFyayA9IDB4MzAwNTtcbiB0LmlkZW9ncmFwaGljbGFib3JjaXJjbGUgPSAweDMyOTg7XG4gdC5pZGVvZ3JhcGhpY2xhYm9ycGFyZW4gPSAweDMyMzg7XG4gdC5pZGVvZ3JhcGhpY2xlZnRjaXJjbGUgPSAweDMyYTc7XG4gdC5pZGVvZ3JhcGhpY2xvd2NpcmNsZSA9IDB4MzJhNjtcbiB0LmlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGUgPSAweDMyYTk7XG4gdC5pZGVvZ3JhcGhpY21ldGFscGFyZW4gPSAweDMyMmU7XG4gdC5pZGVvZ3JhcGhpY21vb25wYXJlbiA9IDB4MzIyYTtcbiB0LmlkZW9ncmFwaGljbmFtZXBhcmVuID0gMHgzMjM0O1xuIHQuaWRlb2dyYXBoaWNwZXJpb2QgPSAweDMwMDI7XG4gdC5pZGVvZ3JhcGhpY3ByaW50Y2lyY2xlID0gMHgzMjllO1xuIHQuaWRlb2dyYXBoaWNyZWFjaHBhcmVuID0gMHgzMjQzO1xuIHQuaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbiA9IDB4MzIzOTtcbiB0LmlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiA9IDB4MzIzZTtcbiB0LmlkZW9ncmFwaGljcmlnaHRjaXJjbGUgPSAweDMyYTg7XG4gdC5pZGVvZ3JhcGhpY3NlY3JldGNpcmNsZSA9IDB4MzI5OTtcbiB0LmlkZW9ncmFwaGljc2VsZnBhcmVuID0gMHgzMjQyO1xuIHQuaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW4gPSAweDMyMzM7XG4gdC5pZGVvZ3JhcGhpY3NwYWNlID0gMHgzMDAwO1xuIHQuaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4gPSAweDMyMzU7XG4gdC5pZGVvZ3JhcGhpY3N0b2NrcGFyZW4gPSAweDMyMzE7XG4gdC5pZGVvZ3JhcGhpY3N0dWR5cGFyZW4gPSAweDMyM2I7XG4gdC5pZGVvZ3JhcGhpY3N1bnBhcmVuID0gMHgzMjMwO1xuIHQuaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbiA9IDB4MzIzYztcbiB0LmlkZW9ncmFwaGljd2F0ZXJwYXJlbiA9IDB4MzIyYztcbiB0LmlkZW9ncmFwaGljd29vZHBhcmVuID0gMHgzMjJkO1xuIHQuaWRlb2dyYXBoaWN6ZXJvID0gMHgzMDA3O1xuIHQuaWRlb2dyYXBobWV0YWxjaXJjbGUgPSAweDMyOGU7XG4gdC5pZGVvZ3JhcGhtb29uY2lyY2xlID0gMHgzMjhhO1xuIHQuaWRlb2dyYXBobmFtZWNpcmNsZSA9IDB4MzI5NDtcbiB0LmlkZW9ncmFwaHN1bmNpcmNsZSA9IDB4MzI5MDtcbiB0LmlkZW9ncmFwaHdhdGVyY2lyY2xlID0gMHgzMjhjO1xuIHQuaWRlb2dyYXBod29vZGNpcmNsZSA9IDB4MzI4ZDtcbiB0LmlkZXZhID0gMHgwOTA3O1xuIHQuaWRpZXJlc2lzID0gMHgwMGVmO1xuIHQuaWRpZXJlc2lzYWN1dGUgPSAweDFlMmY7XG4gdC5pZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRlNTtcbiB0Lmlkb3RiZWxvdyA9IDB4MWVjYjtcbiB0LmllYnJldmVjeXJpbGxpYyA9IDB4MDRkNztcbiB0LmllY3lyaWxsaWMgPSAweDA0MzU7XG4gdC5pZXVuZ2FjaXJjbGVrb3JlYW4gPSAweDMyNzU7XG4gdC5pZXVuZ2FwYXJlbmtvcmVhbiA9IDB4MzIxNTtcbiB0LmlldW5nY2lyY2xla29yZWFuID0gMHgzMjY3O1xuIHQuaWV1bmdrb3JlYW4gPSAweDMxNDc7XG4gdC5pZXVuZ3BhcmVua29yZWFuID0gMHgzMjA3O1xuIHQuaWdyYXZlID0gMHgwMGVjO1xuIHQuaWd1amFyYXRpID0gMHgwYTg3O1xuIHQuaWd1cm11a2hpID0gMHgwYTA3O1xuIHQuaWhpcmFnYW5hID0gMHgzMDQ0O1xuIHQuaWhvb2thYm92ZSA9IDB4MWVjOTtcbiB0LmlpYmVuZ2FsaSA9IDB4MDk4ODtcbiB0LmlpY3lyaWxsaWMgPSAweDA0Mzg7XG4gdC5paWRldmEgPSAweDA5MDg7XG4gdC5paWd1amFyYXRpID0gMHgwYTg4O1xuIHQuaWlndXJtdWtoaSA9IDB4MGEwODtcbiB0LmlpbWF0cmFndXJtdWtoaSA9IDB4MGE0MDtcbiB0LmlpbnZlcnRlZGJyZXZlID0gMHgwMjBiO1xuIHQuaWlzaG9ydGN5cmlsbGljID0gMHgwNDM5O1xuIHQuaWl2b3dlbHNpZ25iZW5nYWxpID0gMHgwOWMwO1xuIHQuaWl2b3dlbHNpZ25kZXZhID0gMHgwOTQwO1xuIHQuaWl2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjMDtcbiB0LmlqID0gMHgwMTMzO1xuIHQuaWthdGFrYW5hID0gMHgzMGE0O1xuIHQuaWthdGFrYW5haGFsZndpZHRoID0gMHhmZjcyO1xuIHQuaWtvcmVhbiA9IDB4MzE2MztcbiB0LmlsZGUgPSAweDAyZGM7XG4gdC5pbHV5aGVicmV3ID0gMHgwNWFjO1xuIHQuaW1hY3JvbiA9IDB4MDEyYjtcbiB0LmltYWNyb25jeXJpbGxpYyA9IDB4MDRlMztcbiB0LmltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWwgPSAweDIyNTM7XG4gdC5pbWF0cmFndXJtdWtoaSA9IDB4MGEzZjtcbiB0Lmltb25vc3BhY2UgPSAweGZmNDk7XG4gdC5pbmNyZW1lbnQgPSAweDIyMDY7XG4gdC5pbmZpbml0eSA9IDB4MjIxZTtcbiB0LmluaWFybWVuaWFuID0gMHgwNTZiO1xuIHQuaW50ZWdyYWwgPSAweDIyMmI7XG4gdC5pbnRlZ3JhbGJvdHRvbSA9IDB4MjMyMTtcbiB0LmludGVncmFsYnQgPSAweDIzMjE7XG4gdC5pbnRlZ3JhbGV4ID0gMHhmOGY1O1xuIHQuaW50ZWdyYWx0b3AgPSAweDIzMjA7XG4gdC5pbnRlZ3JhbHRwID0gMHgyMzIwO1xuIHQuaW50ZXJzZWN0aW9uID0gMHgyMjI5O1xuIHQuaW50aXNxdWFyZSA9IDB4MzMwNTtcbiB0LmludmJ1bGxldCA9IDB4MjVkODtcbiB0LmludmNpcmNsZSA9IDB4MjVkOTtcbiB0LmludnNtaWxlZmFjZSA9IDB4MjYzYjtcbiB0LmlvY3lyaWxsaWMgPSAweDA0NTE7XG4gdC5pb2dvbmVrID0gMHgwMTJmO1xuIHQuaW90YSA9IDB4MDNiOTtcbiB0LmlvdGFkaWVyZXNpcyA9IDB4MDNjYTtcbiB0LmlvdGFkaWVyZXNpc3Rvbm9zID0gMHgwMzkwO1xuIHQuaW90YWxhdGluID0gMHgwMjY5O1xuIHQuaW90YXRvbm9zID0gMHgwM2FmO1xuIHQuaXBhcmVuID0gMHgyNGE0O1xuIHQuaXJpZ3VybXVraGkgPSAweDBhNzI7XG4gdC5pc21hbGxoaXJhZ2FuYSA9IDB4MzA0MztcbiB0LmlzbWFsbGthdGFrYW5hID0gMHgzMGEzO1xuIHQuaXNtYWxsa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNjg7XG4gdC5pc3NoYXJiZW5nYWxpID0gMHgwOWZhO1xuIHQuaXN0cm9rZSA9IDB4MDI2ODtcbiB0LmlzdXBlcmlvciA9IDB4ZjZlZDtcbiB0Lml0ZXJhdGlvbmhpcmFnYW5hID0gMHgzMDlkO1xuIHQuaXRlcmF0aW9ua2F0YWthbmEgPSAweDMwZmQ7XG4gdC5pdGlsZGUgPSAweDAxMjk7XG4gdC5pdGlsZGViZWxvdyA9IDB4MWUyZDtcbiB0Lml1Ym9wb21vZm8gPSAweDMxMjk7XG4gdC5pdWN5cmlsbGljID0gMHgwNDRlO1xuIHQuaXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5YmY7XG4gdC5pdm93ZWxzaWduZGV2YSA9IDB4MDkzZjtcbiB0Lml2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFiZjtcbiB0Lml6aGl0c2FjeXJpbGxpYyA9IDB4MDQ3NTtcbiB0Lml6aGl0c2FkYmxncmF2ZWN5cmlsbGljID0gMHgwNDc3O1xuIHQuaiA9IDB4MDA2YTtcbiB0LmphYXJtZW5pYW4gPSAweDA1NzE7XG4gdC5qYWJlbmdhbGkgPSAweDA5OWM7XG4gdC5qYWRldmEgPSAweDA5MWM7XG4gdC5qYWd1amFyYXRpID0gMHgwYTljO1xuIHQuamFndXJtdWtoaSA9IDB4MGExYztcbiB0Lmpib3BvbW9mbyA9IDB4MzExMDtcbiB0LmpjYXJvbiA9IDB4MDFmMDtcbiB0LmpjaXJjbGUgPSAweDI0ZDk7XG4gdC5qY2lyY3VtZmxleCA9IDB4MDEzNTtcbiB0Lmpjcm9zc2VkdGFpbCA9IDB4MDI5ZDtcbiB0Lmpkb3RsZXNzc3Ryb2tlID0gMHgwMjVmO1xuIHQuamVjeXJpbGxpYyA9IDB4MDQ1ODtcbiB0LmplZW1hcmFiaWMgPSAweDA2MmM7XG4gdC5qZWVtZmluYWxhcmFiaWMgPSAweGZlOWU7XG4gdC5qZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmU5ZjtcbiB0LmplZW1tZWRpYWxhcmFiaWMgPSAweGZlYTA7XG4gdC5qZWhhcmFiaWMgPSAweDA2OTg7XG4gdC5qZWhmaW5hbGFyYWJpYyA9IDB4ZmI4YjtcbiB0LmpoYWJlbmdhbGkgPSAweDA5OWQ7XG4gdC5qaGFkZXZhID0gMHgwOTFkO1xuIHQuamhhZ3VqYXJhdGkgPSAweDBhOWQ7XG4gdC5qaGFndXJtdWtoaSA9IDB4MGExZDtcbiB0LmpoZWhhcm1lbmlhbiA9IDB4MDU3YjtcbiB0LmppcyA9IDB4MzAwNDtcbiB0Lmptb25vc3BhY2UgPSAweGZmNGE7XG4gdC5qcGFyZW4gPSAweDI0YTU7XG4gdC5qc3VwZXJpb3IgPSAweDAyYjI7XG4gdC5rID0gMHgwMDZiO1xuIHQua2FiYXNoa2lyY3lyaWxsaWMgPSAweDA0YTE7XG4gdC5rYWJlbmdhbGkgPSAweDA5OTU7XG4gdC5rYWN1dGUgPSAweDFlMzE7XG4gdC5rYWN5cmlsbGljID0gMHgwNDNhO1xuIHQua2FkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDQ5YjtcbiB0LmthZGV2YSA9IDB4MDkxNTtcbiB0LmthZiA9IDB4MDVkYjtcbiB0LmthZmFyYWJpYyA9IDB4MDY0MztcbiB0LmthZmRhZ2VzaCA9IDB4ZmIzYjtcbiB0LmthZmRhZ2VzaGhlYnJldyA9IDB4ZmIzYjtcbiB0LmthZmZpbmFsYXJhYmljID0gMHhmZWRhO1xuIHQua2FmaGVicmV3ID0gMHgwNWRiO1xuIHQua2FmaW5pdGlhbGFyYWJpYyA9IDB4ZmVkYjtcbiB0LmthZm1lZGlhbGFyYWJpYyA9IDB4ZmVkYztcbiB0LmthZnJhZmVoZWJyZXcgPSAweGZiNGQ7XG4gdC5rYWd1amFyYXRpID0gMHgwYTk1O1xuIHQua2FndXJtdWtoaSA9IDB4MGExNTtcbiB0LmthaGlyYWdhbmEgPSAweDMwNGI7XG4gdC5rYWhvb2tjeXJpbGxpYyA9IDB4MDRjNDtcbiB0Lmtha2F0YWthbmEgPSAweDMwYWI7XG4gdC5rYWthdGFrYW5haGFsZndpZHRoID0gMHhmZjc2O1xuIHQua2FwcGEgPSAweDAzYmE7XG4gdC5rYXBwYXN5bWJvbGdyZWVrID0gMHgwM2YwO1xuIHQua2FweWVvdW5taWV1bWtvcmVhbiA9IDB4MzE3MTtcbiB0LmthcHllb3VucGhpZXVwaGtvcmVhbiA9IDB4MzE4NDtcbiB0LmthcHllb3VucGlldXBrb3JlYW4gPSAweDMxNzg7XG4gdC5rYXB5ZW91bnNzYW5ncGlldXBrb3JlYW4gPSAweDMxNzk7XG4gdC5rYXJvcmlpc3F1YXJlID0gMHgzMzBkO1xuIHQua2FzaGlkYWF1dG9hcmFiaWMgPSAweDA2NDA7XG4gdC5rYXNoaWRhYXV0b25vc2lkZWJlYXJpbmdhcmFiaWMgPSAweDA2NDA7XG4gdC5rYXNtYWxsa2F0YWthbmEgPSAweDMwZjU7XG4gdC5rYXNxdWFyZSA9IDB4MzM4NDtcbiB0Lmthc3JhYXJhYmljID0gMHgwNjUwO1xuIHQua2FzcmF0YW5hcmFiaWMgPSAweDA2NGQ7XG4gdC5rYXN0cm9rZWN5cmlsbGljID0gMHgwNDlmO1xuIHQua2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aCA9IDB4ZmY3MDtcbiB0LmthdmVydGljYWxzdHJva2VjeXJpbGxpYyA9IDB4MDQ5ZDtcbiB0Lmtib3BvbW9mbyA9IDB4MzEwZTtcbiB0LmtjYWxzcXVhcmUgPSAweDMzODk7XG4gdC5rY2Fyb24gPSAweDAxZTk7XG4gdC5rY2VkaWxsYSA9IDB4MDEzNztcbiB0LmtjaXJjbGUgPSAweDI0ZGE7XG4gdC5rY29tbWFhY2NlbnQgPSAweDAxMzc7XG4gdC5rZG90YmVsb3cgPSAweDFlMzM7XG4gdC5rZWhhcm1lbmlhbiA9IDB4MDU4NDtcbiB0LmtlaGlyYWdhbmEgPSAweDMwNTE7XG4gdC5rZWthdGFrYW5hID0gMHgzMGIxO1xuIHQua2VrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3OTtcbiB0LmtlbmFybWVuaWFuID0gMHgwNTZmO1xuIHQua2VzbWFsbGthdGFrYW5hID0gMHgzMGY2O1xuIHQua2dyZWVubGFuZGljID0gMHgwMTM4O1xuIHQua2hhYmVuZ2FsaSA9IDB4MDk5NjtcbiB0LmtoYWN5cmlsbGljID0gMHgwNDQ1O1xuIHQua2hhZGV2YSA9IDB4MDkxNjtcbiB0LmtoYWd1amFyYXRpID0gMHgwYTk2O1xuIHQua2hhZ3VybXVraGkgPSAweDBhMTY7XG4gdC5raGFoYXJhYmljID0gMHgwNjJlO1xuIHQua2hhaGZpbmFsYXJhYmljID0gMHhmZWE2O1xuIHQua2hhaGluaXRpYWxhcmFiaWMgPSAweGZlYTc7XG4gdC5raGFobWVkaWFsYXJhYmljID0gMHhmZWE4O1xuIHQua2hlaWNvcHRpYyA9IDB4MDNlNztcbiB0LmtoaGFkZXZhID0gMHgwOTU5O1xuIHQua2hoYWd1cm11a2hpID0gMHgwYTU5O1xuIHQua2hpZXVraGFjaXJjbGVrb3JlYW4gPSAweDMyNzg7XG4gdC5raGlldWtoYXBhcmVua29yZWFuID0gMHgzMjE4O1xuIHQua2hpZXVraGNpcmNsZWtvcmVhbiA9IDB4MzI2YTtcbiB0LmtoaWV1a2hrb3JlYW4gPSAweDMxNGI7XG4gdC5raGlldWtocGFyZW5rb3JlYW4gPSAweDMyMGE7XG4gdC5raG9raGFpdGhhaSA9IDB4MGUwMjtcbiB0Lmtob2tob250aGFpID0gMHgwZTA1O1xuIHQua2hva2h1YXR0aGFpID0gMHgwZTAzO1xuIHQua2hva2h3YWl0aGFpID0gMHgwZTA0O1xuIHQua2hvbXV0dGhhaSA9IDB4MGU1YjtcbiB0Lmtob29rID0gMHgwMTk5O1xuIHQua2hvcmFraGFuZ3RoYWkgPSAweDBlMDY7XG4gdC5raHpzcXVhcmUgPSAweDMzOTE7XG4gdC5raWhpcmFnYW5hID0gMHgzMDRkO1xuIHQua2lrYXRha2FuYSA9IDB4MzBhZDtcbiB0Lmtpa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNzc7XG4gdC5raXJvZ3VyYW11c3F1YXJlID0gMHgzMzE1O1xuIHQua2lyb21lZXRvcnVzcXVhcmUgPSAweDMzMTY7XG4gdC5raXJvc3F1YXJlID0gMHgzMzE0O1xuIHQua2l5ZW9rYWNpcmNsZWtvcmVhbiA9IDB4MzI2ZTtcbiB0LmtpeWVva2FwYXJlbmtvcmVhbiA9IDB4MzIwZTtcbiB0LmtpeWVva2NpcmNsZWtvcmVhbiA9IDB4MzI2MDtcbiB0LmtpeWVva2tvcmVhbiA9IDB4MzEzMTtcbiB0LmtpeWVva3BhcmVua29yZWFuID0gMHgzMjAwO1xuIHQua2l5ZW9rc2lvc2tvcmVhbiA9IDB4MzEzMztcbiB0LmtqZWN5cmlsbGljID0gMHgwNDVjO1xuIHQua2xpbmViZWxvdyA9IDB4MWUzNTtcbiB0Lmtsc3F1YXJlID0gMHgzMzk4O1xuIHQua21jdWJlZHNxdWFyZSA9IDB4MzNhNjtcbiB0Lmttb25vc3BhY2UgPSAweGZmNGI7XG4gdC5rbXNxdWFyZWRzcXVhcmUgPSAweDMzYTI7XG4gdC5rb2hpcmFnYW5hID0gMHgzMDUzO1xuIHQua29obXNxdWFyZSA9IDB4MzNjMDtcbiB0Lmtva2FpdGhhaSA9IDB4MGUwMTtcbiB0Lmtva2F0YWthbmEgPSAweDMwYjM7XG4gdC5rb2thdGFrYW5haGFsZndpZHRoID0gMHhmZjdhO1xuIHQua29vcG9zcXVhcmUgPSAweDMzMWU7XG4gdC5rb3BwYWN5cmlsbGljID0gMHgwNDgxO1xuIHQua29yZWFuc3RhbmRhcmRzeW1ib2wgPSAweDMyN2Y7XG4gdC5rb3JvbmlzY21iID0gMHgwMzQzO1xuIHQua3BhcmVuID0gMHgyNGE2O1xuIHQua3Bhc3F1YXJlID0gMHgzM2FhO1xuIHQua3NpY3lyaWxsaWMgPSAweDA0NmY7XG4gdC5rdHNxdWFyZSA9IDB4MzNjZjtcbiB0Lmt0dXJuZWQgPSAweDAyOWU7XG4gdC5rdWhpcmFnYW5hID0gMHgzMDRmO1xuIHQua3VrYXRha2FuYSA9IDB4MzBhZjtcbiB0Lmt1a2F0YWthbmFoYWxmd2lkdGggPSAweGZmNzg7XG4gdC5rdnNxdWFyZSA9IDB4MzNiODtcbiB0Lmt3c3F1YXJlID0gMHgzM2JlO1xuIHQubCA9IDB4MDA2YztcbiB0LmxhYmVuZ2FsaSA9IDB4MDliMjtcbiB0LmxhY3V0ZSA9IDB4MDEzYTtcbiB0LmxhZGV2YSA9IDB4MDkzMjtcbiB0LmxhZ3VqYXJhdGkgPSAweDBhYjI7XG4gdC5sYWd1cm11a2hpID0gMHgwYTMyO1xuIHQubGFra2hhbmd5YW90aGFpID0gMHgwZTQ1O1xuIHQubGFtYWxlZmZpbmFsYXJhYmljID0gMHhmZWZjO1xuIHQubGFtYWxlZmhhbXphYWJvdmVmaW5hbGFyYWJpYyA9IDB4ZmVmODtcbiB0LmxhbWFsZWZoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWMgPSAweGZlZjc7XG4gdC5sYW1hbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljID0gMHhmZWZhO1xuIHQubGFtYWxlZmhhbXphYmVsb3dpc29sYXRlZGFyYWJpYyA9IDB4ZmVmOTtcbiB0LmxhbWFsZWZpc29sYXRlZGFyYWJpYyA9IDB4ZmVmYjtcbiB0LmxhbWFsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWMgPSAweGZlZjY7XG4gdC5sYW1hbGVmbWFkZGFhYm92ZWlzb2xhdGVkYXJhYmljID0gMHhmZWY1O1xuIHQubGFtYXJhYmljID0gMHgwNjQ0O1xuIHQubGFtYmRhID0gMHgwM2JiO1xuIHQubGFtYmRhc3Ryb2tlID0gMHgwMTliO1xuIHQubGFtZWQgPSAweDA1ZGM7XG4gdC5sYW1lZGRhZ2VzaCA9IDB4ZmIzYztcbiB0LmxhbWVkZGFnZXNoaGVicmV3ID0gMHhmYjNjO1xuIHQubGFtZWRoZWJyZXcgPSAweDA1ZGM7XG4gdC5sYW1maW5hbGFyYWJpYyA9IDB4ZmVkZTtcbiB0LmxhbWhhaGluaXRpYWxhcmFiaWMgPSAweGZjY2E7XG4gdC5sYW1pbml0aWFsYXJhYmljID0gMHhmZWRmO1xuIHQubGFtamVlbWluaXRpYWxhcmFiaWMgPSAweGZjYzk7XG4gdC5sYW1raGFoaW5pdGlhbGFyYWJpYyA9IDB4ZmNjYjtcbiB0LmxhbWxhbWhlaGlzb2xhdGVkYXJhYmljID0gMHhmZGYyO1xuIHQubGFtbWVkaWFsYXJhYmljID0gMHhmZWUwO1xuIHQubGFtbWVlbWhhaGluaXRpYWxhcmFiaWMgPSAweGZkODg7XG4gdC5sYW1tZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmNjYztcbiB0LmxhcmdlY2lyY2xlID0gMHgyNWVmO1xuIHQubGJhciA9IDB4MDE5YTtcbiB0LmxiZWx0ID0gMHgwMjZjO1xuIHQubGJvcG9tb2ZvID0gMHgzMTBjO1xuIHQubGNhcm9uID0gMHgwMTNlO1xuIHQubGNlZGlsbGEgPSAweDAxM2M7XG4gdC5sY2lyY2xlID0gMHgyNGRiO1xuIHQubGNpcmN1bWZsZXhiZWxvdyA9IDB4MWUzZDtcbiB0Lmxjb21tYWFjY2VudCA9IDB4MDEzYztcbiB0Lmxkb3QgPSAweDAxNDA7XG4gdC5sZG90YWNjZW50ID0gMHgwMTQwO1xuIHQubGRvdGJlbG93ID0gMHgxZTM3O1xuIHQubGRvdGJlbG93bWFjcm9uID0gMHgxZTM5O1xuIHQubGVmdGFuZ2xlYWJvdmVjbWIgPSAweDAzMWE7XG4gdC5sZWZ0dGFja2JlbG93Y21iID0gMHgwMzE4O1xuIHQubGVzcyA9IDB4MDAzYztcbiB0Lmxlc3NlcXVhbCA9IDB4MjI2NDtcbiB0Lmxlc3NlcXVhbG9yZ3JlYXRlciA9IDB4MjJkYTtcbiB0Lmxlc3Ntb25vc3BhY2UgPSAweGZmMWM7XG4gdC5sZXNzb3JlcXVpdmFsZW50ID0gMHgyMjcyO1xuIHQubGVzc29yZ3JlYXRlciA9IDB4MjI3NjtcbiB0Lmxlc3NvdmVyZXF1YWwgPSAweDIyNjY7XG4gdC5sZXNzc21hbGwgPSAweGZlNjQ7XG4gdC5sZXpoID0gMHgwMjZlO1xuIHQubGZibG9jayA9IDB4MjU4YztcbiB0Lmxob29rcmV0cm9mbGV4ID0gMHgwMjZkO1xuIHQubGlyYSA9IDB4MjBhNDtcbiB0Lmxpd25hcm1lbmlhbiA9IDB4MDU2YztcbiB0LmxqID0gMHgwMWM5O1xuIHQubGplY3lyaWxsaWMgPSAweDA0NTk7XG4gdC5sbCA9IDB4ZjZjMDtcbiB0LmxsYWRldmEgPSAweDA5MzM7XG4gdC5sbGFndWphcmF0aSA9IDB4MGFiMztcbiB0LmxsaW5lYmVsb3cgPSAweDFlM2I7XG4gdC5sbGxhZGV2YSA9IDB4MDkzNDtcbiB0Lmxsdm9jYWxpY2JlbmdhbGkgPSAweDA5ZTE7XG4gdC5sbHZvY2FsaWNkZXZhID0gMHgwOTYxO1xuIHQubGx2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSA9IDB4MDllMztcbiB0Lmxsdm9jYWxpY3Zvd2Vsc2lnbmRldmEgPSAweDA5NjM7XG4gdC5sbWlkZGxldGlsZGUgPSAweDAyNmI7XG4gdC5sbW9ub3NwYWNlID0gMHhmZjRjO1xuIHQubG1zcXVhcmUgPSAweDMzZDA7XG4gdC5sb2NodWxhdGhhaSA9IDB4MGUyYztcbiB0LmxvZ2ljYWxhbmQgPSAweDIyMjc7XG4gdC5sb2dpY2Fsbm90ID0gMHgwMGFjO1xuIHQubG9naWNhbG5vdHJldmVyc2VkID0gMHgyMzEwO1xuIHQubG9naWNhbG9yID0gMHgyMjI4O1xuIHQubG9saW5ndGhhaSA9IDB4MGUyNTtcbiB0LmxvbmdzID0gMHgwMTdmO1xuIHQubG93bGluZWNlbnRlcmxpbmUgPSAweGZlNGU7XG4gdC5sb3dsaW5lY21iID0gMHgwMzMyO1xuIHQubG93bGluZWRhc2hlZCA9IDB4ZmU0ZDtcbiB0LmxvemVuZ2UgPSAweDI1Y2E7XG4gdC5scGFyZW4gPSAweDI0YTc7XG4gdC5sc2xhc2ggPSAweDAxNDI7XG4gdC5sc3F1YXJlID0gMHgyMTEzO1xuIHQubHN1cGVyaW9yID0gMHhmNmVlO1xuIHQubHRzaGFkZSA9IDB4MjU5MTtcbiB0Lmx1dGhhaSA9IDB4MGUyNjtcbiB0Lmx2b2NhbGljYmVuZ2FsaSA9IDB4MDk4YztcbiB0Lmx2b2NhbGljZGV2YSA9IDB4MDkwYztcbiB0Lmx2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSA9IDB4MDllMjtcbiB0Lmx2b2NhbGljdm93ZWxzaWduZGV2YSA9IDB4MDk2MjtcbiB0Lmx4c3F1YXJlID0gMHgzM2QzO1xuIHQubSA9IDB4MDA2ZDtcbiB0Lm1hYmVuZ2FsaSA9IDB4MDlhZTtcbiB0Lm1hY3JvbiA9IDB4MDBhZjtcbiB0Lm1hY3JvbmJlbG93Y21iID0gMHgwMzMxO1xuIHQubWFjcm9uY21iID0gMHgwMzA0O1xuIHQubWFjcm9ubG93bW9kID0gMHgwMmNkO1xuIHQubWFjcm9ubW9ub3NwYWNlID0gMHhmZmUzO1xuIHQubWFjdXRlID0gMHgxZTNmO1xuIHQubWFkZXZhID0gMHgwOTJlO1xuIHQubWFndWphcmF0aSA9IDB4MGFhZTtcbiB0Lm1hZ3VybXVraGkgPSAweDBhMmU7XG4gdC5tYWhhcGFraGhlYnJldyA9IDB4MDVhNDtcbiB0Lm1haGFwYWtobGVmdGhlYnJldyA9IDB4MDVhNDtcbiB0Lm1haGlyYWdhbmEgPSAweDMwN2U7XG4gdC5tYWljaGF0dGF3YWxvd2xlZnR0aGFpID0gMHhmODk1O1xuIHQubWFpY2hhdHRhd2Fsb3dyaWdodHRoYWkgPSAweGY4OTQ7XG4gdC5tYWljaGF0dGF3YXRoYWkgPSAweDBlNGI7XG4gdC5tYWljaGF0dGF3YXVwcGVybGVmdHRoYWkgPSAweGY4OTM7XG4gdC5tYWlla2xvd2xlZnR0aGFpID0gMHhmODhjO1xuIHQubWFpZWtsb3dyaWdodHRoYWkgPSAweGY4OGI7XG4gdC5tYWlla3RoYWkgPSAweDBlNDg7XG4gdC5tYWlla3VwcGVybGVmdHRoYWkgPSAweGY4OGE7XG4gdC5tYWloYW5ha2F0bGVmdHRoYWkgPSAweGY4ODQ7XG4gdC5tYWloYW5ha2F0dGhhaSA9IDB4MGUzMTtcbiB0Lm1haXRhaWtodWxlZnR0aGFpID0gMHhmODg5O1xuIHQubWFpdGFpa2h1dGhhaSA9IDB4MGU0NztcbiB0Lm1haXRob2xvd2xlZnR0aGFpID0gMHhmODhmO1xuIHQubWFpdGhvbG93cmlnaHR0aGFpID0gMHhmODhlO1xuIHQubWFpdGhvdGhhaSA9IDB4MGU0OTtcbiB0Lm1haXRob3VwcGVybGVmdHRoYWkgPSAweGY4OGQ7XG4gdC5tYWl0cmlsb3dsZWZ0dGhhaSA9IDB4Zjg5MjtcbiB0Lm1haXRyaWxvd3JpZ2h0dGhhaSA9IDB4Zjg5MTtcbiB0Lm1haXRyaXRoYWkgPSAweDBlNGE7XG4gdC5tYWl0cml1cHBlcmxlZnR0aGFpID0gMHhmODkwO1xuIHQubWFpeWFtb2t0aGFpID0gMHgwZTQ2O1xuIHQubWFrYXRha2FuYSA9IDB4MzBkZTtcbiB0Lm1ha2F0YWthbmFoYWxmd2lkdGggPSAweGZmOGY7XG4gdC5tYWxlID0gMHgyNjQyO1xuIHQubWFuc3lvbnNxdWFyZSA9IDB4MzM0NztcbiB0Lm1hcWFmaGVicmV3ID0gMHgwNWJlO1xuIHQubWFycyA9IDB4MjY0MjtcbiB0Lm1hc29yYWNpcmNsZWhlYnJldyA9IDB4MDVhZjtcbiB0Lm1hc3F1YXJlID0gMHgzMzgzO1xuIHQubWJvcG9tb2ZvID0gMHgzMTA3O1xuIHQubWJzcXVhcmUgPSAweDMzZDQ7XG4gdC5tY2lyY2xlID0gMHgyNGRjO1xuIHQubWN1YmVkc3F1YXJlID0gMHgzM2E1O1xuIHQubWRvdGFjY2VudCA9IDB4MWU0MTtcbiB0Lm1kb3RiZWxvdyA9IDB4MWU0MztcbiB0Lm1lZW1hcmFiaWMgPSAweDA2NDU7XG4gdC5tZWVtZmluYWxhcmFiaWMgPSAweGZlZTI7XG4gdC5tZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmVlMztcbiB0Lm1lZW1tZWRpYWxhcmFiaWMgPSAweGZlZTQ7XG4gdC5tZWVtbWVlbWluaXRpYWxhcmFiaWMgPSAweGZjZDE7XG4gdC5tZWVtbWVlbWlzb2xhdGVkYXJhYmljID0gMHhmYzQ4O1xuIHQubWVldG9ydXNxdWFyZSA9IDB4MzM0ZDtcbiB0Lm1laGlyYWdhbmEgPSAweDMwODE7XG4gdC5tZWl6aWVyYXNxdWFyZSA9IDB4MzM3ZTtcbiB0Lm1la2F0YWthbmEgPSAweDMwZTE7XG4gdC5tZWthdGFrYW5haGFsZndpZHRoID0gMHhmZjkyO1xuIHQubWVtID0gMHgwNWRlO1xuIHQubWVtZGFnZXNoID0gMHhmYjNlO1xuIHQubWVtZGFnZXNoaGVicmV3ID0gMHhmYjNlO1xuIHQubWVtaGVicmV3ID0gMHgwNWRlO1xuIHQubWVuYXJtZW5pYW4gPSAweDA1NzQ7XG4gdC5tZXJraGFoZWJyZXcgPSAweDA1YTU7XG4gdC5tZXJraGFrZWZ1bGFoZWJyZXcgPSAweDA1YTY7XG4gdC5tZXJraGFrZWZ1bGFsZWZ0aGVicmV3ID0gMHgwNWE2O1xuIHQubWVya2hhbGVmdGhlYnJldyA9IDB4MDVhNTtcbiB0Lm1ob29rID0gMHgwMjcxO1xuIHQubWh6c3F1YXJlID0gMHgzMzkyO1xuIHQubWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGggPSAweGZmNjU7XG4gdC5taWRkb3QgPSAweDAwYjc7XG4gdC5taWV1bWFjaXJjbGVrb3JlYW4gPSAweDMyNzI7XG4gdC5taWV1bWFwYXJlbmtvcmVhbiA9IDB4MzIxMjtcbiB0Lm1pZXVtY2lyY2xla29yZWFuID0gMHgzMjY0O1xuIHQubWlldW1rb3JlYW4gPSAweDMxNDE7XG4gdC5taWV1bXBhbnNpb3Nrb3JlYW4gPSAweDMxNzA7XG4gdC5taWV1bXBhcmVua29yZWFuID0gMHgzMjA0O1xuIHQubWlldW1waWV1cGtvcmVhbiA9IDB4MzE2ZTtcbiB0Lm1pZXVtc2lvc2tvcmVhbiA9IDB4MzE2ZjtcbiB0Lm1paGlyYWdhbmEgPSAweDMwN2Y7XG4gdC5taWthdGFrYW5hID0gMHgzMGRmO1xuIHQubWlrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5MDtcbiB0Lm1pbnVzID0gMHgyMjEyO1xuIHQubWludXNiZWxvd2NtYiA9IDB4MDMyMDtcbiB0Lm1pbnVzY2lyY2xlID0gMHgyMjk2O1xuIHQubWludXNtb2QgPSAweDAyZDc7XG4gdC5taW51c3BsdXMgPSAweDIyMTM7XG4gdC5taW51dGUgPSAweDIwMzI7XG4gdC5taXJpYmFhcnVzcXVhcmUgPSAweDMzNGE7XG4gdC5taXJpc3F1YXJlID0gMHgzMzQ5O1xuIHQubWxvbmdsZWd0dXJuZWQgPSAweDAyNzA7XG4gdC5tbHNxdWFyZSA9IDB4MzM5NjtcbiB0Lm1tY3ViZWRzcXVhcmUgPSAweDMzYTM7XG4gdC5tbW9ub3NwYWNlID0gMHhmZjRkO1xuIHQubW1zcXVhcmVkc3F1YXJlID0gMHgzMzlmO1xuIHQubW9oaXJhZ2FuYSA9IDB4MzA4MjtcbiB0Lm1vaG1zcXVhcmUgPSAweDMzYzE7XG4gdC5tb2thdGFrYW5hID0gMHgzMGUyO1xuIHQubW9rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5MztcbiB0Lm1vbHNxdWFyZSA9IDB4MzNkNjtcbiB0Lm1vbWF0aGFpID0gMHgwZTIxO1xuIHQubW92ZXJzc3F1YXJlID0gMHgzM2E3O1xuIHQubW92ZXJzc3F1YXJlZHNxdWFyZSA9IDB4MzNhODtcbiB0Lm1wYXJlbiA9IDB4MjRhODtcbiB0Lm1wYXNxdWFyZSA9IDB4MzNhYjtcbiB0Lm1zc3F1YXJlID0gMHgzM2IzO1xuIHQubXN1cGVyaW9yID0gMHhmNmVmO1xuIHQubXR1cm5lZCA9IDB4MDI2ZjtcbiB0Lm11ID0gMHgwMGI1O1xuIHQubXUxID0gMHgwMGI1O1xuIHQubXVhc3F1YXJlID0gMHgzMzgyO1xuIHQubXVjaGdyZWF0ZXIgPSAweDIyNmI7XG4gdC5tdWNobGVzcyA9IDB4MjI2YTtcbiB0Lm11ZnNxdWFyZSA9IDB4MzM4YztcbiB0Lm11Z3JlZWsgPSAweDAzYmM7XG4gdC5tdWdzcXVhcmUgPSAweDMzOGQ7XG4gdC5tdWhpcmFnYW5hID0gMHgzMDgwO1xuIHQubXVrYXRha2FuYSA9IDB4MzBlMDtcbiB0Lm11a2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTE7XG4gdC5tdWxzcXVhcmUgPSAweDMzOTU7XG4gdC5tdWx0aXBseSA9IDB4MDBkNztcbiB0Lm11bXNxdWFyZSA9IDB4MzM5YjtcbiB0Lm11bmFoaGVicmV3ID0gMHgwNWEzO1xuIHQubXVuYWhsZWZ0aGVicmV3ID0gMHgwNWEzO1xuIHQubXVzaWNhbG5vdGUgPSAweDI2NmE7XG4gdC5tdXNpY2Fsbm90ZWRibCA9IDB4MjY2YjtcbiB0Lm11c2ljZmxhdHNpZ24gPSAweDI2NmQ7XG4gdC5tdXNpY3NoYXJwc2lnbiA9IDB4MjY2ZjtcbiB0Lm11c3NxdWFyZSA9IDB4MzNiMjtcbiB0Lm11dnNxdWFyZSA9IDB4MzNiNjtcbiB0Lm11d3NxdWFyZSA9IDB4MzNiYztcbiB0Lm12bWVnYXNxdWFyZSA9IDB4MzNiOTtcbiB0Lm12c3F1YXJlID0gMHgzM2I3O1xuIHQubXdtZWdhc3F1YXJlID0gMHgzM2JmO1xuIHQubXdzcXVhcmUgPSAweDMzYmQ7XG4gdC5uID0gMHgwMDZlO1xuIHQubmFiZW5nYWxpID0gMHgwOWE4O1xuIHQubmFibGEgPSAweDIyMDc7XG4gdC5uYWN1dGUgPSAweDAxNDQ7XG4gdC5uYWRldmEgPSAweDA5Mjg7XG4gdC5uYWd1amFyYXRpID0gMHgwYWE4O1xuIHQubmFndXJtdWtoaSA9IDB4MGEyODtcbiB0Lm5haGlyYWdhbmEgPSAweDMwNmE7XG4gdC5uYWthdGFrYW5hID0gMHgzMGNhO1xuIHQubmFrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4NTtcbiB0Lm5hcG9zdHJvcGhlID0gMHgwMTQ5O1xuIHQubmFzcXVhcmUgPSAweDMzODE7XG4gdC5uYm9wb21vZm8gPSAweDMxMGI7XG4gdC5uYnNwYWNlID0gMHgwMGEwO1xuIHQubmNhcm9uID0gMHgwMTQ4O1xuIHQubmNlZGlsbGEgPSAweDAxNDY7XG4gdC5uY2lyY2xlID0gMHgyNGRkO1xuIHQubmNpcmN1bWZsZXhiZWxvdyA9IDB4MWU0YjtcbiB0Lm5jb21tYWFjY2VudCA9IDB4MDE0NjtcbiB0Lm5kb3RhY2NlbnQgPSAweDFlNDU7XG4gdC5uZG90YmVsb3cgPSAweDFlNDc7XG4gdC5uZWhpcmFnYW5hID0gMHgzMDZkO1xuIHQubmVrYXRha2FuYSA9IDB4MzBjZDtcbiB0Lm5la2F0YWthbmFoYWxmd2lkdGggPSAweGZmODg7XG4gdC5uZXdzaGVxZWxzaWduID0gMHgyMGFhO1xuIHQubmZzcXVhcmUgPSAweDMzOGI7XG4gdC5uZ2FiZW5nYWxpID0gMHgwOTk5O1xuIHQubmdhZGV2YSA9IDB4MDkxOTtcbiB0Lm5nYWd1amFyYXRpID0gMHgwYTk5O1xuIHQubmdhZ3VybXVraGkgPSAweDBhMTk7XG4gdC5uZ29uZ3V0aGFpID0gMHgwZTA3O1xuIHQubmhpcmFnYW5hID0gMHgzMDkzO1xuIHQubmhvb2tsZWZ0ID0gMHgwMjcyO1xuIHQubmhvb2tyZXRyb2ZsZXggPSAweDAyNzM7XG4gdC5uaWV1bmFjaXJjbGVrb3JlYW4gPSAweDMyNmY7XG4gdC5uaWV1bmFwYXJlbmtvcmVhbiA9IDB4MzIwZjtcbiB0Lm5pZXVuY2lldWNrb3JlYW4gPSAweDMxMzU7XG4gdC5uaWV1bmNpcmNsZWtvcmVhbiA9IDB4MzI2MTtcbiB0Lm5pZXVuaGlldWhrb3JlYW4gPSAweDMxMzY7XG4gdC5uaWV1bmtvcmVhbiA9IDB4MzEzNDtcbiB0Lm5pZXVucGFuc2lvc2tvcmVhbiA9IDB4MzE2ODtcbiB0Lm5pZXVucGFyZW5rb3JlYW4gPSAweDMyMDE7XG4gdC5uaWV1bnNpb3Nrb3JlYW4gPSAweDMxNjc7XG4gdC5uaWV1bnRpa2V1dGtvcmVhbiA9IDB4MzE2NjtcbiB0Lm5paGlyYWdhbmEgPSAweDMwNmI7XG4gdC5uaWthdGFrYW5hID0gMHgzMGNiO1xuIHQubmlrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4NjtcbiB0Lm5pa2hhaGl0bGVmdHRoYWkgPSAweGY4OTk7XG4gdC5uaWtoYWhpdHRoYWkgPSAweDBlNGQ7XG4gdC5uaW5lID0gMHgwMDM5O1xuIHQubmluZWFyYWJpYyA9IDB4MDY2OTtcbiB0Lm5pbmViZW5nYWxpID0gMHgwOWVmO1xuIHQubmluZWNpcmNsZSA9IDB4MjQ2ODtcbiB0Lm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmID0gMHgyNzkyO1xuIHQubmluZWRldmEgPSAweDA5NmY7XG4gdC5uaW5lZ3VqYXJhdGkgPSAweDBhZWY7XG4gdC5uaW5lZ3VybXVraGkgPSAweDBhNmY7XG4gdC5uaW5laGFja2FyYWJpYyA9IDB4MDY2OTtcbiB0Lm5pbmVoYW5nemhvdSA9IDB4MzAyOTtcbiB0Lm5pbmVpZGVvZ3JhcGhpY3BhcmVuID0gMHgzMjI4O1xuIHQubmluZWluZmVyaW9yID0gMHgyMDg5O1xuIHQubmluZW1vbm9zcGFjZSA9IDB4ZmYxOTtcbiB0Lm5pbmVvbGRzdHlsZSA9IDB4ZjczOTtcbiB0Lm5pbmVwYXJlbiA9IDB4MjQ3YztcbiB0Lm5pbmVwZXJpb2QgPSAweDI0OTA7XG4gdC5uaW5lcGVyc2lhbiA9IDB4MDZmOTtcbiB0Lm5pbmVyb21hbiA9IDB4MjE3ODtcbiB0Lm5pbmVzdXBlcmlvciA9IDB4MjA3OTtcbiB0Lm5pbmV0ZWVuY2lyY2xlID0gMHgyNDcyO1xuIHQubmluZXRlZW5wYXJlbiA9IDB4MjQ4NjtcbiB0Lm5pbmV0ZWVucGVyaW9kID0gMHgyNDlhO1xuIHQubmluZXRoYWkgPSAweDBlNTk7XG4gdC5uaiA9IDB4MDFjYztcbiB0Lm5qZWN5cmlsbGljID0gMHgwNDVhO1xuIHQubmthdGFrYW5hID0gMHgzMGYzO1xuIHQubmthdGFrYW5haGFsZndpZHRoID0gMHhmZjlkO1xuIHQubmxlZ3JpZ2h0bG9uZyA9IDB4MDE5ZTtcbiB0Lm5saW5lYmVsb3cgPSAweDFlNDk7XG4gdC5ubW9ub3NwYWNlID0gMHhmZjRlO1xuIHQubm1zcXVhcmUgPSAweDMzOWE7XG4gdC5ubmFiZW5nYWxpID0gMHgwOWEzO1xuIHQubm5hZGV2YSA9IDB4MDkyMztcbiB0Lm5uYWd1amFyYXRpID0gMHgwYWEzO1xuIHQubm5hZ3VybXVraGkgPSAweDBhMjM7XG4gdC5ubm5hZGV2YSA9IDB4MDkyOTtcbiB0Lm5vaGlyYWdhbmEgPSAweDMwNmU7XG4gdC5ub2thdGFrYW5hID0gMHgzMGNlO1xuIHQubm9rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4OTtcbiB0Lm5vbmJyZWFraW5nc3BhY2UgPSAweDAwYTA7XG4gdC5ub25lbnRoYWkgPSAweDBlMTM7XG4gdC5ub251dGhhaSA9IDB4MGUxOTtcbiB0Lm5vb25hcmFiaWMgPSAweDA2NDY7XG4gdC5ub29uZmluYWxhcmFiaWMgPSAweGZlZTY7XG4gdC5ub29uZ2h1bm5hYXJhYmljID0gMHgwNmJhO1xuIHQubm9vbmdodW5uYWZpbmFsYXJhYmljID0gMHhmYjlmO1xuIHQubm9vbmluaXRpYWxhcmFiaWMgPSAweGZlZTc7XG4gdC5ub29uamVlbWluaXRpYWxhcmFiaWMgPSAweGZjZDI7XG4gdC5ub29uamVlbWlzb2xhdGVkYXJhYmljID0gMHhmYzRiO1xuIHQubm9vbm1lZGlhbGFyYWJpYyA9IDB4ZmVlODtcbiB0Lm5vb25tZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmNkNTtcbiB0Lm5vb25tZWVtaXNvbGF0ZWRhcmFiaWMgPSAweGZjNGU7XG4gdC5ub29ubm9vbmZpbmFsYXJhYmljID0gMHhmYzhkO1xuIHQubm90Y29udGFpbnMgPSAweDIyMGM7XG4gdC5ub3RlbGVtZW50ID0gMHgyMjA5O1xuIHQubm90ZWxlbWVudG9mID0gMHgyMjA5O1xuIHQubm90ZXF1YWwgPSAweDIyNjA7XG4gdC5ub3RncmVhdGVyID0gMHgyMjZmO1xuIHQubm90Z3JlYXRlcm5vcmVxdWFsID0gMHgyMjcxO1xuIHQubm90Z3JlYXRlcm5vcmxlc3MgPSAweDIyNzk7XG4gdC5ub3RpZGVudGljYWwgPSAweDIyNjI7XG4gdC5ub3RsZXNzID0gMHgyMjZlO1xuIHQubm90bGVzc25vcmVxdWFsID0gMHgyMjcwO1xuIHQubm90cGFyYWxsZWwgPSAweDIyMjY7XG4gdC5ub3RwcmVjZWRlcyA9IDB4MjI4MDtcbiB0Lm5vdHN1YnNldCA9IDB4MjI4NDtcbiB0Lm5vdHN1Y2NlZWRzID0gMHgyMjgxO1xuIHQubm90c3VwZXJzZXQgPSAweDIyODU7XG4gdC5ub3dhcm1lbmlhbiA9IDB4MDU3NjtcbiB0Lm5wYXJlbiA9IDB4MjRhOTtcbiB0Lm5zc3F1YXJlID0gMHgzM2IxO1xuIHQubnN1cGVyaW9yID0gMHgyMDdmO1xuIHQubnRpbGRlID0gMHgwMGYxO1xuIHQubnUgPSAweDAzYmQ7XG4gdC5udWhpcmFnYW5hID0gMHgzMDZjO1xuIHQubnVrYXRha2FuYSA9IDB4MzBjYztcbiB0Lm51a2F0YWthbmFoYWxmd2lkdGggPSAweGZmODc7XG4gdC5udWt0YWJlbmdhbGkgPSAweDA5YmM7XG4gdC5udWt0YWRldmEgPSAweDA5M2M7XG4gdC5udWt0YWd1amFyYXRpID0gMHgwYWJjO1xuIHQubnVrdGFndXJtdWtoaSA9IDB4MGEzYztcbiB0Lm51bWJlcnNpZ24gPSAweDAwMjM7XG4gdC5udW1iZXJzaWdubW9ub3NwYWNlID0gMHhmZjAzO1xuIHQubnVtYmVyc2lnbnNtYWxsID0gMHhmZTVmO1xuIHQubnVtZXJhbHNpZ25ncmVlayA9IDB4MDM3NDtcbiB0Lm51bWVyYWxzaWdubG93ZXJncmVlayA9IDB4MDM3NTtcbiB0Lm51bWVybyA9IDB4MjExNjtcbiB0Lm51biA9IDB4MDVlMDtcbiB0Lm51bmRhZ2VzaCA9IDB4ZmI0MDtcbiB0Lm51bmRhZ2VzaGhlYnJldyA9IDB4ZmI0MDtcbiB0Lm51bmhlYnJldyA9IDB4MDVlMDtcbiB0Lm52c3F1YXJlID0gMHgzM2I1O1xuIHQubndzcXVhcmUgPSAweDMzYmI7XG4gdC5ueWFiZW5nYWxpID0gMHgwOTllO1xuIHQubnlhZGV2YSA9IDB4MDkxZTtcbiB0Lm55YWd1amFyYXRpID0gMHgwYTllO1xuIHQubnlhZ3VybXVraGkgPSAweDBhMWU7XG4gdC5vID0gMHgwMDZmO1xuIHQub2FjdXRlID0gMHgwMGYzO1xuIHQub2FuZ3RoYWkgPSAweDBlMmQ7XG4gdC5vYmFycmVkID0gMHgwMjc1O1xuIHQub2JhcnJlZGN5cmlsbGljID0gMHgwNGU5O1xuIHQub2JhcnJlZGRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZWI7XG4gdC5vYmVuZ2FsaSA9IDB4MDk5MztcbiB0Lm9ib3BvbW9mbyA9IDB4MzExYjtcbiB0Lm9icmV2ZSA9IDB4MDE0ZjtcbiB0Lm9jYW5kcmFkZXZhID0gMHgwOTExO1xuIHQub2NhbmRyYWd1amFyYXRpID0gMHgwYTkxO1xuIHQub2NhbmRyYXZvd2Vsc2lnbmRldmEgPSAweDA5NDk7XG4gdC5vY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGkgPSAweDBhYzk7XG4gdC5vY2Fyb24gPSAweDAxZDI7XG4gdC5vY2lyY2xlID0gMHgyNGRlO1xuIHQub2NpcmN1bWZsZXggPSAweDAwZjQ7XG4gdC5vY2lyY3VtZmxleGFjdXRlID0gMHgxZWQxO1xuIHQub2NpcmN1bWZsZXhkb3RiZWxvdyA9IDB4MWVkOTtcbiB0Lm9jaXJjdW1mbGV4Z3JhdmUgPSAweDFlZDM7XG4gdC5vY2lyY3VtZmxleGhvb2thYm92ZSA9IDB4MWVkNTtcbiB0Lm9jaXJjdW1mbGV4dGlsZGUgPSAweDFlZDc7XG4gdC5vY3lyaWxsaWMgPSAweDA0M2U7XG4gdC5vZGJsYWN1dGUgPSAweDAxNTE7XG4gdC5vZGJsZ3JhdmUgPSAweDAyMGQ7XG4gdC5vZGV2YSA9IDB4MDkxMztcbiB0Lm9kaWVyZXNpcyA9IDB4MDBmNjtcbiB0Lm9kaWVyZXNpc2N5cmlsbGljID0gMHgwNGU3O1xuIHQub2RvdGJlbG93ID0gMHgxZWNkO1xuIHQub2UgPSAweDAxNTM7XG4gdC5vZWtvcmVhbiA9IDB4MzE1YTtcbiB0Lm9nb25layA9IDB4MDJkYjtcbiB0Lm9nb25la2NtYiA9IDB4MDMyODtcbiB0Lm9ncmF2ZSA9IDB4MDBmMjtcbiB0Lm9ndWphcmF0aSA9IDB4MGE5MztcbiB0Lm9oYXJtZW5pYW4gPSAweDA1ODU7XG4gdC5vaGlyYWdhbmEgPSAweDMwNGE7XG4gdC5vaG9va2Fib3ZlID0gMHgxZWNmO1xuIHQub2hvcm4gPSAweDAxYTE7XG4gdC5vaG9ybmFjdXRlID0gMHgxZWRiO1xuIHQub2hvcm5kb3RiZWxvdyA9IDB4MWVlMztcbiB0Lm9ob3JuZ3JhdmUgPSAweDFlZGQ7XG4gdC5vaG9ybmhvb2thYm92ZSA9IDB4MWVkZjtcbiB0Lm9ob3JudGlsZGUgPSAweDFlZTE7XG4gdC5vaHVuZ2FydW1sYXV0ID0gMHgwMTUxO1xuIHQub2kgPSAweDAxYTM7XG4gdC5vaW52ZXJ0ZWRicmV2ZSA9IDB4MDIwZjtcbiB0Lm9rYXRha2FuYSA9IDB4MzBhYTtcbiB0Lm9rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3NTtcbiB0Lm9rb3JlYW4gPSAweDMxNTc7XG4gdC5vbGVoZWJyZXcgPSAweDA1YWI7XG4gdC5vbWFjcm9uID0gMHgwMTRkO1xuIHQub21hY3JvbmFjdXRlID0gMHgxZTUzO1xuIHQub21hY3JvbmdyYXZlID0gMHgxZTUxO1xuIHQub21kZXZhID0gMHgwOTUwO1xuIHQub21lZ2EgPSAweDAzYzk7XG4gdC5vbWVnYTEgPSAweDAzZDY7XG4gdC5vbWVnYWN5cmlsbGljID0gMHgwNDYxO1xuIHQub21lZ2FsYXRpbmNsb3NlZCA9IDB4MDI3NztcbiB0Lm9tZWdhcm91bmRjeXJpbGxpYyA9IDB4MDQ3YjtcbiB0Lm9tZWdhdGl0bG9jeXJpbGxpYyA9IDB4MDQ3ZDtcbiB0Lm9tZWdhdG9ub3MgPSAweDAzY2U7XG4gdC5vbWd1amFyYXRpID0gMHgwYWQwO1xuIHQub21pY3JvbiA9IDB4MDNiZjtcbiB0Lm9taWNyb250b25vcyA9IDB4MDNjYztcbiB0Lm9tb25vc3BhY2UgPSAweGZmNGY7XG4gdC5vbmUgPSAweDAwMzE7XG4gdC5vbmVhcmFiaWMgPSAweDA2NjE7XG4gdC5vbmViZW5nYWxpID0gMHgwOWU3O1xuIHQub25lY2lyY2xlID0gMHgyNDYwO1xuIHQub25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiA9IDB4Mjc4YTtcbiB0Lm9uZWRldmEgPSAweDA5Njc7XG4gdC5vbmVkb3RlbmxlYWRlciA9IDB4MjAyNDtcbiB0Lm9uZWVpZ2h0aCA9IDB4MjE1YjtcbiB0Lm9uZWZpdHRlZCA9IDB4ZjZkYztcbiB0Lm9uZWd1amFyYXRpID0gMHgwYWU3O1xuIHQub25lZ3VybXVraGkgPSAweDBhNjc7XG4gdC5vbmVoYWNrYXJhYmljID0gMHgwNjYxO1xuIHQub25laGFsZiA9IDB4MDBiZDtcbiB0Lm9uZWhhbmd6aG91ID0gMHgzMDIxO1xuIHQub25laWRlb2dyYXBoaWNwYXJlbiA9IDB4MzIyMDtcbiB0Lm9uZWluZmVyaW9yID0gMHgyMDgxO1xuIHQub25lbW9ub3NwYWNlID0gMHhmZjExO1xuIHQub25lbnVtZXJhdG9yYmVuZ2FsaSA9IDB4MDlmNDtcbiB0Lm9uZW9sZHN0eWxlID0gMHhmNzMxO1xuIHQub25lcGFyZW4gPSAweDI0NzQ7XG4gdC5vbmVwZXJpb2QgPSAweDI0ODg7XG4gdC5vbmVwZXJzaWFuID0gMHgwNmYxO1xuIHQub25lcXVhcnRlciA9IDB4MDBiYztcbiB0Lm9uZXJvbWFuID0gMHgyMTcwO1xuIHQub25lc3VwZXJpb3IgPSAweDAwYjk7XG4gdC5vbmV0aGFpID0gMHgwZTUxO1xuIHQub25ldGhpcmQgPSAweDIxNTM7XG4gdC5vb2dvbmVrID0gMHgwMWViO1xuIHQub29nb25la21hY3JvbiA9IDB4MDFlZDtcbiB0Lm9vZ3VybXVraGkgPSAweDBhMTM7XG4gdC5vb21hdHJhZ3VybXVraGkgPSAweDBhNGI7XG4gdC5vb3BlbiA9IDB4MDI1NDtcbiB0Lm9wYXJlbiA9IDB4MjRhYTtcbiB0Lm9wZW5idWxsZXQgPSAweDI1ZTY7XG4gdC5vcHRpb24gPSAweDIzMjU7XG4gdC5vcmRmZW1pbmluZSA9IDB4MDBhYTtcbiB0Lm9yZG1hc2N1bGluZSA9IDB4MDBiYTtcbiB0Lm9ydGhvZ29uYWwgPSAweDIyMWY7XG4gdC5vc2hvcnRkZXZhID0gMHgwOTEyO1xuIHQub3Nob3J0dm93ZWxzaWduZGV2YSA9IDB4MDk0YTtcbiB0Lm9zbGFzaCA9IDB4MDBmODtcbiB0Lm9zbGFzaGFjdXRlID0gMHgwMWZmO1xuIHQub3NtYWxsaGlyYWdhbmEgPSAweDMwNDk7XG4gdC5vc21hbGxrYXRha2FuYSA9IDB4MzBhOTtcbiB0Lm9zbWFsbGthdGFrYW5haGFsZndpZHRoID0gMHhmZjZiO1xuIHQub3N0cm9rZWFjdXRlID0gMHgwMWZmO1xuIHQub3N1cGVyaW9yID0gMHhmNmYwO1xuIHQub3RjeXJpbGxpYyA9IDB4MDQ3ZjtcbiB0Lm90aWxkZSA9IDB4MDBmNTtcbiB0Lm90aWxkZWFjdXRlID0gMHgxZTRkO1xuIHQub3RpbGRlZGllcmVzaXMgPSAweDFlNGY7XG4gdC5vdWJvcG9tb2ZvID0gMHgzMTIxO1xuIHQub3ZlcmxpbmUgPSAweDIwM2U7XG4gdC5vdmVybGluZWNlbnRlcmxpbmUgPSAweGZlNGE7XG4gdC5vdmVybGluZWNtYiA9IDB4MDMwNTtcbiB0Lm92ZXJsaW5lZGFzaGVkID0gMHhmZTQ5O1xuIHQub3ZlcmxpbmVkYmx3YXZ5ID0gMHhmZTRjO1xuIHQub3ZlcmxpbmV3YXZ5ID0gMHhmZTRiO1xuIHQub3ZlcnNjb3JlID0gMHgwMGFmO1xuIHQub3Zvd2Vsc2lnbmJlbmdhbGkgPSAweDA5Y2I7XG4gdC5vdm93ZWxzaWduZGV2YSA9IDB4MDk0YjtcbiB0Lm92b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjYjtcbiB0LnAgPSAweDAwNzA7XG4gdC5wYWFtcHNzcXVhcmUgPSAweDMzODA7XG4gdC5wYWFzZW50b3NxdWFyZSA9IDB4MzMyYjtcbiB0LnBhYmVuZ2FsaSA9IDB4MDlhYTtcbiB0LnBhY3V0ZSA9IDB4MWU1NTtcbiB0LnBhZGV2YSA9IDB4MDkyYTtcbiB0LnBhZ2Vkb3duID0gMHgyMWRmO1xuIHQucGFnZXVwID0gMHgyMWRlO1xuIHQucGFndWphcmF0aSA9IDB4MGFhYTtcbiB0LnBhZ3VybXVraGkgPSAweDBhMmE7XG4gdC5wYWhpcmFnYW5hID0gMHgzMDcxO1xuIHQucGFpeWFubm9pdGhhaSA9IDB4MGUyZjtcbiB0LnBha2F0YWthbmEgPSAweDMwZDE7XG4gdC5wYWxhdGFsaXphdGlvbmN5cmlsbGljY21iID0gMHgwNDg0O1xuIHQucGFsb2Noa2FjeXJpbGxpYyA9IDB4MDRjMDtcbiB0LnBhbnNpb3Nrb3JlYW4gPSAweDMxN2Y7XG4gdC5wYXJhZ3JhcGggPSAweDAwYjY7XG4gdC5wYXJhbGxlbCA9IDB4MjIyNTtcbiB0LnBhcmVubGVmdCA9IDB4MDAyODtcbiB0LnBhcmVubGVmdGFsdG9uZWFyYWJpYyA9IDB4ZmQzZTtcbiB0LnBhcmVubGVmdGJ0ID0gMHhmOGVkO1xuIHQucGFyZW5sZWZ0ZXggPSAweGY4ZWM7XG4gdC5wYXJlbmxlZnRpbmZlcmlvciA9IDB4MjA4ZDtcbiB0LnBhcmVubGVmdG1vbm9zcGFjZSA9IDB4ZmYwODtcbiB0LnBhcmVubGVmdHNtYWxsID0gMHhmZTU5O1xuIHQucGFyZW5sZWZ0c3VwZXJpb3IgPSAweDIwN2Q7XG4gdC5wYXJlbmxlZnR0cCA9IDB4ZjhlYjtcbiB0LnBhcmVubGVmdHZlcnRpY2FsID0gMHhmZTM1O1xuIHQucGFyZW5yaWdodCA9IDB4MDAyOTtcbiB0LnBhcmVucmlnaHRhbHRvbmVhcmFiaWMgPSAweGZkM2Y7XG4gdC5wYXJlbnJpZ2h0YnQgPSAweGY4Zjg7XG4gdC5wYXJlbnJpZ2h0ZXggPSAweGY4Zjc7XG4gdC5wYXJlbnJpZ2h0aW5mZXJpb3IgPSAweDIwOGU7XG4gdC5wYXJlbnJpZ2h0bW9ub3NwYWNlID0gMHhmZjA5O1xuIHQucGFyZW5yaWdodHNtYWxsID0gMHhmZTVhO1xuIHQucGFyZW5yaWdodHN1cGVyaW9yID0gMHgyMDdlO1xuIHQucGFyZW5yaWdodHRwID0gMHhmOGY2O1xuIHQucGFyZW5yaWdodHZlcnRpY2FsID0gMHhmZTM2O1xuIHQucGFydGlhbGRpZmYgPSAweDIyMDI7XG4gdC5wYXNlcWhlYnJldyA9IDB4MDVjMDtcbiB0LnBhc2h0YWhlYnJldyA9IDB4MDU5OTtcbiB0LnBhc3F1YXJlID0gMHgzM2E5O1xuIHQucGF0YWggPSAweDA1Yjc7XG4gdC5wYXRhaDExID0gMHgwNWI3O1xuIHQucGF0YWgxZCA9IDB4MDViNztcbiB0LnBhdGFoMmEgPSAweDA1Yjc7XG4gdC5wYXRhaGhlYnJldyA9IDB4MDViNztcbiB0LnBhdGFobmFycm93aGVicmV3ID0gMHgwNWI3O1xuIHQucGF0YWhxdWFydGVyaGVicmV3ID0gMHgwNWI3O1xuIHQucGF0YWh3aWRlaGVicmV3ID0gMHgwNWI3O1xuIHQucGF6ZXJoZWJyZXcgPSAweDA1YTE7XG4gdC5wYm9wb21vZm8gPSAweDMxMDY7XG4gdC5wY2lyY2xlID0gMHgyNGRmO1xuIHQucGRvdGFjY2VudCA9IDB4MWU1NztcbiB0LnBlID0gMHgwNWU0O1xuIHQucGVjeXJpbGxpYyA9IDB4MDQzZjtcbiB0LnBlZGFnZXNoID0gMHhmYjQ0O1xuIHQucGVkYWdlc2hoZWJyZXcgPSAweGZiNDQ7XG4gdC5wZWV6aXNxdWFyZSA9IDB4MzMzYjtcbiB0LnBlZmluYWxkYWdlc2hoZWJyZXcgPSAweGZiNDM7XG4gdC5wZWhhcmFiaWMgPSAweDA2N2U7XG4gdC5wZWhhcm1lbmlhbiA9IDB4MDU3YTtcbiB0LnBlaGVicmV3ID0gMHgwNWU0O1xuIHQucGVoZmluYWxhcmFiaWMgPSAweGZiNTc7XG4gdC5wZWhpbml0aWFsYXJhYmljID0gMHhmYjU4O1xuIHQucGVoaXJhZ2FuYSA9IDB4MzA3YTtcbiB0LnBlaG1lZGlhbGFyYWJpYyA9IDB4ZmI1OTtcbiB0LnBla2F0YWthbmEgPSAweDMwZGE7XG4gdC5wZW1pZGRsZWhvb2tjeXJpbGxpYyA9IDB4MDRhNztcbiB0LnBlcmFmZWhlYnJldyA9IDB4ZmI0ZTtcbiB0LnBlcmNlbnQgPSAweDAwMjU7XG4gdC5wZXJjZW50YXJhYmljID0gMHgwNjZhO1xuIHQucGVyY2VudG1vbm9zcGFjZSA9IDB4ZmYwNTtcbiB0LnBlcmNlbnRzbWFsbCA9IDB4ZmU2YTtcbiB0LnBlcmlvZCA9IDB4MDAyZTtcbiB0LnBlcmlvZGFybWVuaWFuID0gMHgwNTg5O1xuIHQucGVyaW9kY2VudGVyZWQgPSAweDAwYjc7XG4gdC5wZXJpb2RoYWxmd2lkdGggPSAweGZmNjE7XG4gdC5wZXJpb2RpbmZlcmlvciA9IDB4ZjZlNztcbiB0LnBlcmlvZG1vbm9zcGFjZSA9IDB4ZmYwZTtcbiB0LnBlcmlvZHNtYWxsID0gMHhmZTUyO1xuIHQucGVyaW9kc3VwZXJpb3IgPSAweGY2ZTg7XG4gdC5wZXJpc3BvbWVuaWdyZWVrY21iID0gMHgwMzQyO1xuIHQucGVycGVuZGljdWxhciA9IDB4MjJhNTtcbiB0LnBlcnRob3VzYW5kID0gMHgyMDMwO1xuIHQucGVzZXRhID0gMHgyMGE3O1xuIHQucGZzcXVhcmUgPSAweDMzOGE7XG4gdC5waGFiZW5nYWxpID0gMHgwOWFiO1xuIHQucGhhZGV2YSA9IDB4MDkyYjtcbiB0LnBoYWd1amFyYXRpID0gMHgwYWFiO1xuIHQucGhhZ3VybXVraGkgPSAweDBhMmI7XG4gdC5waGkgPSAweDAzYzY7XG4gdC5waGkxID0gMHgwM2Q1O1xuIHQucGhpZXVwaGFjaXJjbGVrb3JlYW4gPSAweDMyN2E7XG4gdC5waGlldXBoYXBhcmVua29yZWFuID0gMHgzMjFhO1xuIHQucGhpZXVwaGNpcmNsZWtvcmVhbiA9IDB4MzI2YztcbiB0LnBoaWV1cGhrb3JlYW4gPSAweDMxNGQ7XG4gdC5waGlldXBocGFyZW5rb3JlYW4gPSAweDMyMGM7XG4gdC5waGlsYXRpbiA9IDB4MDI3ODtcbiB0LnBoaW50aHV0aGFpID0gMHgwZTNhO1xuIHQucGhpc3ltYm9sZ3JlZWsgPSAweDAzZDU7XG4gdC5waG9vayA9IDB4MDFhNTtcbiB0LnBob3BoYW50aGFpID0gMHgwZTFlO1xuIHQucGhvcGh1bmd0aGFpID0gMHgwZTFjO1xuIHQucGhvc2FtcGhhb3RoYWkgPSAweDBlMjA7XG4gdC5waSA9IDB4MDNjMDtcbiB0LnBpZXVwYWNpcmNsZWtvcmVhbiA9IDB4MzI3MztcbiB0LnBpZXVwYXBhcmVua29yZWFuID0gMHgzMjEzO1xuIHQucGlldXBjaWV1Y2tvcmVhbiA9IDB4MzE3NjtcbiB0LnBpZXVwY2lyY2xla29yZWFuID0gMHgzMjY1O1xuIHQucGlldXBraXllb2trb3JlYW4gPSAweDMxNzI7XG4gdC5waWV1cGtvcmVhbiA9IDB4MzE0MjtcbiB0LnBpZXVwcGFyZW5rb3JlYW4gPSAweDMyMDU7XG4gdC5waWV1cHNpb3NraXllb2trb3JlYW4gPSAweDMxNzQ7XG4gdC5waWV1cHNpb3Nrb3JlYW4gPSAweDMxNDQ7XG4gdC5waWV1cHNpb3N0aWtldXRrb3JlYW4gPSAweDMxNzU7XG4gdC5waWV1cHRoaWV1dGhrb3JlYW4gPSAweDMxNzc7XG4gdC5waWV1cHRpa2V1dGtvcmVhbiA9IDB4MzE3MztcbiB0LnBpaGlyYWdhbmEgPSAweDMwNzQ7XG4gdC5waWthdGFrYW5hID0gMHgzMGQ0O1xuIHQucGlzeW1ib2xncmVlayA9IDB4MDNkNjtcbiB0LnBpd3Jhcm1lbmlhbiA9IDB4MDU4MztcbiB0LnBsdXMgPSAweDAwMmI7XG4gdC5wbHVzYmVsb3djbWIgPSAweDAzMWY7XG4gdC5wbHVzY2lyY2xlID0gMHgyMjk1O1xuIHQucGx1c21pbnVzID0gMHgwMGIxO1xuIHQucGx1c21vZCA9IDB4MDJkNjtcbiB0LnBsdXNtb25vc3BhY2UgPSAweGZmMGI7XG4gdC5wbHVzc21hbGwgPSAweGZlNjI7XG4gdC5wbHVzc3VwZXJpb3IgPSAweDIwN2E7XG4gdC5wbW9ub3NwYWNlID0gMHhmZjUwO1xuIHQucG1zcXVhcmUgPSAweDMzZDg7XG4gdC5wb2hpcmFnYW5hID0gMHgzMDdkO1xuIHQucG9pbnRpbmdpbmRleGRvd253aGl0ZSA9IDB4MjYxZjtcbiB0LnBvaW50aW5naW5kZXhsZWZ0d2hpdGUgPSAweDI2MWM7XG4gdC5wb2ludGluZ2luZGV4cmlnaHR3aGl0ZSA9IDB4MjYxZTtcbiB0LnBvaW50aW5naW5kZXh1cHdoaXRlID0gMHgyNjFkO1xuIHQucG9rYXRha2FuYSA9IDB4MzBkZDtcbiB0LnBvcGxhdGhhaSA9IDB4MGUxYjtcbiB0LnBvc3RhbG1hcmsgPSAweDMwMTI7XG4gdC5wb3N0YWxtYXJrZmFjZSA9IDB4MzAyMDtcbiB0LnBwYXJlbiA9IDB4MjRhYjtcbiB0LnByZWNlZGVzID0gMHgyMjdhO1xuIHQucHJlc2NyaXB0aW9uID0gMHgyMTFlO1xuIHQucHJpbWVtb2QgPSAweDAyYjk7XG4gdC5wcmltZXJldmVyc2VkID0gMHgyMDM1O1xuIHQucHJvZHVjdCA9IDB4MjIwZjtcbiB0LnByb2plY3RpdmUgPSAweDIzMDU7XG4gdC5wcm9sb25nZWRrYW5hID0gMHgzMGZjO1xuIHQucHJvcGVsbG9yID0gMHgyMzE4O1xuIHQucHJvcGVyc3Vic2V0ID0gMHgyMjgyO1xuIHQucHJvcGVyc3VwZXJzZXQgPSAweDIyODM7XG4gdC5wcm9wb3J0aW9uID0gMHgyMjM3O1xuIHQucHJvcG9ydGlvbmFsID0gMHgyMjFkO1xuIHQucHNpID0gMHgwM2M4O1xuIHQucHNpY3lyaWxsaWMgPSAweDA0NzE7XG4gdC5wc2lsaXBuZXVtYXRhY3lyaWxsaWNjbWIgPSAweDA0ODY7XG4gdC5wc3NxdWFyZSA9IDB4MzNiMDtcbiB0LnB1aGlyYWdhbmEgPSAweDMwNzc7XG4gdC5wdWthdGFrYW5hID0gMHgzMGQ3O1xuIHQucHZzcXVhcmUgPSAweDMzYjQ7XG4gdC5wd3NxdWFyZSA9IDB4MzNiYTtcbiB0LnEgPSAweDAwNzE7XG4gdC5xYWRldmEgPSAweDA5NTg7XG4gdC5xYWRtYWhlYnJldyA9IDB4MDVhODtcbiB0LnFhZmFyYWJpYyA9IDB4MDY0MjtcbiB0LnFhZmZpbmFsYXJhYmljID0gMHhmZWQ2O1xuIHQucWFmaW5pdGlhbGFyYWJpYyA9IDB4ZmVkNztcbiB0LnFhZm1lZGlhbGFyYWJpYyA9IDB4ZmVkODtcbiB0LnFhbWF0cyA9IDB4MDViODtcbiB0LnFhbWF0czEwID0gMHgwNWI4O1xuIHQucWFtYXRzMWEgPSAweDA1Yjg7XG4gdC5xYW1hdHMxYyA9IDB4MDViODtcbiB0LnFhbWF0czI3ID0gMHgwNWI4O1xuIHQucWFtYXRzMjkgPSAweDA1Yjg7XG4gdC5xYW1hdHMzMyA9IDB4MDViODtcbiB0LnFhbWF0c2RlID0gMHgwNWI4O1xuIHQucWFtYXRzaGVicmV3ID0gMHgwNWI4O1xuIHQucWFtYXRzbmFycm93aGVicmV3ID0gMHgwNWI4O1xuIHQucWFtYXRzcWF0YW5oZWJyZXcgPSAweDA1Yjg7XG4gdC5xYW1hdHNxYXRhbm5hcnJvd2hlYnJldyA9IDB4MDViODtcbiB0LnFhbWF0c3FhdGFucXVhcnRlcmhlYnJldyA9IDB4MDViODtcbiB0LnFhbWF0c3FhdGFud2lkZWhlYnJldyA9IDB4MDViODtcbiB0LnFhbWF0c3F1YXJ0ZXJoZWJyZXcgPSAweDA1Yjg7XG4gdC5xYW1hdHN3aWRlaGVicmV3ID0gMHgwNWI4O1xuIHQucWFybmV5cGFyYWhlYnJldyA9IDB4MDU5ZjtcbiB0LnFib3BvbW9mbyA9IDB4MzExMTtcbiB0LnFjaXJjbGUgPSAweDI0ZTA7XG4gdC5xaG9vayA9IDB4MDJhMDtcbiB0LnFtb25vc3BhY2UgPSAweGZmNTE7XG4gdC5xb2YgPSAweDA1ZTc7XG4gdC5xb2ZkYWdlc2ggPSAweGZiNDc7XG4gdC5xb2ZkYWdlc2hoZWJyZXcgPSAweGZiNDc7XG4gdC5xb2ZoZWJyZXcgPSAweDA1ZTc7XG4gdC5xcGFyZW4gPSAweDI0YWM7XG4gdC5xdWFydGVybm90ZSA9IDB4MjY2OTtcbiB0LnF1YnV0cyA9IDB4MDViYjtcbiB0LnF1YnV0czE4ID0gMHgwNWJiO1xuIHQucXVidXRzMjUgPSAweDA1YmI7XG4gdC5xdWJ1dHMzMSA9IDB4MDViYjtcbiB0LnF1YnV0c2hlYnJldyA9IDB4MDViYjtcbiB0LnF1YnV0c25hcnJvd2hlYnJldyA9IDB4MDViYjtcbiB0LnF1YnV0c3F1YXJ0ZXJoZWJyZXcgPSAweDA1YmI7XG4gdC5xdWJ1dHN3aWRlaGVicmV3ID0gMHgwNWJiO1xuIHQucXVlc3Rpb24gPSAweDAwM2Y7XG4gdC5xdWVzdGlvbmFyYWJpYyA9IDB4MDYxZjtcbiB0LnF1ZXN0aW9uYXJtZW5pYW4gPSAweDA1NWU7XG4gdC5xdWVzdGlvbmRvd24gPSAweDAwYmY7XG4gdC5xdWVzdGlvbmRvd25zbWFsbCA9IDB4ZjdiZjtcbiB0LnF1ZXN0aW9uZ3JlZWsgPSAweDAzN2U7XG4gdC5xdWVzdGlvbm1vbm9zcGFjZSA9IDB4ZmYxZjtcbiB0LnF1ZXN0aW9uc21hbGwgPSAweGY3M2Y7XG4gdC5xdW90ZWRibCA9IDB4MDAyMjtcbiB0LnF1b3RlZGJsYmFzZSA9IDB4MjAxZTtcbiB0LnF1b3RlZGJsbGVmdCA9IDB4MjAxYztcbiB0LnF1b3RlZGJsbW9ub3NwYWNlID0gMHhmZjAyO1xuIHQucXVvdGVkYmxwcmltZSA9IDB4MzAxZTtcbiB0LnF1b3RlZGJscHJpbWVyZXZlcnNlZCA9IDB4MzAxZDtcbiB0LnF1b3RlZGJscmlnaHQgPSAweDIwMWQ7XG4gdC5xdW90ZWxlZnQgPSAweDIwMTg7XG4gdC5xdW90ZWxlZnRyZXZlcnNlZCA9IDB4MjAxYjtcbiB0LnF1b3RlcmV2ZXJzZWQgPSAweDIwMWI7XG4gdC5xdW90ZXJpZ2h0ID0gMHgyMDE5O1xuIHQucXVvdGVyaWdodG4gPSAweDAxNDk7XG4gdC5xdW90ZXNpbmdsYmFzZSA9IDB4MjAxYTtcbiB0LnF1b3Rlc2luZ2xlID0gMHgwMDI3O1xuIHQucXVvdGVzaW5nbGVtb25vc3BhY2UgPSAweGZmMDc7XG4gdC5yID0gMHgwMDcyO1xuIHQucmFhcm1lbmlhbiA9IDB4MDU3YztcbiB0LnJhYmVuZ2FsaSA9IDB4MDliMDtcbiB0LnJhY3V0ZSA9IDB4MDE1NTtcbiB0LnJhZGV2YSA9IDB4MDkzMDtcbiB0LnJhZGljYWwgPSAweDIyMWE7XG4gdC5yYWRpY2FsZXggPSAweGY4ZTU7XG4gdC5yYWRvdmVyc3NxdWFyZSA9IDB4MzNhZTtcbiB0LnJhZG92ZXJzc3F1YXJlZHNxdWFyZSA9IDB4MzNhZjtcbiB0LnJhZHNxdWFyZSA9IDB4MzNhZDtcbiB0LnJhZmUgPSAweDA1YmY7XG4gdC5yYWZlaGVicmV3ID0gMHgwNWJmO1xuIHQucmFndWphcmF0aSA9IDB4MGFiMDtcbiB0LnJhZ3VybXVraGkgPSAweDBhMzA7XG4gdC5yYWhpcmFnYW5hID0gMHgzMDg5O1xuIHQucmFrYXRha2FuYSA9IDB4MzBlOTtcbiB0LnJha2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTc7XG4gdC5yYWxvd2VyZGlhZ29uYWxiZW5nYWxpID0gMHgwOWYxO1xuIHQucmFtaWRkbGVkaWFnb25hbGJlbmdhbGkgPSAweDA5ZjA7XG4gdC5yYW1zaG9ybiA9IDB4MDI2NDtcbiB0LnJhdGlvID0gMHgyMjM2O1xuIHQucmJvcG9tb2ZvID0gMHgzMTE2O1xuIHQucmNhcm9uID0gMHgwMTU5O1xuIHQucmNlZGlsbGEgPSAweDAxNTc7XG4gdC5yY2lyY2xlID0gMHgyNGUxO1xuIHQucmNvbW1hYWNjZW50ID0gMHgwMTU3O1xuIHQucmRibGdyYXZlID0gMHgwMjExO1xuIHQucmRvdGFjY2VudCA9IDB4MWU1OTtcbiB0LnJkb3RiZWxvdyA9IDB4MWU1YjtcbiB0LnJkb3RiZWxvd21hY3JvbiA9IDB4MWU1ZDtcbiB0LnJlZmVyZW5jZW1hcmsgPSAweDIwM2I7XG4gdC5yZWZsZXhzdWJzZXQgPSAweDIyODY7XG4gdC5yZWZsZXhzdXBlcnNldCA9IDB4MjI4NztcbiB0LnJlZ2lzdGVyZWQgPSAweDAwYWU7XG4gdC5yZWdpc3RlcnNhbnMgPSAweGY4ZTg7XG4gdC5yZWdpc3RlcnNlcmlmID0gMHhmNmRhO1xuIHQucmVoYXJhYmljID0gMHgwNjMxO1xuIHQucmVoYXJtZW5pYW4gPSAweDA1ODA7XG4gdC5yZWhmaW5hbGFyYWJpYyA9IDB4ZmVhZTtcbiB0LnJlaGlyYWdhbmEgPSAweDMwOGM7XG4gdC5yZWthdGFrYW5hID0gMHgzMGVjO1xuIHQucmVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5YTtcbiB0LnJlc2ggPSAweDA1ZTg7XG4gdC5yZXNoZGFnZXNoaGVicmV3ID0gMHhmYjQ4O1xuIHQucmVzaGhlYnJldyA9IDB4MDVlODtcbiB0LnJldmVyc2VkdGlsZGUgPSAweDIyM2Q7XG4gdC5yZXZpYWhlYnJldyA9IDB4MDU5NztcbiB0LnJldmlhbXVncmFzaGhlYnJldyA9IDB4MDU5NztcbiB0LnJldmxvZ2ljYWxub3QgPSAweDIzMTA7XG4gdC5yZmlzaGhvb2sgPSAweDAyN2U7XG4gdC5yZmlzaGhvb2tyZXZlcnNlZCA9IDB4MDI3ZjtcbiB0LnJoYWJlbmdhbGkgPSAweDA5ZGQ7XG4gdC5yaGFkZXZhID0gMHgwOTVkO1xuIHQucmhvID0gMHgwM2MxO1xuIHQucmhvb2sgPSAweDAyN2Q7XG4gdC5yaG9va3R1cm5lZCA9IDB4MDI3YjtcbiB0LnJob29rdHVybmVkc3VwZXJpb3IgPSAweDAyYjU7XG4gdC5yaG9zeW1ib2xncmVlayA9IDB4MDNmMTtcbiB0LnJob3RpY2hvb2ttb2QgPSAweDAyZGU7XG4gdC5yaWV1bGFjaXJjbGVrb3JlYW4gPSAweDMyNzE7XG4gdC5yaWV1bGFwYXJlbmtvcmVhbiA9IDB4MzIxMTtcbiB0LnJpZXVsY2lyY2xla29yZWFuID0gMHgzMjYzO1xuIHQucmlldWxoaWV1aGtvcmVhbiA9IDB4MzE0MDtcbiB0LnJpZXVsa2l5ZW9ra29yZWFuID0gMHgzMTNhO1xuIHQucmlldWxraXllb2tzaW9za29yZWFuID0gMHgzMTY5O1xuIHQucmlldWxrb3JlYW4gPSAweDMxMzk7XG4gdC5yaWV1bG1pZXVta29yZWFuID0gMHgzMTNiO1xuIHQucmlldWxwYW5zaW9za29yZWFuID0gMHgzMTZjO1xuIHQucmlldWxwYXJlbmtvcmVhbiA9IDB4MzIwMztcbiB0LnJpZXVscGhpZXVwaGtvcmVhbiA9IDB4MzEzZjtcbiB0LnJpZXVscGlldXBrb3JlYW4gPSAweDMxM2M7XG4gdC5yaWV1bHBpZXVwc2lvc2tvcmVhbiA9IDB4MzE2YjtcbiB0LnJpZXVsc2lvc2tvcmVhbiA9IDB4MzEzZDtcbiB0LnJpZXVsdGhpZXV0aGtvcmVhbiA9IDB4MzEzZTtcbiB0LnJpZXVsdGlrZXV0a29yZWFuID0gMHgzMTZhO1xuIHQucmlldWx5ZW9yaW5oaWV1aGtvcmVhbiA9IDB4MzE2ZDtcbiB0LnJpZ2h0YW5nbGUgPSAweDIyMWY7XG4gdC5yaWdodHRhY2tiZWxvd2NtYiA9IDB4MDMxOTtcbiB0LnJpZ2h0dHJpYW5nbGUgPSAweDIyYmY7XG4gdC5yaWhpcmFnYW5hID0gMHgzMDhhO1xuIHQucmlrYXRha2FuYSA9IDB4MzBlYTtcbiB0LnJpa2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTg7XG4gdC5yaW5nID0gMHgwMmRhO1xuIHQucmluZ2JlbG93Y21iID0gMHgwMzI1O1xuIHQucmluZ2NtYiA9IDB4MDMwYTtcbiB0LnJpbmdoYWxmbGVmdCA9IDB4MDJiZjtcbiB0LnJpbmdoYWxmbGVmdGFybWVuaWFuID0gMHgwNTU5O1xuIHQucmluZ2hhbGZsZWZ0YmVsb3djbWIgPSAweDAzMWM7XG4gdC5yaW5naGFsZmxlZnRjZW50ZXJlZCA9IDB4MDJkMztcbiB0LnJpbmdoYWxmcmlnaHQgPSAweDAyYmU7XG4gdC5yaW5naGFsZnJpZ2h0YmVsb3djbWIgPSAweDAzMzk7XG4gdC5yaW5naGFsZnJpZ2h0Y2VudGVyZWQgPSAweDAyZDI7XG4gdC5yaW52ZXJ0ZWRicmV2ZSA9IDB4MDIxMztcbiB0LnJpdHRvcnVzcXVhcmUgPSAweDMzNTE7XG4gdC5ybGluZWJlbG93ID0gMHgxZTVmO1xuIHQucmxvbmdsZWcgPSAweDAyN2M7XG4gdC5ybG9uZ2xlZ3R1cm5lZCA9IDB4MDI3YTtcbiB0LnJtb25vc3BhY2UgPSAweGZmNTI7XG4gdC5yb2hpcmFnYW5hID0gMHgzMDhkO1xuIHQucm9rYXRha2FuYSA9IDB4MzBlZDtcbiB0LnJva2F0YWthbmFoYWxmd2lkdGggPSAweGZmOWI7XG4gdC5yb3J1YXRoYWkgPSAweDBlMjM7XG4gdC5ycGFyZW4gPSAweDI0YWQ7XG4gdC5ycmFiZW5nYWxpID0gMHgwOWRjO1xuIHQucnJhZGV2YSA9IDB4MDkzMTtcbiB0LnJyYWd1cm11a2hpID0gMHgwYTVjO1xuIHQucnJlaGFyYWJpYyA9IDB4MDY5MTtcbiB0LnJyZWhmaW5hbGFyYWJpYyA9IDB4ZmI4ZDtcbiB0LnJydm9jYWxpY2JlbmdhbGkgPSAweDA5ZTA7XG4gdC5ycnZvY2FsaWNkZXZhID0gMHgwOTYwO1xuIHQucnJ2b2NhbGljZ3VqYXJhdGkgPSAweDBhZTA7XG4gdC5ycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpID0gMHgwOWM0O1xuIHQucnJ2b2NhbGljdm93ZWxzaWduZGV2YSA9IDB4MDk0NDtcbiB0LnJydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWM0O1xuIHQucnN1cGVyaW9yID0gMHhmNmYxO1xuIHQucnRibG9jayA9IDB4MjU5MDtcbiB0LnJ0dXJuZWQgPSAweDAyNzk7XG4gdC5ydHVybmVkc3VwZXJpb3IgPSAweDAyYjQ7XG4gdC5ydWhpcmFnYW5hID0gMHgzMDhiO1xuIHQucnVrYXRha2FuYSA9IDB4MzBlYjtcbiB0LnJ1a2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTk7XG4gdC5ydXBlZW1hcmtiZW5nYWxpID0gMHgwOWYyO1xuIHQucnVwZWVzaWduYmVuZ2FsaSA9IDB4MDlmMztcbiB0LnJ1cGlhaCA9IDB4ZjZkZDtcbiB0LnJ1dGhhaSA9IDB4MGUyNDtcbiB0LnJ2b2NhbGljYmVuZ2FsaSA9IDB4MDk4YjtcbiB0LnJ2b2NhbGljZGV2YSA9IDB4MDkwYjtcbiB0LnJ2b2NhbGljZ3VqYXJhdGkgPSAweDBhOGI7XG4gdC5ydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkgPSAweDA5YzM7XG4gdC5ydm9jYWxpY3Zvd2Vsc2lnbmRldmEgPSAweDA5NDM7XG4gdC5ydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWMzO1xuIHQucyA9IDB4MDA3MztcbiB0LnNhYmVuZ2FsaSA9IDB4MDliODtcbiB0LnNhY3V0ZSA9IDB4MDE1YjtcbiB0LnNhY3V0ZWRvdGFjY2VudCA9IDB4MWU2NTtcbiB0LnNhZGFyYWJpYyA9IDB4MDYzNTtcbiB0LnNhZGV2YSA9IDB4MDkzODtcbiB0LnNhZGZpbmFsYXJhYmljID0gMHhmZWJhO1xuIHQuc2FkaW5pdGlhbGFyYWJpYyA9IDB4ZmViYjtcbiB0LnNhZG1lZGlhbGFyYWJpYyA9IDB4ZmViYztcbiB0LnNhZ3VqYXJhdGkgPSAweDBhYjg7XG4gdC5zYWd1cm11a2hpID0gMHgwYTM4O1xuIHQuc2FoaXJhZ2FuYSA9IDB4MzA1NTtcbiB0LnNha2F0YWthbmEgPSAweDMwYjU7XG4gdC5zYWthdGFrYW5haGFsZndpZHRoID0gMHhmZjdiO1xuIHQuc2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYyA9IDB4ZmRmYTtcbiB0LnNhbWVraCA9IDB4MDVlMTtcbiB0LnNhbWVraGRhZ2VzaCA9IDB4ZmI0MTtcbiB0LnNhbWVraGRhZ2VzaGhlYnJldyA9IDB4ZmI0MTtcbiB0LnNhbWVraGhlYnJldyA9IDB4MDVlMTtcbiB0LnNhcmFhYXRoYWkgPSAweDBlMzI7XG4gdC5zYXJhYWV0aGFpID0gMHgwZTQxO1xuIHQuc2FyYWFpbWFpbWFsYWl0aGFpID0gMHgwZTQ0O1xuIHQuc2FyYWFpbWFpbXVhbnRoYWkgPSAweDBlNDM7XG4gdC5zYXJhYW10aGFpID0gMHgwZTMzO1xuIHQuc2FyYWF0aGFpID0gMHgwZTMwO1xuIHQuc2FyYWV0aGFpID0gMHgwZTQwO1xuIHQuc2FyYWlpbGVmdHRoYWkgPSAweGY4ODY7XG4gdC5zYXJhaWl0aGFpID0gMHgwZTM1O1xuIHQuc2FyYWlsZWZ0dGhhaSA9IDB4Zjg4NTtcbiB0LnNhcmFpdGhhaSA9IDB4MGUzNDtcbiB0LnNhcmFvdGhhaSA9IDB4MGU0MjtcbiB0LnNhcmF1ZWVsZWZ0dGhhaSA9IDB4Zjg4ODtcbiB0LnNhcmF1ZWV0aGFpID0gMHgwZTM3O1xuIHQuc2FyYXVlbGVmdHRoYWkgPSAweGY4ODc7XG4gdC5zYXJhdWV0aGFpID0gMHgwZTM2O1xuIHQuc2FyYXV0aGFpID0gMHgwZTM4O1xuIHQuc2FyYXV1dGhhaSA9IDB4MGUzOTtcbiB0LnNib3BvbW9mbyA9IDB4MzExOTtcbiB0LnNjYXJvbiA9IDB4MDE2MTtcbiB0LnNjYXJvbmRvdGFjY2VudCA9IDB4MWU2NztcbiB0LnNjZWRpbGxhID0gMHgwMTVmO1xuIHQuc2Nod2EgPSAweDAyNTk7XG4gdC5zY2h3YWN5cmlsbGljID0gMHgwNGQ5O1xuIHQuc2Nod2FkaWVyZXNpc2N5cmlsbGljID0gMHgwNGRiO1xuIHQuc2Nod2Fob29rID0gMHgwMjVhO1xuIHQuc2NpcmNsZSA9IDB4MjRlMjtcbiB0LnNjaXJjdW1mbGV4ID0gMHgwMTVkO1xuIHQuc2NvbW1hYWNjZW50ID0gMHgwMjE5O1xuIHQuc2RvdGFjY2VudCA9IDB4MWU2MTtcbiB0LnNkb3RiZWxvdyA9IDB4MWU2MztcbiB0LnNkb3RiZWxvd2RvdGFjY2VudCA9IDB4MWU2OTtcbiB0LnNlYWd1bGxiZWxvd2NtYiA9IDB4MDMzYztcbiB0LnNlY29uZCA9IDB4MjAzMztcbiB0LnNlY29uZHRvbmVjaGluZXNlID0gMHgwMmNhO1xuIHQuc2VjdGlvbiA9IDB4MDBhNztcbiB0LnNlZW5hcmFiaWMgPSAweDA2MzM7XG4gdC5zZWVuZmluYWxhcmFiaWMgPSAweGZlYjI7XG4gdC5zZWVuaW5pdGlhbGFyYWJpYyA9IDB4ZmViMztcbiB0LnNlZW5tZWRpYWxhcmFiaWMgPSAweGZlYjQ7XG4gdC5zZWdvbCA9IDB4MDViNjtcbiB0LnNlZ29sMTMgPSAweDA1YjY7XG4gdC5zZWdvbDFmID0gMHgwNWI2O1xuIHQuc2Vnb2wyYyA9IDB4MDViNjtcbiB0LnNlZ29saGVicmV3ID0gMHgwNWI2O1xuIHQuc2Vnb2xuYXJyb3doZWJyZXcgPSAweDA1YjY7XG4gdC5zZWdvbHF1YXJ0ZXJoZWJyZXcgPSAweDA1YjY7XG4gdC5zZWdvbHRhaGVicmV3ID0gMHgwNTkyO1xuIHQuc2Vnb2x3aWRlaGVicmV3ID0gMHgwNWI2O1xuIHQuc2VoYXJtZW5pYW4gPSAweDA1N2Q7XG4gdC5zZWhpcmFnYW5hID0gMHgzMDViO1xuIHQuc2VrYXRha2FuYSA9IDB4MzBiYjtcbiB0LnNla2F0YWthbmFoYWxmd2lkdGggPSAweGZmN2U7XG4gdC5zZW1pY29sb24gPSAweDAwM2I7XG4gdC5zZW1pY29sb25hcmFiaWMgPSAweDA2MWI7XG4gdC5zZW1pY29sb25tb25vc3BhY2UgPSAweGZmMWI7XG4gdC5zZW1pY29sb25zbWFsbCA9IDB4ZmU1NDtcbiB0LnNlbWl2b2ljZWRtYXJra2FuYSA9IDB4MzA5YztcbiB0LnNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aCA9IDB4ZmY5ZjtcbiB0LnNlbnRpc3F1YXJlID0gMHgzMzIyO1xuIHQuc2VudG9zcXVhcmUgPSAweDMzMjM7XG4gdC5zZXZlbiA9IDB4MDAzNztcbiB0LnNldmVuYXJhYmljID0gMHgwNjY3O1xuIHQuc2V2ZW5iZW5nYWxpID0gMHgwOWVkO1xuIHQuc2V2ZW5jaXJjbGUgPSAweDI0NjY7XG4gdC5zZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYgPSAweDI3OTA7XG4gdC5zZXZlbmRldmEgPSAweDA5NmQ7XG4gdC5zZXZlbmVpZ2h0aHMgPSAweDIxNWU7XG4gdC5zZXZlbmd1amFyYXRpID0gMHgwYWVkO1xuIHQuc2V2ZW5ndXJtdWtoaSA9IDB4MGE2ZDtcbiB0LnNldmVuaGFja2FyYWJpYyA9IDB4MDY2NztcbiB0LnNldmVuaGFuZ3pob3UgPSAweDMwMjc7XG4gdC5zZXZlbmlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjY7XG4gdC5zZXZlbmluZmVyaW9yID0gMHgyMDg3O1xuIHQuc2V2ZW5tb25vc3BhY2UgPSAweGZmMTc7XG4gdC5zZXZlbm9sZHN0eWxlID0gMHhmNzM3O1xuIHQuc2V2ZW5wYXJlbiA9IDB4MjQ3YTtcbiB0LnNldmVucGVyaW9kID0gMHgyNDhlO1xuIHQuc2V2ZW5wZXJzaWFuID0gMHgwNmY3O1xuIHQuc2V2ZW5yb21hbiA9IDB4MjE3NjtcbiB0LnNldmVuc3VwZXJpb3IgPSAweDIwNzc7XG4gdC5zZXZlbnRlZW5jaXJjbGUgPSAweDI0NzA7XG4gdC5zZXZlbnRlZW5wYXJlbiA9IDB4MjQ4NDtcbiB0LnNldmVudGVlbnBlcmlvZCA9IDB4MjQ5ODtcbiB0LnNldmVudGhhaSA9IDB4MGU1NztcbiB0LnNmdGh5cGhlbiA9IDB4MDBhZDtcbiB0LnNoYWFybWVuaWFuID0gMHgwNTc3O1xuIHQuc2hhYmVuZ2FsaSA9IDB4MDliNjtcbiB0LnNoYWN5cmlsbGljID0gMHgwNDQ4O1xuIHQuc2hhZGRhYXJhYmljID0gMHgwNjUxO1xuIHQuc2hhZGRhZGFtbWFhcmFiaWMgPSAweGZjNjE7XG4gdC5zaGFkZGFkYW1tYXRhbmFyYWJpYyA9IDB4ZmM1ZTtcbiB0LnNoYWRkYWZhdGhhYXJhYmljID0gMHhmYzYwO1xuIHQuc2hhZGRha2FzcmFhcmFiaWMgPSAweGZjNjI7XG4gdC5zaGFkZGFrYXNyYXRhbmFyYWJpYyA9IDB4ZmM1ZjtcbiB0LnNoYWRlID0gMHgyNTkyO1xuIHQuc2hhZGVkYXJrID0gMHgyNTkzO1xuIHQuc2hhZGVsaWdodCA9IDB4MjU5MTtcbiB0LnNoYWRlbWVkaXVtID0gMHgyNTkyO1xuIHQuc2hhZGV2YSA9IDB4MDkzNjtcbiB0LnNoYWd1amFyYXRpID0gMHgwYWI2O1xuIHQuc2hhZ3VybXVraGkgPSAweDBhMzY7XG4gdC5zaGFsc2hlbGV0aGVicmV3ID0gMHgwNTkzO1xuIHQuc2hib3BvbW9mbyA9IDB4MzExNTtcbiB0LnNoY2hhY3lyaWxsaWMgPSAweDA0NDk7XG4gdC5zaGVlbmFyYWJpYyA9IDB4MDYzNDtcbiB0LnNoZWVuZmluYWxhcmFiaWMgPSAweGZlYjY7XG4gdC5zaGVlbmluaXRpYWxhcmFiaWMgPSAweGZlYjc7XG4gdC5zaGVlbm1lZGlhbGFyYWJpYyA9IDB4ZmViODtcbiB0LnNoZWljb3B0aWMgPSAweDAzZTM7XG4gdC5zaGVxZWwgPSAweDIwYWE7XG4gdC5zaGVxZWxoZWJyZXcgPSAweDIwYWE7XG4gdC5zaGV2YSA9IDB4MDViMDtcbiB0LnNoZXZhMTE1ID0gMHgwNWIwO1xuIHQuc2hldmExNSA9IDB4MDViMDtcbiB0LnNoZXZhMjIgPSAweDA1YjA7XG4gdC5zaGV2YTJlID0gMHgwNWIwO1xuIHQuc2hldmFoZWJyZXcgPSAweDA1YjA7XG4gdC5zaGV2YW5hcnJvd2hlYnJldyA9IDB4MDViMDtcbiB0LnNoZXZhcXVhcnRlcmhlYnJldyA9IDB4MDViMDtcbiB0LnNoZXZhd2lkZWhlYnJldyA9IDB4MDViMDtcbiB0LnNoaGFjeXJpbGxpYyA9IDB4MDRiYjtcbiB0LnNoaW1hY29wdGljID0gMHgwM2VkO1xuIHQuc2hpbiA9IDB4MDVlOTtcbiB0LnNoaW5kYWdlc2ggPSAweGZiNDk7XG4gdC5zaGluZGFnZXNoaGVicmV3ID0gMHhmYjQ5O1xuIHQuc2hpbmRhZ2VzaHNoaW5kb3QgPSAweGZiMmM7XG4gdC5zaGluZGFnZXNoc2hpbmRvdGhlYnJldyA9IDB4ZmIyYztcbiB0LnNoaW5kYWdlc2hzaW5kb3QgPSAweGZiMmQ7XG4gdC5zaGluZGFnZXNoc2luZG90aGVicmV3ID0gMHhmYjJkO1xuIHQuc2hpbmRvdGhlYnJldyA9IDB4MDVjMTtcbiB0LnNoaW5oZWJyZXcgPSAweDA1ZTk7XG4gdC5zaGluc2hpbmRvdCA9IDB4ZmIyYTtcbiB0LnNoaW5zaGluZG90aGVicmV3ID0gMHhmYjJhO1xuIHQuc2hpbnNpbmRvdCA9IDB4ZmIyYjtcbiB0LnNoaW5zaW5kb3RoZWJyZXcgPSAweGZiMmI7XG4gdC5zaG9vayA9IDB4MDI4MjtcbiB0LnNpZ21hID0gMHgwM2MzO1xuIHQuc2lnbWExID0gMHgwM2MyO1xuIHQuc2lnbWFmaW5hbCA9IDB4MDNjMjtcbiB0LnNpZ21hbHVuYXRlc3ltYm9sZ3JlZWsgPSAweDAzZjI7XG4gdC5zaWhpcmFnYW5hID0gMHgzMDU3O1xuIHQuc2lrYXRha2FuYSA9IDB4MzBiNztcbiB0LnNpa2F0YWthbmFoYWxmd2lkdGggPSAweGZmN2M7XG4gdC5zaWx1cWhlYnJldyA9IDB4MDViZDtcbiB0LnNpbHVxbGVmdGhlYnJldyA9IDB4MDViZDtcbiB0LnNpbWlsYXIgPSAweDIyM2M7XG4gdC5zaW5kb3RoZWJyZXcgPSAweDA1YzI7XG4gdC5zaW9zYWNpcmNsZWtvcmVhbiA9IDB4MzI3NDtcbiB0LnNpb3NhcGFyZW5rb3JlYW4gPSAweDMyMTQ7XG4gdC5zaW9zY2lldWNrb3JlYW4gPSAweDMxN2U7XG4gdC5zaW9zY2lyY2xla29yZWFuID0gMHgzMjY2O1xuIHQuc2lvc2tpeWVva2tvcmVhbiA9IDB4MzE3YTtcbiB0LnNpb3Nrb3JlYW4gPSAweDMxNDU7XG4gdC5zaW9zbmlldW5rb3JlYW4gPSAweDMxN2I7XG4gdC5zaW9zcGFyZW5rb3JlYW4gPSAweDMyMDY7XG4gdC5zaW9zcGlldXBrb3JlYW4gPSAweDMxN2Q7XG4gdC5zaW9zdGlrZXV0a29yZWFuID0gMHgzMTdjO1xuIHQuc2l4ID0gMHgwMDM2O1xuIHQuc2l4YXJhYmljID0gMHgwNjY2O1xuIHQuc2l4YmVuZ2FsaSA9IDB4MDllYztcbiB0LnNpeGNpcmNsZSA9IDB4MjQ2NTtcbiB0LnNpeGNpcmNsZWludmVyc2VzYW5zc2VyaWYgPSAweDI3OGY7XG4gdC5zaXhkZXZhID0gMHgwOTZjO1xuIHQuc2l4Z3VqYXJhdGkgPSAweDBhZWM7XG4gdC5zaXhndXJtdWtoaSA9IDB4MGE2YztcbiB0LnNpeGhhY2thcmFiaWMgPSAweDA2NjY7XG4gdC5zaXhoYW5nemhvdSA9IDB4MzAyNjtcbiB0LnNpeGlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjU7XG4gdC5zaXhpbmZlcmlvciA9IDB4MjA4NjtcbiB0LnNpeG1vbm9zcGFjZSA9IDB4ZmYxNjtcbiB0LnNpeG9sZHN0eWxlID0gMHhmNzM2O1xuIHQuc2l4cGFyZW4gPSAweDI0Nzk7XG4gdC5zaXhwZXJpb2QgPSAweDI0OGQ7XG4gdC5zaXhwZXJzaWFuID0gMHgwNmY2O1xuIHQuc2l4cm9tYW4gPSAweDIxNzU7XG4gdC5zaXhzdXBlcmlvciA9IDB4MjA3NjtcbiB0LnNpeHRlZW5jaXJjbGUgPSAweDI0NmY7XG4gdC5zaXh0ZWVuY3VycmVuY3lkZW5vbWluYXRvcmJlbmdhbGkgPSAweDA5Zjk7XG4gdC5zaXh0ZWVucGFyZW4gPSAweDI0ODM7XG4gdC5zaXh0ZWVucGVyaW9kID0gMHgyNDk3O1xuIHQuc2l4dGhhaSA9IDB4MGU1NjtcbiB0LnNsYXNoID0gMHgwMDJmO1xuIHQuc2xhc2htb25vc3BhY2UgPSAweGZmMGY7XG4gdC5zbG9uZyA9IDB4MDE3ZjtcbiB0LnNsb25nZG90YWNjZW50ID0gMHgxZTliO1xuIHQuc21pbGVmYWNlID0gMHgyNjNhO1xuIHQuc21vbm9zcGFjZSA9IDB4ZmY1MztcbiB0LnNvZnBhc3VxaGVicmV3ID0gMHgwNWMzO1xuIHQuc29mdGh5cGhlbiA9IDB4MDBhZDtcbiB0LnNvZnRzaWduY3lyaWxsaWMgPSAweDA0NGM7XG4gdC5zb2hpcmFnYW5hID0gMHgzMDVkO1xuIHQuc29rYXRha2FuYSA9IDB4MzBiZDtcbiB0LnNva2F0YWthbmFoYWxmd2lkdGggPSAweGZmN2Y7XG4gdC5zb2xpZHVzbG9uZ292ZXJsYXljbWIgPSAweDAzMzg7XG4gdC5zb2xpZHVzc2hvcnRvdmVybGF5Y21iID0gMHgwMzM3O1xuIHQuc29ydXNpdGhhaSA9IDB4MGUyOTtcbiB0LnNvc2FsYXRoYWkgPSAweDBlMjg7XG4gdC5zb3NvdGhhaSA9IDB4MGUwYjtcbiB0LnNvc3VhdGhhaSA9IDB4MGUyYTtcbiB0LnNwYWNlID0gMHgwMDIwO1xuIHQuc3BhY2VoYWNrYXJhYmljID0gMHgwMDIwO1xuIHQuc3BhZGUgPSAweDI2NjA7XG4gdC5zcGFkZXN1aXRibGFjayA9IDB4MjY2MDtcbiB0LnNwYWRlc3VpdHdoaXRlID0gMHgyNjY0O1xuIHQuc3BhcmVuID0gMHgyNGFlO1xuIHQuc3F1YXJlYmVsb3djbWIgPSAweDAzM2I7XG4gdC5zcXVhcmVjYyA9IDB4MzNjNDtcbiB0LnNxdWFyZWNtID0gMHgzMzlkO1xuIHQuc3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCA9IDB4MjVhOTtcbiB0LnNxdWFyZWhvcml6b250YWxmaWxsID0gMHgyNWE0O1xuIHQuc3F1YXJla2cgPSAweDMzOGY7XG4gdC5zcXVhcmVrbSA9IDB4MzM5ZTtcbiB0LnNxdWFyZWttY2FwaXRhbCA9IDB4MzNjZTtcbiB0LnNxdWFyZWxuID0gMHgzM2QxO1xuIHQuc3F1YXJlbG9nID0gMHgzM2QyO1xuIHQuc3F1YXJlbWcgPSAweDMzOGU7XG4gdC5zcXVhcmVtaWwgPSAweDMzZDU7XG4gdC5zcXVhcmVtbSA9IDB4MzM5YztcbiB0LnNxdWFyZW1zcXVhcmVkID0gMHgzM2ExO1xuIHQuc3F1YXJlb3J0aG9nb25hbGNyb3NzaGF0Y2hmaWxsID0gMHgyNWE2O1xuIHQuc3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCA9IDB4MjVhNztcbiB0LnNxdWFyZXVwcGVycmlnaHR0b2xvd2VybGVmdGZpbGwgPSAweDI1YTg7XG4gdC5zcXVhcmV2ZXJ0aWNhbGZpbGwgPSAweDI1YTU7XG4gdC5zcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrID0gMHgyNWEzO1xuIHQuc3JzcXVhcmUgPSAweDMzZGI7XG4gdC5zc2FiZW5nYWxpID0gMHgwOWI3O1xuIHQuc3NhZGV2YSA9IDB4MDkzNztcbiB0LnNzYWd1amFyYXRpID0gMHgwYWI3O1xuIHQuc3NhbmdjaWV1Y2tvcmVhbiA9IDB4MzE0OTtcbiB0LnNzYW5naGlldWhrb3JlYW4gPSAweDMxODU7XG4gdC5zc2FuZ2lldW5na29yZWFuID0gMHgzMTgwO1xuIHQuc3NhbmdraXllb2trb3JlYW4gPSAweDMxMzI7XG4gdC5zc2FuZ25pZXVua29yZWFuID0gMHgzMTY1O1xuIHQuc3NhbmdwaWV1cGtvcmVhbiA9IDB4MzE0MztcbiB0LnNzYW5nc2lvc2tvcmVhbiA9IDB4MzE0NjtcbiB0LnNzYW5ndGlrZXV0a29yZWFuID0gMHgzMTM4O1xuIHQuc3N1cGVyaW9yID0gMHhmNmYyO1xuIHQuc3RlcmxpbmcgPSAweDAwYTM7XG4gdC5zdGVybGluZ21vbm9zcGFjZSA9IDB4ZmZlMTtcbiB0LnN0cm9rZWxvbmdvdmVybGF5Y21iID0gMHgwMzM2O1xuIHQuc3Ryb2tlc2hvcnRvdmVybGF5Y21iID0gMHgwMzM1O1xuIHQuc3Vic2V0ID0gMHgyMjgyO1xuIHQuc3Vic2V0bm90ZXF1YWwgPSAweDIyOGE7XG4gdC5zdWJzZXRvcmVxdWFsID0gMHgyMjg2O1xuIHQuc3VjY2VlZHMgPSAweDIyN2I7XG4gdC5zdWNodGhhdCA9IDB4MjIwYjtcbiB0LnN1aGlyYWdhbmEgPSAweDMwNTk7XG4gdC5zdWthdGFrYW5hID0gMHgzMGI5O1xuIHQuc3VrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3ZDtcbiB0LnN1a3VuYXJhYmljID0gMHgwNjUyO1xuIHQuc3VtbWF0aW9uID0gMHgyMjExO1xuIHQuc3VuID0gMHgyNjNjO1xuIHQuc3VwZXJzZXQgPSAweDIyODM7XG4gdC5zdXBlcnNldG5vdGVxdWFsID0gMHgyMjhiO1xuIHQuc3VwZXJzZXRvcmVxdWFsID0gMHgyMjg3O1xuIHQuc3ZzcXVhcmUgPSAweDMzZGM7XG4gdC5zeW91d2FlcmFzcXVhcmUgPSAweDMzN2M7XG4gdC50ID0gMHgwMDc0O1xuIHQudGFiZW5nYWxpID0gMHgwOWE0O1xuIHQudGFja2Rvd24gPSAweDIyYTQ7XG4gdC50YWNrbGVmdCA9IDB4MjJhMztcbiB0LnRhZGV2YSA9IDB4MDkyNDtcbiB0LnRhZ3VqYXJhdGkgPSAweDBhYTQ7XG4gdC50YWd1cm11a2hpID0gMHgwYTI0O1xuIHQudGFoYXJhYmljID0gMHgwNjM3O1xuIHQudGFoZmluYWxhcmFiaWMgPSAweGZlYzI7XG4gdC50YWhpbml0aWFsYXJhYmljID0gMHhmZWMzO1xuIHQudGFoaXJhZ2FuYSA9IDB4MzA1ZjtcbiB0LnRhaG1lZGlhbGFyYWJpYyA9IDB4ZmVjNDtcbiB0LnRhaXN5b3VlcmFzcXVhcmUgPSAweDMzN2Q7XG4gdC50YWthdGFrYW5hID0gMHgzMGJmO1xuIHQudGFrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4MDtcbiB0LnRhdHdlZWxhcmFiaWMgPSAweDA2NDA7XG4gdC50YXUgPSAweDAzYzQ7XG4gdC50YXYgPSAweDA1ZWE7XG4gdC50YXZkYWdlcyA9IDB4ZmI0YTtcbiB0LnRhdmRhZ2VzaCA9IDB4ZmI0YTtcbiB0LnRhdmRhZ2VzaGhlYnJldyA9IDB4ZmI0YTtcbiB0LnRhdmhlYnJldyA9IDB4MDVlYTtcbiB0LnRiYXIgPSAweDAxNjc7XG4gdC50Ym9wb21vZm8gPSAweDMxMGE7XG4gdC50Y2Fyb24gPSAweDAxNjU7XG4gdC50Y2N1cmwgPSAweDAyYTg7XG4gdC50Y2VkaWxsYSA9IDB4MDE2MztcbiB0LnRjaGVoYXJhYmljID0gMHgwNjg2O1xuIHQudGNoZWhmaW5hbGFyYWJpYyA9IDB4ZmI3YjtcbiB0LnRjaGVoaW5pdGlhbGFyYWJpYyA9IDB4ZmI3YztcbiB0LnRjaGVobWVkaWFsYXJhYmljID0gMHhmYjdkO1xuIHQudGNpcmNsZSA9IDB4MjRlMztcbiB0LnRjaXJjdW1mbGV4YmVsb3cgPSAweDFlNzE7XG4gdC50Y29tbWFhY2NlbnQgPSAweDAxNjM7XG4gdC50ZGllcmVzaXMgPSAweDFlOTc7XG4gdC50ZG90YWNjZW50ID0gMHgxZTZiO1xuIHQudGRvdGJlbG93ID0gMHgxZTZkO1xuIHQudGVjeXJpbGxpYyA9IDB4MDQ0MjtcbiB0LnRlZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0YWQ7XG4gdC50ZWhhcmFiaWMgPSAweDA2MmE7XG4gdC50ZWhmaW5hbGFyYWJpYyA9IDB4ZmU5NjtcbiB0LnRlaGhhaGluaXRpYWxhcmFiaWMgPSAweGZjYTI7XG4gdC50ZWhoYWhpc29sYXRlZGFyYWJpYyA9IDB4ZmMwYztcbiB0LnRlaGluaXRpYWxhcmFiaWMgPSAweGZlOTc7XG4gdC50ZWhpcmFnYW5hID0gMHgzMDY2O1xuIHQudGVoamVlbWluaXRpYWxhcmFiaWMgPSAweGZjYTE7XG4gdC50ZWhqZWVtaXNvbGF0ZWRhcmFiaWMgPSAweGZjMGI7XG4gdC50ZWhtYXJidXRhYXJhYmljID0gMHgwNjI5O1xuIHQudGVobWFyYnV0YWZpbmFsYXJhYmljID0gMHhmZTk0O1xuIHQudGVobWVkaWFsYXJhYmljID0gMHhmZTk4O1xuIHQudGVobWVlbWluaXRpYWxhcmFiaWMgPSAweGZjYTQ7XG4gdC50ZWhtZWVtaXNvbGF0ZWRhcmFiaWMgPSAweGZjMGU7XG4gdC50ZWhub29uZmluYWxhcmFiaWMgPSAweGZjNzM7XG4gdC50ZWthdGFrYW5hID0gMHgzMGM2O1xuIHQudGVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4MztcbiB0LnRlbGVwaG9uZSA9IDB4MjEyMTtcbiB0LnRlbGVwaG9uZWJsYWNrID0gMHgyNjBlO1xuIHQudGVsaXNoYWdlZG9sYWhlYnJldyA9IDB4MDVhMDtcbiB0LnRlbGlzaGFxZXRhbmFoZWJyZXcgPSAweDA1YTk7XG4gdC50ZW5jaXJjbGUgPSAweDI0Njk7XG4gdC50ZW5pZGVvZ3JhcGhpY3BhcmVuID0gMHgzMjI5O1xuIHQudGVucGFyZW4gPSAweDI0N2Q7XG4gdC50ZW5wZXJpb2QgPSAweDI0OTE7XG4gdC50ZW5yb21hbiA9IDB4MjE3OTtcbiB0LnRlc2ggPSAweDAyYTc7XG4gdC50ZXQgPSAweDA1ZDg7XG4gdC50ZXRkYWdlc2ggPSAweGZiMzg7XG4gdC50ZXRkYWdlc2hoZWJyZXcgPSAweGZiMzg7XG4gdC50ZXRoZWJyZXcgPSAweDA1ZDg7XG4gdC50ZXRzZWN5cmlsbGljID0gMHgwNGI1O1xuIHQudGV2aXJoZWJyZXcgPSAweDA1OWI7XG4gdC50ZXZpcmxlZnRoZWJyZXcgPSAweDA1OWI7XG4gdC50aGFiZW5nYWxpID0gMHgwOWE1O1xuIHQudGhhZGV2YSA9IDB4MDkyNTtcbiB0LnRoYWd1amFyYXRpID0gMHgwYWE1O1xuIHQudGhhZ3VybXVraGkgPSAweDBhMjU7XG4gdC50aGFsYXJhYmljID0gMHgwNjMwO1xuIHQudGhhbGZpbmFsYXJhYmljID0gMHhmZWFjO1xuIHQudGhhbnRoYWtoYXRsb3dsZWZ0dGhhaSA9IDB4Zjg5ODtcbiB0LnRoYW50aGFraGF0bG93cmlnaHR0aGFpID0gMHhmODk3O1xuIHQudGhhbnRoYWtoYXR0aGFpID0gMHgwZTRjO1xuIHQudGhhbnRoYWtoYXR1cHBlcmxlZnR0aGFpID0gMHhmODk2O1xuIHQudGhlaGFyYWJpYyA9IDB4MDYyYjtcbiB0LnRoZWhmaW5hbGFyYWJpYyA9IDB4ZmU5YTtcbiB0LnRoZWhpbml0aWFsYXJhYmljID0gMHhmZTliO1xuIHQudGhlaG1lZGlhbGFyYWJpYyA9IDB4ZmU5YztcbiB0LnRoZXJlZXhpc3RzID0gMHgyMjAzO1xuIHQudGhlcmVmb3JlID0gMHgyMjM0O1xuIHQudGhldGEgPSAweDAzYjg7XG4gdC50aGV0YTEgPSAweDAzZDE7XG4gdC50aGV0YXN5bWJvbGdyZWVrID0gMHgwM2QxO1xuIHQudGhpZXV0aGFjaXJjbGVrb3JlYW4gPSAweDMyNzk7XG4gdC50aGlldXRoYXBhcmVua29yZWFuID0gMHgzMjE5O1xuIHQudGhpZXV0aGNpcmNsZWtvcmVhbiA9IDB4MzI2YjtcbiB0LnRoaWV1dGhrb3JlYW4gPSAweDMxNGM7XG4gdC50aGlldXRocGFyZW5rb3JlYW4gPSAweDMyMGI7XG4gdC50aGlydGVlbmNpcmNsZSA9IDB4MjQ2YztcbiB0LnRoaXJ0ZWVucGFyZW4gPSAweDI0ODA7XG4gdC50aGlydGVlbnBlcmlvZCA9IDB4MjQ5NDtcbiB0LnRob25hbmdtb250aG90aGFpID0gMHgwZTExO1xuIHQudGhvb2sgPSAweDAxYWQ7XG4gdC50aG9waHV0aGFvdGhhaSA9IDB4MGUxMjtcbiB0LnRob3JuID0gMHgwMGZlO1xuIHQudGhvdGhhaGFudGhhaSA9IDB4MGUxNztcbiB0LnRob3RoYW50aGFpID0gMHgwZTEwO1xuIHQudGhvdGhvbmd0aGFpID0gMHgwZTE4O1xuIHQudGhvdGh1bmd0aGFpID0gMHgwZTE2O1xuIHQudGhvdXNhbmRjeXJpbGxpYyA9IDB4MDQ4MjtcbiB0LnRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYyA9IDB4MDY2YztcbiB0LnRob3VzYW5kc3NlcGFyYXRvcnBlcnNpYW4gPSAweDA2NmM7XG4gdC50aHJlZSA9IDB4MDAzMztcbiB0LnRocmVlYXJhYmljID0gMHgwNjYzO1xuIHQudGhyZWViZW5nYWxpID0gMHgwOWU5O1xuIHQudGhyZWVjaXJjbGUgPSAweDI0NjI7XG4gdC50aHJlZWNpcmNsZWludmVyc2VzYW5zc2VyaWYgPSAweDI3OGM7XG4gdC50aHJlZWRldmEgPSAweDA5Njk7XG4gdC50aHJlZWVpZ2h0aHMgPSAweDIxNWM7XG4gdC50aHJlZWd1amFyYXRpID0gMHgwYWU5O1xuIHQudGhyZWVndXJtdWtoaSA9IDB4MGE2OTtcbiB0LnRocmVlaGFja2FyYWJpYyA9IDB4MDY2MztcbiB0LnRocmVlaGFuZ3pob3UgPSAweDMwMjM7XG4gdC50aHJlZWlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjI7XG4gdC50aHJlZWluZmVyaW9yID0gMHgyMDgzO1xuIHQudGhyZWVtb25vc3BhY2UgPSAweGZmMTM7XG4gdC50aHJlZW51bWVyYXRvcmJlbmdhbGkgPSAweDA5ZjY7XG4gdC50aHJlZW9sZHN0eWxlID0gMHhmNzMzO1xuIHQudGhyZWVwYXJlbiA9IDB4MjQ3NjtcbiB0LnRocmVlcGVyaW9kID0gMHgyNDhhO1xuIHQudGhyZWVwZXJzaWFuID0gMHgwNmYzO1xuIHQudGhyZWVxdWFydGVycyA9IDB4MDBiZTtcbiB0LnRocmVlcXVhcnRlcnNlbWRhc2ggPSAweGY2ZGU7XG4gdC50aHJlZXJvbWFuID0gMHgyMTcyO1xuIHQudGhyZWVzdXBlcmlvciA9IDB4MDBiMztcbiB0LnRocmVldGhhaSA9IDB4MGU1MztcbiB0LnRoenNxdWFyZSA9IDB4MzM5NDtcbiB0LnRpaGlyYWdhbmEgPSAweDMwNjE7XG4gdC50aWthdGFrYW5hID0gMHgzMGMxO1xuIHQudGlrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4MTtcbiB0LnRpa2V1dGFjaXJjbGVrb3JlYW4gPSAweDMyNzA7XG4gdC50aWtldXRhcGFyZW5rb3JlYW4gPSAweDMyMTA7XG4gdC50aWtldXRjaXJjbGVrb3JlYW4gPSAweDMyNjI7XG4gdC50aWtldXRrb3JlYW4gPSAweDMxMzc7XG4gdC50aWtldXRwYXJlbmtvcmVhbiA9IDB4MzIwMjtcbiB0LnRpbGRlID0gMHgwMmRjO1xuIHQudGlsZGViZWxvd2NtYiA9IDB4MDMzMDtcbiB0LnRpbGRlY21iID0gMHgwMzAzO1xuIHQudGlsZGVjb21iID0gMHgwMzAzO1xuIHQudGlsZGVkb3VibGVjbWIgPSAweDAzNjA7XG4gdC50aWxkZW9wZXJhdG9yID0gMHgyMjNjO1xuIHQudGlsZGVvdmVybGF5Y21iID0gMHgwMzM0O1xuIHQudGlsZGV2ZXJ0aWNhbGNtYiA9IDB4MDMzZTtcbiB0LnRpbWVzY2lyY2xlID0gMHgyMjk3O1xuIHQudGlwZWhhaGVicmV3ID0gMHgwNTk2O1xuIHQudGlwZWhhbGVmdGhlYnJldyA9IDB4MDU5NjtcbiB0LnRpcHBpZ3VybXVraGkgPSAweDBhNzA7XG4gdC50aXRsb2N5cmlsbGljY21iID0gMHgwNDgzO1xuIHQudGl3bmFybWVuaWFuID0gMHgwNTdmO1xuIHQudGxpbmViZWxvdyA9IDB4MWU2ZjtcbiB0LnRtb25vc3BhY2UgPSAweGZmNTQ7XG4gdC50b2FybWVuaWFuID0gMHgwNTY5O1xuIHQudG9oaXJhZ2FuYSA9IDB4MzA2ODtcbiB0LnRva2F0YWthbmEgPSAweDMwYzg7XG4gdC50b2thdGFrYW5haGFsZndpZHRoID0gMHhmZjg0O1xuIHQudG9uZWJhcmV4dHJhaGlnaG1vZCA9IDB4MDJlNTtcbiB0LnRvbmViYXJleHRyYWxvd21vZCA9IDB4MDJlOTtcbiB0LnRvbmViYXJoaWdobW9kID0gMHgwMmU2O1xuIHQudG9uZWJhcmxvd21vZCA9IDB4MDJlODtcbiB0LnRvbmViYXJtaWRtb2QgPSAweDAyZTc7XG4gdC50b25lZml2ZSA9IDB4MDFiZDtcbiB0LnRvbmVzaXggPSAweDAxODU7XG4gdC50b25ldHdvID0gMHgwMWE4O1xuIHQudG9ub3MgPSAweDAzODQ7XG4gdC50b25zcXVhcmUgPSAweDMzMjc7XG4gdC50b3BhdGFrdGhhaSA9IDB4MGUwZjtcbiB0LnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCA9IDB4MzAxNDtcbiB0LnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsID0gMHhmZTVkO1xuIHQudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwgPSAweGZlMzk7XG4gdC50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0ID0gMHgzMDE1O1xuIHQudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsID0gMHhmZTVlO1xuIHQudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsID0gMHhmZTNhO1xuIHQudG90YW90aGFpID0gMHgwZTE1O1xuIHQudHBhbGF0YWxob29rID0gMHgwMWFiO1xuIHQudHBhcmVuID0gMHgyNGFmO1xuIHQudHJhZGVtYXJrID0gMHgyMTIyO1xuIHQudHJhZGVtYXJrc2FucyA9IDB4ZjhlYTtcbiB0LnRyYWRlbWFya3NlcmlmID0gMHhmNmRiO1xuIHQudHJldHJvZmxleGhvb2sgPSAweDAyODg7XG4gdC50cmlhZ2RuID0gMHgyNWJjO1xuIHQudHJpYWdsZiA9IDB4MjVjNDtcbiB0LnRyaWFncnQgPSAweDI1YmE7XG4gdC50cmlhZ3VwID0gMHgyNWIyO1xuIHQudHMgPSAweDAyYTY7XG4gdC50c2FkaSA9IDB4MDVlNjtcbiB0LnRzYWRpZGFnZXNoID0gMHhmYjQ2O1xuIHQudHNhZGlkYWdlc2hoZWJyZXcgPSAweGZiNDY7XG4gdC50c2FkaWhlYnJldyA9IDB4MDVlNjtcbiB0LnRzZWN5cmlsbGljID0gMHgwNDQ2O1xuIHQudHNlcmUgPSAweDA1YjU7XG4gdC50c2VyZTEyID0gMHgwNWI1O1xuIHQudHNlcmUxZSA9IDB4MDViNTtcbiB0LnRzZXJlMmIgPSAweDA1YjU7XG4gdC50c2VyZWhlYnJldyA9IDB4MDViNTtcbiB0LnRzZXJlbmFycm93aGVicmV3ID0gMHgwNWI1O1xuIHQudHNlcmVxdWFydGVyaGVicmV3ID0gMHgwNWI1O1xuIHQudHNlcmV3aWRlaGVicmV3ID0gMHgwNWI1O1xuIHQudHNoZWN5cmlsbGljID0gMHgwNDViO1xuIHQudHN1cGVyaW9yID0gMHhmNmYzO1xuIHQudHRhYmVuZ2FsaSA9IDB4MDk5ZjtcbiB0LnR0YWRldmEgPSAweDA5MWY7XG4gdC50dGFndWphcmF0aSA9IDB4MGE5ZjtcbiB0LnR0YWd1cm11a2hpID0gMHgwYTFmO1xuIHQudHRlaGFyYWJpYyA9IDB4MDY3OTtcbiB0LnR0ZWhmaW5hbGFyYWJpYyA9IDB4ZmI2NztcbiB0LnR0ZWhpbml0aWFsYXJhYmljID0gMHhmYjY4O1xuIHQudHRlaG1lZGlhbGFyYWJpYyA9IDB4ZmI2OTtcbiB0LnR0aGFiZW5nYWxpID0gMHgwOWEwO1xuIHQudHRoYWRldmEgPSAweDA5MjA7XG4gdC50dGhhZ3VqYXJhdGkgPSAweDBhYTA7XG4gdC50dGhhZ3VybXVraGkgPSAweDBhMjA7XG4gdC50dHVybmVkID0gMHgwMjg3O1xuIHQudHVoaXJhZ2FuYSA9IDB4MzA2NDtcbiB0LnR1a2F0YWthbmEgPSAweDMwYzQ7XG4gdC50dWthdGFrYW5haGFsZndpZHRoID0gMHhmZjgyO1xuIHQudHVzbWFsbGhpcmFnYW5hID0gMHgzMDYzO1xuIHQudHVzbWFsbGthdGFrYW5hID0gMHgzMGMzO1xuIHQudHVzbWFsbGthdGFrYW5haGFsZndpZHRoID0gMHhmZjZmO1xuIHQudHdlbHZlY2lyY2xlID0gMHgyNDZiO1xuIHQudHdlbHZlcGFyZW4gPSAweDI0N2Y7XG4gdC50d2VsdmVwZXJpb2QgPSAweDI0OTM7XG4gdC50d2VsdmVyb21hbiA9IDB4MjE3YjtcbiB0LnR3ZW50eWNpcmNsZSA9IDB4MjQ3MztcbiB0LnR3ZW50eWhhbmd6aG91ID0gMHg1MzQ0O1xuIHQudHdlbnR5cGFyZW4gPSAweDI0ODc7XG4gdC50d2VudHlwZXJpb2QgPSAweDI0OWI7XG4gdC50d28gPSAweDAwMzI7XG4gdC50d29hcmFiaWMgPSAweDA2NjI7XG4gdC50d29iZW5nYWxpID0gMHgwOWU4O1xuIHQudHdvY2lyY2xlID0gMHgyNDYxO1xuIHQudHdvY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiA9IDB4Mjc4YjtcbiB0LnR3b2RldmEgPSAweDA5Njg7XG4gdC50d29kb3RlbmxlYWRlciA9IDB4MjAyNTtcbiB0LnR3b2RvdGxlYWRlciA9IDB4MjAyNTtcbiB0LnR3b2RvdGxlYWRlcnZlcnRpY2FsID0gMHhmZTMwO1xuIHQudHdvZ3VqYXJhdGkgPSAweDBhZTg7XG4gdC50d29ndXJtdWtoaSA9IDB4MGE2ODtcbiB0LnR3b2hhY2thcmFiaWMgPSAweDA2NjI7XG4gdC50d29oYW5nemhvdSA9IDB4MzAyMjtcbiB0LnR3b2lkZW9ncmFwaGljcGFyZW4gPSAweDMyMjE7XG4gdC50d29pbmZlcmlvciA9IDB4MjA4MjtcbiB0LnR3b21vbm9zcGFjZSA9IDB4ZmYxMjtcbiB0LnR3b251bWVyYXRvcmJlbmdhbGkgPSAweDA5ZjU7XG4gdC50d29vbGRzdHlsZSA9IDB4ZjczMjtcbiB0LnR3b3BhcmVuID0gMHgyNDc1O1xuIHQudHdvcGVyaW9kID0gMHgyNDg5O1xuIHQudHdvcGVyc2lhbiA9IDB4MDZmMjtcbiB0LnR3b3JvbWFuID0gMHgyMTcxO1xuIHQudHdvc3Ryb2tlID0gMHgwMWJiO1xuIHQudHdvc3VwZXJpb3IgPSAweDAwYjI7XG4gdC50d290aGFpID0gMHgwZTUyO1xuIHQudHdvdGhpcmRzID0gMHgyMTU0O1xuIHQudSA9IDB4MDA3NTtcbiB0LnVhY3V0ZSA9IDB4MDBmYTtcbiB0LnViYXIgPSAweDAyODk7XG4gdC51YmVuZ2FsaSA9IDB4MDk4OTtcbiB0LnVib3BvbW9mbyA9IDB4MzEyODtcbiB0LnVicmV2ZSA9IDB4MDE2ZDtcbiB0LnVjYXJvbiA9IDB4MDFkNDtcbiB0LnVjaXJjbGUgPSAweDI0ZTQ7XG4gdC51Y2lyY3VtZmxleCA9IDB4MDBmYjtcbiB0LnVjaXJjdW1mbGV4YmVsb3cgPSAweDFlNzc7XG4gdC51Y3lyaWxsaWMgPSAweDA0NDM7XG4gdC51ZGF0dGFkZXZhID0gMHgwOTUxO1xuIHQudWRibGFjdXRlID0gMHgwMTcxO1xuIHQudWRibGdyYXZlID0gMHgwMjE1O1xuIHQudWRldmEgPSAweDA5MDk7XG4gdC51ZGllcmVzaXMgPSAweDAwZmM7XG4gdC51ZGllcmVzaXNhY3V0ZSA9IDB4MDFkODtcbiB0LnVkaWVyZXNpc2JlbG93ID0gMHgxZTczO1xuIHQudWRpZXJlc2lzY2Fyb24gPSAweDAxZGE7XG4gdC51ZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRmMTtcbiB0LnVkaWVyZXNpc2dyYXZlID0gMHgwMWRjO1xuIHQudWRpZXJlc2lzbWFjcm9uID0gMHgwMWQ2O1xuIHQudWRvdGJlbG93ID0gMHgxZWU1O1xuIHQudWdyYXZlID0gMHgwMGY5O1xuIHQudWd1amFyYXRpID0gMHgwYTg5O1xuIHQudWd1cm11a2hpID0gMHgwYTA5O1xuIHQudWhpcmFnYW5hID0gMHgzMDQ2O1xuIHQudWhvb2thYm92ZSA9IDB4MWVlNztcbiB0LnVob3JuID0gMHgwMWIwO1xuIHQudWhvcm5hY3V0ZSA9IDB4MWVlOTtcbiB0LnVob3JuZG90YmVsb3cgPSAweDFlZjE7XG4gdC51aG9ybmdyYXZlID0gMHgxZWViO1xuIHQudWhvcm5ob29rYWJvdmUgPSAweDFlZWQ7XG4gdC51aG9ybnRpbGRlID0gMHgxZWVmO1xuIHQudWh1bmdhcnVtbGF1dCA9IDB4MDE3MTtcbiB0LnVodW5nYXJ1bWxhdXRjeXJpbGxpYyA9IDB4MDRmMztcbiB0LnVpbnZlcnRlZGJyZXZlID0gMHgwMjE3O1xuIHQudWthdGFrYW5hID0gMHgzMGE2O1xuIHQudWthdGFrYW5haGFsZndpZHRoID0gMHhmZjczO1xuIHQudWtjeXJpbGxpYyA9IDB4MDQ3OTtcbiB0LnVrb3JlYW4gPSAweDMxNWM7XG4gdC51bWFjcm9uID0gMHgwMTZiO1xuIHQudW1hY3JvbmN5cmlsbGljID0gMHgwNGVmO1xuIHQudW1hY3JvbmRpZXJlc2lzID0gMHgxZTdiO1xuIHQudW1hdHJhZ3VybXVraGkgPSAweDBhNDE7XG4gdC51bW9ub3NwYWNlID0gMHhmZjU1O1xuIHQudW5kZXJzY29yZSA9IDB4MDA1ZjtcbiB0LnVuZGVyc2NvcmVkYmwgPSAweDIwMTc7XG4gdC51bmRlcnNjb3JlbW9ub3NwYWNlID0gMHhmZjNmO1xuIHQudW5kZXJzY29yZXZlcnRpY2FsID0gMHhmZTMzO1xuIHQudW5kZXJzY29yZXdhdnkgPSAweGZlNGY7XG4gdC51bmlvbiA9IDB4MjIyYTtcbiB0LnVuaXZlcnNhbCA9IDB4MjIwMDtcbiB0LnVvZ29uZWsgPSAweDAxNzM7XG4gdC51cGFyZW4gPSAweDI0YjA7XG4gdC51cGJsb2NrID0gMHgyNTgwO1xuIHQudXBwZXJkb3RoZWJyZXcgPSAweDA1YzQ7XG4gdC51cHNpbG9uID0gMHgwM2M1O1xuIHQudXBzaWxvbmRpZXJlc2lzID0gMHgwM2NiO1xuIHQudXBzaWxvbmRpZXJlc2lzdG9ub3MgPSAweDAzYjA7XG4gdC51cHNpbG9ubGF0aW4gPSAweDAyOGE7XG4gdC51cHNpbG9udG9ub3MgPSAweDAzY2Q7XG4gdC51cHRhY2tiZWxvd2NtYiA9IDB4MDMxZDtcbiB0LnVwdGFja21vZCA9IDB4MDJkNDtcbiB0LnVyYWd1cm11a2hpID0gMHgwYTczO1xuIHQudXJpbmcgPSAweDAxNmY7XG4gdC51c2hvcnRjeXJpbGxpYyA9IDB4MDQ1ZTtcbiB0LnVzbWFsbGhpcmFnYW5hID0gMHgzMDQ1O1xuIHQudXNtYWxsa2F0YWthbmEgPSAweDMwYTU7XG4gdC51c21hbGxrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2OTtcbiB0LnVzdHJhaWdodGN5cmlsbGljID0gMHgwNGFmO1xuIHQudXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMgPSAweDA0YjE7XG4gdC51dGlsZGUgPSAweDAxNjk7XG4gdC51dGlsZGVhY3V0ZSA9IDB4MWU3OTtcbiB0LnV0aWxkZWJlbG93ID0gMHgxZTc1O1xuIHQudXViZW5nYWxpID0gMHgwOThhO1xuIHQudXVkZXZhID0gMHgwOTBhO1xuIHQudXVndWphcmF0aSA9IDB4MGE4YTtcbiB0LnV1Z3VybXVraGkgPSAweDBhMGE7XG4gdC51dW1hdHJhZ3VybXVraGkgPSAweDBhNDI7XG4gdC51dXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5YzI7XG4gdC51dXZvd2Vsc2lnbmRldmEgPSAweDA5NDI7XG4gdC51dXZvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWMyO1xuIHQudXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5YzE7XG4gdC51dm93ZWxzaWduZGV2YSA9IDB4MDk0MTtcbiB0LnV2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjMTtcbiB0LnYgPSAweDAwNzY7XG4gdC52YWRldmEgPSAweDA5MzU7XG4gdC52YWd1amFyYXRpID0gMHgwYWI1O1xuIHQudmFndXJtdWtoaSA9IDB4MGEzNTtcbiB0LnZha2F0YWthbmEgPSAweDMwZjc7XG4gdC52YXYgPSAweDA1ZDU7XG4gdC52YXZkYWdlc2ggPSAweGZiMzU7XG4gdC52YXZkYWdlc2g2NSA9IDB4ZmIzNTtcbiB0LnZhdmRhZ2VzaGhlYnJldyA9IDB4ZmIzNTtcbiB0LnZhdmhlYnJldyA9IDB4MDVkNTtcbiB0LnZhdmhvbGFtID0gMHhmYjRiO1xuIHQudmF2aG9sYW1oZWJyZXcgPSAweGZiNGI7XG4gdC52YXZ2YXZoZWJyZXcgPSAweDA1ZjA7XG4gdC52YXZ5b2RoZWJyZXcgPSAweDA1ZjE7XG4gdC52Y2lyY2xlID0gMHgyNGU1O1xuIHQudmRvdGJlbG93ID0gMHgxZTdmO1xuIHQudmVjeXJpbGxpYyA9IDB4MDQzMjtcbiB0LnZlaGFyYWJpYyA9IDB4MDZhNDtcbiB0LnZlaGZpbmFsYXJhYmljID0gMHhmYjZiO1xuIHQudmVoaW5pdGlhbGFyYWJpYyA9IDB4ZmI2YztcbiB0LnZlaG1lZGlhbGFyYWJpYyA9IDB4ZmI2ZDtcbiB0LnZla2F0YWthbmEgPSAweDMwZjk7XG4gdC52ZW51cyA9IDB4MjY0MDtcbiB0LnZlcnRpY2FsYmFyID0gMHgwMDdjO1xuIHQudmVydGljYWxsaW5lYWJvdmVjbWIgPSAweDAzMGQ7XG4gdC52ZXJ0aWNhbGxpbmViZWxvd2NtYiA9IDB4MDMyOTtcbiB0LnZlcnRpY2FsbGluZWxvd21vZCA9IDB4MDJjYztcbiB0LnZlcnRpY2FsbGluZW1vZCA9IDB4MDJjODtcbiB0LnZld2FybWVuaWFuID0gMHgwNTdlO1xuIHQudmhvb2sgPSAweDAyOGI7XG4gdC52aWthdGFrYW5hID0gMHgzMGY4O1xuIHQudmlyYW1hYmVuZ2FsaSA9IDB4MDljZDtcbiB0LnZpcmFtYWRldmEgPSAweDA5NGQ7XG4gdC52aXJhbWFndWphcmF0aSA9IDB4MGFjZDtcbiB0LnZpc2FyZ2FiZW5nYWxpID0gMHgwOTgzO1xuIHQudmlzYXJnYWRldmEgPSAweDA5MDM7XG4gdC52aXNhcmdhZ3VqYXJhdGkgPSAweDBhODM7XG4gdC52bW9ub3NwYWNlID0gMHhmZjU2O1xuIHQudm9hcm1lbmlhbiA9IDB4MDU3ODtcbiB0LnZvaWNlZGl0ZXJhdGlvbmhpcmFnYW5hID0gMHgzMDllO1xuIHQudm9pY2VkaXRlcmF0aW9ua2F0YWthbmEgPSAweDMwZmU7XG4gdC52b2ljZWRtYXJra2FuYSA9IDB4MzA5YjtcbiB0LnZvaWNlZG1hcmtrYW5haGFsZndpZHRoID0gMHhmZjllO1xuIHQudm9rYXRha2FuYSA9IDB4MzBmYTtcbiB0LnZwYXJlbiA9IDB4MjRiMTtcbiB0LnZ0aWxkZSA9IDB4MWU3ZDtcbiB0LnZ0dXJuZWQgPSAweDAyOGM7XG4gdC52dWhpcmFnYW5hID0gMHgzMDk0O1xuIHQudnVrYXRha2FuYSA9IDB4MzBmNDtcbiB0LncgPSAweDAwNzc7XG4gdC53YWN1dGUgPSAweDFlODM7XG4gdC53YWVrb3JlYW4gPSAweDMxNTk7XG4gdC53YWhpcmFnYW5hID0gMHgzMDhmO1xuIHQud2FrYXRha2FuYSA9IDB4MzBlZjtcbiB0Lndha2F0YWthbmFoYWxmd2lkdGggPSAweGZmOWM7XG4gdC53YWtvcmVhbiA9IDB4MzE1ODtcbiB0Lndhc21hbGxoaXJhZ2FuYSA9IDB4MzA4ZTtcbiB0Lndhc21hbGxrYXRha2FuYSA9IDB4MzBlZTtcbiB0LndhdHRvc3F1YXJlID0gMHgzMzU3O1xuIHQud2F2ZWRhc2ggPSAweDMwMWM7XG4gdC53YXZ5dW5kZXJzY29yZXZlcnRpY2FsID0gMHhmZTM0O1xuIHQud2F3YXJhYmljID0gMHgwNjQ4O1xuIHQud2F3ZmluYWxhcmFiaWMgPSAweGZlZWU7XG4gdC53YXdoYW16YWFib3ZlYXJhYmljID0gMHgwNjI0O1xuIHQud2F3aGFtemFhYm92ZWZpbmFsYXJhYmljID0gMHhmZTg2O1xuIHQud2JzcXVhcmUgPSAweDMzZGQ7XG4gdC53Y2lyY2xlID0gMHgyNGU2O1xuIHQud2NpcmN1bWZsZXggPSAweDAxNzU7XG4gdC53ZGllcmVzaXMgPSAweDFlODU7XG4gdC53ZG90YWNjZW50ID0gMHgxZTg3O1xuIHQud2RvdGJlbG93ID0gMHgxZTg5O1xuIHQud2VoaXJhZ2FuYSA9IDB4MzA5MTtcbiB0LndlaWVyc3RyYXNzID0gMHgyMTE4O1xuIHQud2VrYXRha2FuYSA9IDB4MzBmMTtcbiB0Lndla29yZWFuID0gMHgzMTVlO1xuIHQud2Vva29yZWFuID0gMHgzMTVkO1xuIHQud2dyYXZlID0gMHgxZTgxO1xuIHQud2hpdGVidWxsZXQgPSAweDI1ZTY7XG4gdC53aGl0ZWNpcmNsZSA9IDB4MjVjYjtcbiB0LndoaXRlY2lyY2xlaW52ZXJzZSA9IDB4MjVkOTtcbiB0LndoaXRlY29ybmVyYnJhY2tldGxlZnQgPSAweDMwMGU7XG4gdC53aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWwgPSAweGZlNDM7XG4gdC53aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCA9IDB4MzAwZjtcbiB0LndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwgPSAweGZlNDQ7XG4gdC53aGl0ZWRpYW1vbmQgPSAweDI1Yzc7XG4gdC53aGl0ZWRpYW1vbmRjb250YWluaW5nYmxhY2tzbWFsbGRpYW1vbmQgPSAweDI1Yzg7XG4gdC53aGl0ZWRvd25wb2ludGluZ3NtYWxsdHJpYW5nbGUgPSAweDI1YmY7XG4gdC53aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlID0gMHgyNWJkO1xuIHQud2hpdGVsZWZ0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlID0gMHgyNWMzO1xuIHQud2hpdGVsZWZ0cG9pbnRpbmd0cmlhbmdsZSA9IDB4MjVjMTtcbiB0LndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0ID0gMHgzMDE2O1xuIHQud2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0ID0gMHgzMDE3O1xuIHQud2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZSA9IDB4MjViOTtcbiB0LndoaXRlcmlnaHRwb2ludGluZ3RyaWFuZ2xlID0gMHgyNWI3O1xuIHQud2hpdGVzbWFsbHNxdWFyZSA9IDB4MjVhYjtcbiB0LndoaXRlc21pbGluZ2ZhY2UgPSAweDI2M2E7XG4gdC53aGl0ZXNxdWFyZSA9IDB4MjVhMTtcbiB0LndoaXRlc3RhciA9IDB4MjYwNjtcbiB0LndoaXRldGVsZXBob25lID0gMHgyNjBmO1xuIHQud2hpdGV0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnQgPSAweDMwMTg7XG4gdC53aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQgPSAweDMwMTk7XG4gdC53aGl0ZXVwcG9pbnRpbmdzbWFsbHRyaWFuZ2xlID0gMHgyNWI1O1xuIHQud2hpdGV1cHBvaW50aW5ndHJpYW5nbGUgPSAweDI1YjM7XG4gdC53aWhpcmFnYW5hID0gMHgzMDkwO1xuIHQud2lrYXRha2FuYSA9IDB4MzBmMDtcbiB0Lndpa29yZWFuID0gMHgzMTVmO1xuIHQud21vbm9zcGFjZSA9IDB4ZmY1NztcbiB0LndvaGlyYWdhbmEgPSAweDMwOTI7XG4gdC53b2thdGFrYW5hID0gMHgzMGYyO1xuIHQud29rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2NjtcbiB0LndvbiA9IDB4MjBhOTtcbiB0Lndvbm1vbm9zcGFjZSA9IDB4ZmZlNjtcbiB0Lndvd2FlbnRoYWkgPSAweDBlMjc7XG4gdC53cGFyZW4gPSAweDI0YjI7XG4gdC53cmluZyA9IDB4MWU5ODtcbiB0LndzdXBlcmlvciA9IDB4MDJiNztcbiB0Lnd0dXJuZWQgPSAweDAyOGQ7XG4gdC53eW5uID0gMHgwMWJmO1xuIHQueCA9IDB4MDA3ODtcbiB0LnhhYm92ZWNtYiA9IDB4MDMzZDtcbiB0Lnhib3BvbW9mbyA9IDB4MzExMjtcbiB0LnhjaXJjbGUgPSAweDI0ZTc7XG4gdC54ZGllcmVzaXMgPSAweDFlOGQ7XG4gdC54ZG90YWNjZW50ID0gMHgxZThiO1xuIHQueGVoYXJtZW5pYW4gPSAweDA1NmQ7XG4gdC54aSA9IDB4MDNiZTtcbiB0Lnhtb25vc3BhY2UgPSAweGZmNTg7XG4gdC54cGFyZW4gPSAweDI0YjM7XG4gdC54c3VwZXJpb3IgPSAweDAyZTM7XG4gdC55ID0gMHgwMDc5O1xuIHQueWFhZG9zcXVhcmUgPSAweDMzNGU7XG4gdC55YWJlbmdhbGkgPSAweDA5YWY7XG4gdC55YWN1dGUgPSAweDAwZmQ7XG4gdC55YWRldmEgPSAweDA5MmY7XG4gdC55YWVrb3JlYW4gPSAweDMxNTI7XG4gdC55YWd1amFyYXRpID0gMHgwYWFmO1xuIHQueWFndXJtdWtoaSA9IDB4MGEyZjtcbiB0LnlhaGlyYWdhbmEgPSAweDMwODQ7XG4gdC55YWthdGFrYW5hID0gMHgzMGU0O1xuIHQueWFrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5NDtcbiB0Lnlha29yZWFuID0gMHgzMTUxO1xuIHQueWFtYWtrYW50aGFpID0gMHgwZTRlO1xuIHQueWFzbWFsbGhpcmFnYW5hID0gMHgzMDgzO1xuIHQueWFzbWFsbGthdGFrYW5hID0gMHgzMGUzO1xuIHQueWFzbWFsbGthdGFrYW5haGFsZndpZHRoID0gMHhmZjZjO1xuIHQueWF0Y3lyaWxsaWMgPSAweDA0NjM7XG4gdC55Y2lyY2xlID0gMHgyNGU4O1xuIHQueWNpcmN1bWZsZXggPSAweDAxNzc7XG4gdC55ZGllcmVzaXMgPSAweDAwZmY7XG4gdC55ZG90YWNjZW50ID0gMHgxZThmO1xuIHQueWRvdGJlbG93ID0gMHgxZWY1O1xuIHQueWVoYXJhYmljID0gMHgwNjRhO1xuIHQueWVoYmFycmVlYXJhYmljID0gMHgwNmQyO1xuIHQueWVoYmFycmVlZmluYWxhcmFiaWMgPSAweGZiYWY7XG4gdC55ZWhmaW5hbGFyYWJpYyA9IDB4ZmVmMjtcbiB0LnllaGhhbXphYWJvdmVhcmFiaWMgPSAweDA2MjY7XG4gdC55ZWhoYW16YWFib3ZlZmluYWxhcmFiaWMgPSAweGZlOGE7XG4gdC55ZWhoYW16YWFib3ZlaW5pdGlhbGFyYWJpYyA9IDB4ZmU4YjtcbiB0LnllaGhhbXphYWJvdmVtZWRpYWxhcmFiaWMgPSAweGZlOGM7XG4gdC55ZWhpbml0aWFsYXJhYmljID0gMHhmZWYzO1xuIHQueWVobWVkaWFsYXJhYmljID0gMHhmZWY0O1xuIHQueWVobWVlbWluaXRpYWxhcmFiaWMgPSAweGZjZGQ7XG4gdC55ZWhtZWVtaXNvbGF0ZWRhcmFiaWMgPSAweGZjNTg7XG4gdC55ZWhub29uZmluYWxhcmFiaWMgPSAweGZjOTQ7XG4gdC55ZWh0aHJlZWRvdHNiZWxvd2FyYWJpYyA9IDB4MDZkMTtcbiB0Lnlla29yZWFuID0gMHgzMTU2O1xuIHQueWVuID0gMHgwMGE1O1xuIHQueWVubW9ub3NwYWNlID0gMHhmZmU1O1xuIHQueWVva29yZWFuID0gMHgzMTU1O1xuIHQueWVvcmluaGlldWhrb3JlYW4gPSAweDMxODY7XG4gdC55ZXJhaGJlbnlvbW9oZWJyZXcgPSAweDA1YWE7XG4gdC55ZXJhaGJlbnlvbW9sZWZ0aGVicmV3ID0gMHgwNWFhO1xuIHQueWVyaWN5cmlsbGljID0gMHgwNDRiO1xuIHQueWVydWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0Zjk7XG4gdC55ZXNpZXVuZ2tvcmVhbiA9IDB4MzE4MTtcbiB0Lnllc2lldW5ncGFuc2lvc2tvcmVhbiA9IDB4MzE4MztcbiB0Lnllc2lldW5nc2lvc2tvcmVhbiA9IDB4MzE4MjtcbiB0LnlldGl2aGVicmV3ID0gMHgwNTlhO1xuIHQueWdyYXZlID0gMHgxZWYzO1xuIHQueWhvb2sgPSAweDAxYjQ7XG4gdC55aG9va2Fib3ZlID0gMHgxZWY3O1xuIHQueWlhcm1lbmlhbiA9IDB4MDU3NTtcbiB0LnlpY3lyaWxsaWMgPSAweDA0NTc7XG4gdC55aWtvcmVhbiA9IDB4MzE2MjtcbiB0LnlpbnlhbmcgPSAweDI2MmY7XG4gdC55aXduYXJtZW5pYW4gPSAweDA1ODI7XG4gdC55bW9ub3NwYWNlID0gMHhmZjU5O1xuIHQueW9kID0gMHgwNWQ5O1xuIHQueW9kZGFnZXNoID0gMHhmYjM5O1xuIHQueW9kZGFnZXNoaGVicmV3ID0gMHhmYjM5O1xuIHQueW9kaGVicmV3ID0gMHgwNWQ5O1xuIHQueW9keW9kaGVicmV3ID0gMHgwNWYyO1xuIHQueW9keW9kcGF0YWhoZWJyZXcgPSAweGZiMWY7XG4gdC55b2hpcmFnYW5hID0gMHgzMDg4O1xuIHQueW9pa29yZWFuID0gMHgzMTg5O1xuIHQueW9rYXRha2FuYSA9IDB4MzBlODtcbiB0Lnlva2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTY7XG4gdC55b2tvcmVhbiA9IDB4MzE1YjtcbiB0Lnlvc21hbGxoaXJhZ2FuYSA9IDB4MzA4NztcbiB0Lnlvc21hbGxrYXRha2FuYSA9IDB4MzBlNztcbiB0Lnlvc21hbGxrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2ZTtcbiB0LnlvdGdyZWVrID0gMHgwM2YzO1xuIHQueW95YWVrb3JlYW4gPSAweDMxODg7XG4gdC55b3lha29yZWFuID0gMHgzMTg3O1xuIHQueW95YWt0aGFpID0gMHgwZTIyO1xuIHQueW95aW5ndGhhaSA9IDB4MGUwZDtcbiB0LnlwYXJlbiA9IDB4MjRiNDtcbiB0Lnlwb2dlZ3JhbW1lbmkgPSAweDAzN2E7XG4gdC55cG9nZWdyYW1tZW5pZ3JlZWtjbWIgPSAweDAzNDU7XG4gdC55ciA9IDB4MDFhNjtcbiB0LnlyaW5nID0gMHgxZTk5O1xuIHQueXN1cGVyaW9yID0gMHgwMmI4O1xuIHQueXRpbGRlID0gMHgxZWY5O1xuIHQueXR1cm5lZCA9IDB4MDI4ZTtcbiB0Lnl1aGlyYWdhbmEgPSAweDMwODY7XG4gdC55dWlrb3JlYW4gPSAweDMxOGM7XG4gdC55dWthdGFrYW5hID0gMHgzMGU2O1xuIHQueXVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5NTtcbiB0Lnl1a29yZWFuID0gMHgzMTYwO1xuIHQueXVzYmlnY3lyaWxsaWMgPSAweDA0NmI7XG4gdC55dXNiaWdpb3RpZmllZGN5cmlsbGljID0gMHgwNDZkO1xuIHQueXVzbGl0dGxlY3lyaWxsaWMgPSAweDA0Njc7XG4gdC55dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljID0gMHgwNDY5O1xuIHQueXVzbWFsbGhpcmFnYW5hID0gMHgzMDg1O1xuIHQueXVzbWFsbGthdGFrYW5hID0gMHgzMGU1O1xuIHQueXVzbWFsbGthdGFrYW5haGFsZndpZHRoID0gMHhmZjZkO1xuIHQueXV5ZWtvcmVhbiA9IDB4MzE4YjtcbiB0Lnl1eWVva29yZWFuID0gMHgzMThhO1xuIHQueXlhYmVuZ2FsaSA9IDB4MDlkZjtcbiB0Lnl5YWRldmEgPSAweDA5NWY7XG4gdC56ID0gMHgwMDdhO1xuIHQuemFhcm1lbmlhbiA9IDB4MDU2NjtcbiB0LnphY3V0ZSA9IDB4MDE3YTtcbiB0LnphZGV2YSA9IDB4MDk1YjtcbiB0LnphZ3VybXVraGkgPSAweDBhNWI7XG4gdC56YWhhcmFiaWMgPSAweDA2Mzg7XG4gdC56YWhmaW5hbGFyYWJpYyA9IDB4ZmVjNjtcbiB0LnphaGluaXRpYWxhcmFiaWMgPSAweGZlYzc7XG4gdC56YWhpcmFnYW5hID0gMHgzMDU2O1xuIHQuemFobWVkaWFsYXJhYmljID0gMHhmZWM4O1xuIHQuemFpbmFyYWJpYyA9IDB4MDYzMjtcbiB0LnphaW5maW5hbGFyYWJpYyA9IDB4ZmViMDtcbiB0Lnpha2F0YWthbmEgPSAweDMwYjY7XG4gdC56YXFlZmdhZG9saGVicmV3ID0gMHgwNTk1O1xuIHQuemFxZWZxYXRhbmhlYnJldyA9IDB4MDU5NDtcbiB0LnphcnFhaGVicmV3ID0gMHgwNTk4O1xuIHQuemF5aW4gPSAweDA1ZDY7XG4gdC56YXlpbmRhZ2VzaCA9IDB4ZmIzNjtcbiB0LnpheWluZGFnZXNoaGVicmV3ID0gMHhmYjM2O1xuIHQuemF5aW5oZWJyZXcgPSAweDA1ZDY7XG4gdC56Ym9wb21vZm8gPSAweDMxMTc7XG4gdC56Y2Fyb24gPSAweDAxN2U7XG4gdC56Y2lyY2xlID0gMHgyNGU5O1xuIHQuemNpcmN1bWZsZXggPSAweDFlOTE7XG4gdC56Y3VybCA9IDB4MDI5MTtcbiB0Lnpkb3QgPSAweDAxN2M7XG4gdC56ZG90YWNjZW50ID0gMHgwMTdjO1xuIHQuemRvdGJlbG93ID0gMHgxZTkzO1xuIHQuemVjeXJpbGxpYyA9IDB4MDQzNztcbiB0LnplZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0OTk7XG4gdC56ZWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZGY7XG4gdC56ZWhpcmFnYW5hID0gMHgzMDVjO1xuIHQuemVrYXRha2FuYSA9IDB4MzBiYztcbiB0Lnplcm8gPSAweDAwMzA7XG4gdC56ZXJvYXJhYmljID0gMHgwNjYwO1xuIHQuemVyb2JlbmdhbGkgPSAweDA5ZTY7XG4gdC56ZXJvZGV2YSA9IDB4MDk2NjtcbiB0Lnplcm9ndWphcmF0aSA9IDB4MGFlNjtcbiB0Lnplcm9ndXJtdWtoaSA9IDB4MGE2NjtcbiB0Lnplcm9oYWNrYXJhYmljID0gMHgwNjYwO1xuIHQuemVyb2luZmVyaW9yID0gMHgyMDgwO1xuIHQuemVyb21vbm9zcGFjZSA9IDB4ZmYxMDtcbiB0Lnplcm9vbGRzdHlsZSA9IDB4ZjczMDtcbiB0Lnplcm9wZXJzaWFuID0gMHgwNmYwO1xuIHQuemVyb3N1cGVyaW9yID0gMHgyMDcwO1xuIHQuemVyb3RoYWkgPSAweDBlNTA7XG4gdC56ZXJvd2lkdGhqb2luZXIgPSAweGZlZmY7XG4gdC56ZXJvd2lkdGhub25qb2luZXIgPSAweDIwMGM7XG4gdC56ZXJvd2lkdGhzcGFjZSA9IDB4MjAwYjtcbiB0LnpldGEgPSAweDAzYjY7XG4gdC56aGJvcG9tb2ZvID0gMHgzMTEzO1xuIHQuemhlYXJtZW5pYW4gPSAweDA1NmE7XG4gdC56aGVicmV2ZWN5cmlsbGljID0gMHgwNGMyO1xuIHQuemhlY3lyaWxsaWMgPSAweDA0MzY7XG4gdC56aGVkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDQ5NztcbiB0LnpoZWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZGQ7XG4gdC56aWhpcmFnYW5hID0gMHgzMDU4O1xuIHQuemlrYXRha2FuYSA9IDB4MzBiODtcbiB0Lnppbm9yaGVicmV3ID0gMHgwNWFlO1xuIHQuemxpbmViZWxvdyA9IDB4MWU5NTtcbiB0Lnptb25vc3BhY2UgPSAweGZmNWE7XG4gdC56b2hpcmFnYW5hID0gMHgzMDVlO1xuIHQuem9rYXRha2FuYSA9IDB4MzBiZTtcbiB0LnpwYXJlbiA9IDB4MjRiNTtcbiB0LnpyZXRyb2ZsZXhob29rID0gMHgwMjkwO1xuIHQuenN0cm9rZSA9IDB4MDFiNjtcbiB0Lnp1aGlyYWdhbmEgPSAweDMwNWE7XG4gdC56dWthdGFrYW5hID0gMHgzMGJhO1xuIHRbXCIubm90ZGVmXCJdID0gMHgwMDAwO1xuIHQuYW5nYnJhY2tldGxlZnRiaWcgPSAweDIzMjk7XG4gdC5hbmdicmFja2V0bGVmdEJpZyA9IDB4MjMyOTtcbiB0LmFuZ2JyYWNrZXRsZWZ0YmlnZyA9IDB4MjMyOTtcbiB0LmFuZ2JyYWNrZXRsZWZ0QmlnZyA9IDB4MjMyOTtcbiB0LmFuZ2JyYWNrZXRyaWdodEJpZyA9IDB4MjMyYTtcbiB0LmFuZ2JyYWNrZXRyaWdodGJpZyA9IDB4MjMyYTtcbiB0LmFuZ2JyYWNrZXRyaWdodEJpZ2cgPSAweDIzMmE7XG4gdC5hbmdicmFja2V0cmlnaHRiaWdnID0gMHgyMzJhO1xuIHQuYXJyb3dob29rbGVmdCA9IDB4MjFhYTtcbiB0LmFycm93aG9va3JpZ2h0ID0gMHgyMWE5O1xuIHQuYXJyb3dsZWZ0dG9waGFsZiA9IDB4MjFiYztcbiB0LmFycm93bGVmdGJvdGhhbGYgPSAweDIxYmQ7XG4gdC5hcnJvd25vcnRoZWFzdCA9IDB4MjE5NztcbiB0LmFycm93bm9ydGh3ZXN0ID0gMHgyMTk2O1xuIHQuYXJyb3dyaWdodHRvcGhhbGYgPSAweDIxYzA7XG4gdC5hcnJvd3JpZ2h0Ym90aGFsZiA9IDB4MjFjMTtcbiB0LmFycm93c291dGhlYXN0ID0gMHgyMTk4O1xuIHQuYXJyb3dzb3V0aHdlc3QgPSAweDIxOTk7XG4gdC5iYWNrc2xhc2hiaWcgPSAweDIyMTY7XG4gdC5iYWNrc2xhc2hCaWcgPSAweDIyMTY7XG4gdC5iYWNrc2xhc2hCaWdnID0gMHgyMjE2O1xuIHQuYmFja3NsYXNoYmlnZyA9IDB4MjIxNjtcbiB0LmJhcmRibCA9IDB4MjAxNjtcbiB0LmJyYWNlaHRpcGRvd25sZWZ0ID0gMHhmZTM3O1xuIHQuYnJhY2VodGlwZG93bnJpZ2h0ID0gMHhmZTM3O1xuIHQuYnJhY2VodGlwdXBsZWZ0ID0gMHhmZTM4O1xuIHQuYnJhY2VodGlwdXByaWdodCA9IDB4ZmUzODtcbiB0LmJyYWNlbGVmdEJpZyA9IDB4MDA3YjtcbiB0LmJyYWNlbGVmdGJpZyA9IDB4MDA3YjtcbiB0LmJyYWNlbGVmdGJpZ2cgPSAweDAwN2I7XG4gdC5icmFjZWxlZnRCaWdnID0gMHgwMDdiO1xuIHQuYnJhY2VyaWdodEJpZyA9IDB4MDA3ZDtcbiB0LmJyYWNlcmlnaHRiaWcgPSAweDAwN2Q7XG4gdC5icmFjZXJpZ2h0YmlnZyA9IDB4MDA3ZDtcbiB0LmJyYWNlcmlnaHRCaWdnID0gMHgwMDdkO1xuIHQuYnJhY2tldGxlZnRiaWcgPSAweDAwNWI7XG4gdC5icmFja2V0bGVmdEJpZyA9IDB4MDA1YjtcbiB0LmJyYWNrZXRsZWZ0YmlnZyA9IDB4MDA1YjtcbiB0LmJyYWNrZXRsZWZ0QmlnZyA9IDB4MDA1YjtcbiB0LmJyYWNrZXRyaWdodEJpZyA9IDB4MDA1ZDtcbiB0LmJyYWNrZXRyaWdodGJpZyA9IDB4MDA1ZDtcbiB0LmJyYWNrZXRyaWdodGJpZ2cgPSAweDAwNWQ7XG4gdC5icmFja2V0cmlnaHRCaWdnID0gMHgwMDVkO1xuIHQuY2VpbGluZ2xlZnRiaWcgPSAweDIzMDg7XG4gdC5jZWlsaW5nbGVmdEJpZyA9IDB4MjMwODtcbiB0LmNlaWxpbmdsZWZ0QmlnZyA9IDB4MjMwODtcbiB0LmNlaWxpbmdsZWZ0YmlnZyA9IDB4MjMwODtcbiB0LmNlaWxpbmdyaWdodGJpZyA9IDB4MjMwOTtcbiB0LmNlaWxpbmdyaWdodEJpZyA9IDB4MjMwOTtcbiB0LmNlaWxpbmdyaWdodGJpZ2cgPSAweDIzMDk7XG4gdC5jZWlsaW5ncmlnaHRCaWdnID0gMHgyMzA5O1xuIHQuY2lyY2xlZG90ZGlzcGxheSA9IDB4MjI5OTtcbiB0LmNpcmNsZWRvdHRleHQgPSAweDIyOTk7XG4gdC5jaXJjbGVtdWx0aXBseWRpc3BsYXkgPSAweDIyOTc7XG4gdC5jaXJjbGVtdWx0aXBseXRleHQgPSAweDIyOTc7XG4gdC5jaXJjbGVwbHVzZGlzcGxheSA9IDB4MjI5NTtcbiB0LmNpcmNsZXBsdXN0ZXh0ID0gMHgyMjk1O1xuIHQuY29udGludGVncmFsZGlzcGxheSA9IDB4MjIyZTtcbiB0LmNvbnRpbnRlZ3JhbHRleHQgPSAweDIyMmU7XG4gdC5jb3Byb2R1Y3RkaXNwbGF5ID0gMHgyMjEwO1xuIHQuY29wcm9kdWN0dGV4dCA9IDB4MjIxMDtcbiB0LmZsb29ybGVmdEJpZyA9IDB4MjMwYTtcbiB0LmZsb29ybGVmdGJpZyA9IDB4MjMwYTtcbiB0LmZsb29ybGVmdGJpZ2cgPSAweDIzMGE7XG4gdC5mbG9vcmxlZnRCaWdnID0gMHgyMzBhO1xuIHQuZmxvb3JyaWdodGJpZyA9IDB4MjMwYjtcbiB0LmZsb29ycmlnaHRCaWcgPSAweDIzMGI7XG4gdC5mbG9vcnJpZ2h0QmlnZyA9IDB4MjMwYjtcbiB0LmZsb29ycmlnaHRiaWdnID0gMHgyMzBiO1xuIHQuaGF0d2lkZSA9IDB4MDMwMjtcbiB0LmhhdHdpZGVyID0gMHgwMzAyO1xuIHQuaGF0d2lkZXN0ID0gMHgwMzAyO1xuIHQuaW50ZXJjYWwgPSAweDFkNDA7XG4gdC5pbnRlZ3JhbGRpc3BsYXkgPSAweDIyMmI7XG4gdC5pbnRlZ3JhbHRleHQgPSAweDIyMmI7XG4gdC5pbnRlcnNlY3Rpb25kaXNwbGF5ID0gMHgyMmMyO1xuIHQuaW50ZXJzZWN0aW9udGV4dCA9IDB4MjJjMjtcbiB0LmxvZ2ljYWxhbmRkaXNwbGF5ID0gMHgyMjI3O1xuIHQubG9naWNhbGFuZHRleHQgPSAweDIyMjc7XG4gdC5sb2dpY2Fsb3JkaXNwbGF5ID0gMHgyMjI4O1xuIHQubG9naWNhbG9ydGV4dCA9IDB4MjIyODtcbiB0LnBhcmVubGVmdEJpZyA9IDB4MDAyODtcbiB0LnBhcmVubGVmdGJpZyA9IDB4MDAyODtcbiB0LnBhcmVubGVmdEJpZ2cgPSAweDAwMjg7XG4gdC5wYXJlbmxlZnRiaWdnID0gMHgwMDI4O1xuIHQucGFyZW5yaWdodEJpZyA9IDB4MDAyOTtcbiB0LnBhcmVucmlnaHRiaWcgPSAweDAwMjk7XG4gdC5wYXJlbnJpZ2h0QmlnZyA9IDB4MDAyOTtcbiB0LnBhcmVucmlnaHRiaWdnID0gMHgwMDI5O1xuIHQucHJpbWUgPSAweDIwMzI7XG4gdC5wcm9kdWN0ZGlzcGxheSA9IDB4MjIwZjtcbiB0LnByb2R1Y3R0ZXh0ID0gMHgyMjBmO1xuIHQucmFkaWNhbGJpZyA9IDB4MjIxYTtcbiB0LnJhZGljYWxCaWcgPSAweDIyMWE7XG4gdC5yYWRpY2FsQmlnZyA9IDB4MjIxYTtcbiB0LnJhZGljYWxiaWdnID0gMHgyMjFhO1xuIHQucmFkaWNhbGJ0ID0gMHgyMjFhO1xuIHQucmFkaWNhbHRwID0gMHgyMjFhO1xuIHQucmFkaWNhbHZlcnRleCA9IDB4MjIxYTtcbiB0LnNsYXNoYmlnID0gMHgwMDJmO1xuIHQuc2xhc2hCaWcgPSAweDAwMmY7XG4gdC5zbGFzaEJpZ2cgPSAweDAwMmY7XG4gdC5zbGFzaGJpZ2cgPSAweDAwMmY7XG4gdC5zdW1tYXRpb25kaXNwbGF5ID0gMHgyMjExO1xuIHQuc3VtbWF0aW9udGV4dCA9IDB4MjIxMTtcbiB0LnRpbGRld2lkZSA9IDB4MDJkYztcbiB0LnRpbGRld2lkZXIgPSAweDAyZGM7XG4gdC50aWxkZXdpZGVzdCA9IDB4MDJkYztcbiB0LnVuaW9uZGlzcGxheSA9IDB4MjJjMztcbiB0LnVuaW9ubXVsdGlkaXNwbGF5ID0gMHgyMjhlO1xuIHQudW5pb25tdWx0aXRleHQgPSAweDIyOGU7XG4gdC51bmlvbnNxZGlzcGxheSA9IDB4MjI5NDtcbiB0LnVuaW9uc3F0ZXh0ID0gMHgyMjk0O1xuIHQudW5pb250ZXh0ID0gMHgyMmMzO1xuIHQudmV4dGVuZGRvdWJsZSA9IDB4MjIyNTtcbiB0LnZleHRlbmRzaW5nbGUgPSAweDIyMjM7XG59KTtcbnZhciBnZXREaW5nYmF0c0dseXBoc1VuaWNvZGUgPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHtcbiB0LnNwYWNlID0gMHgwMDIwO1xuIHQuYTEgPSAweDI3MDE7XG4gdC5hMiA9IDB4MjcwMjtcbiB0LmEyMDIgPSAweDI3MDM7XG4gdC5hMyA9IDB4MjcwNDtcbiB0LmE0ID0gMHgyNjBlO1xuIHQuYTUgPSAweDI3MDY7XG4gdC5hMTE5ID0gMHgyNzA3O1xuIHQuYTExOCA9IDB4MjcwODtcbiB0LmExMTcgPSAweDI3MDk7XG4gdC5hMTEgPSAweDI2MWI7XG4gdC5hMTIgPSAweDI2MWU7XG4gdC5hMTMgPSAweDI3MGM7XG4gdC5hMTQgPSAweDI3MGQ7XG4gdC5hMTUgPSAweDI3MGU7XG4gdC5hMTYgPSAweDI3MGY7XG4gdC5hMTA1ID0gMHgyNzEwO1xuIHQuYTE3ID0gMHgyNzExO1xuIHQuYTE4ID0gMHgyNzEyO1xuIHQuYTE5ID0gMHgyNzEzO1xuIHQuYTIwID0gMHgyNzE0O1xuIHQuYTIxID0gMHgyNzE1O1xuIHQuYTIyID0gMHgyNzE2O1xuIHQuYTIzID0gMHgyNzE3O1xuIHQuYTI0ID0gMHgyNzE4O1xuIHQuYTI1ID0gMHgyNzE5O1xuIHQuYTI2ID0gMHgyNzFhO1xuIHQuYTI3ID0gMHgyNzFiO1xuIHQuYTI4ID0gMHgyNzFjO1xuIHQuYTYgPSAweDI3MWQ7XG4gdC5hNyA9IDB4MjcxZTtcbiB0LmE4ID0gMHgyNzFmO1xuIHQuYTkgPSAweDI3MjA7XG4gdC5hMTAgPSAweDI3MjE7XG4gdC5hMjkgPSAweDI3MjI7XG4gdC5hMzAgPSAweDI3MjM7XG4gdC5hMzEgPSAweDI3MjQ7XG4gdC5hMzIgPSAweDI3MjU7XG4gdC5hMzMgPSAweDI3MjY7XG4gdC5hMzQgPSAweDI3Mjc7XG4gdC5hMzUgPSAweDI2MDU7XG4gdC5hMzYgPSAweDI3Mjk7XG4gdC5hMzcgPSAweDI3MmE7XG4gdC5hMzggPSAweDI3MmI7XG4gdC5hMzkgPSAweDI3MmM7XG4gdC5hNDAgPSAweDI3MmQ7XG4gdC5hNDEgPSAweDI3MmU7XG4gdC5hNDIgPSAweDI3MmY7XG4gdC5hNDMgPSAweDI3MzA7XG4gdC5hNDQgPSAweDI3MzE7XG4gdC5hNDUgPSAweDI3MzI7XG4gdC5hNDYgPSAweDI3MzM7XG4gdC5hNDcgPSAweDI3MzQ7XG4gdC5hNDggPSAweDI3MzU7XG4gdC5hNDkgPSAweDI3MzY7XG4gdC5hNTAgPSAweDI3Mzc7XG4gdC5hNTEgPSAweDI3Mzg7XG4gdC5hNTIgPSAweDI3Mzk7XG4gdC5hNTMgPSAweDI3M2E7XG4gdC5hNTQgPSAweDI3M2I7XG4gdC5hNTUgPSAweDI3M2M7XG4gdC5hNTYgPSAweDI3M2Q7XG4gdC5hNTcgPSAweDI3M2U7XG4gdC5hNTggPSAweDI3M2Y7XG4gdC5hNTkgPSAweDI3NDA7XG4gdC5hNjAgPSAweDI3NDE7XG4gdC5hNjEgPSAweDI3NDI7XG4gdC5hNjIgPSAweDI3NDM7XG4gdC5hNjMgPSAweDI3NDQ7XG4gdC5hNjQgPSAweDI3NDU7XG4gdC5hNjUgPSAweDI3NDY7XG4gdC5hNjYgPSAweDI3NDc7XG4gdC5hNjcgPSAweDI3NDg7XG4gdC5hNjggPSAweDI3NDk7XG4gdC5hNjkgPSAweDI3NGE7XG4gdC5hNzAgPSAweDI3NGI7XG4gdC5hNzEgPSAweDI1Y2Y7XG4gdC5hNzIgPSAweDI3NGQ7XG4gdC5hNzMgPSAweDI1YTA7XG4gdC5hNzQgPSAweDI3NGY7XG4gdC5hMjAzID0gMHgyNzUwO1xuIHQuYTc1ID0gMHgyNzUxO1xuIHQuYTIwNCA9IDB4Mjc1MjtcbiB0LmE3NiA9IDB4MjViMjtcbiB0LmE3NyA9IDB4MjViYztcbiB0LmE3OCA9IDB4MjVjNjtcbiB0LmE3OSA9IDB4Mjc1NjtcbiB0LmE4MSA9IDB4MjVkNztcbiB0LmE4MiA9IDB4Mjc1ODtcbiB0LmE4MyA9IDB4Mjc1OTtcbiB0LmE4NCA9IDB4Mjc1YTtcbiB0LmE5NyA9IDB4Mjc1YjtcbiB0LmE5OCA9IDB4Mjc1YztcbiB0LmE5OSA9IDB4Mjc1ZDtcbiB0LmExMDAgPSAweDI3NWU7XG4gdC5hMTAxID0gMHgyNzYxO1xuIHQuYTEwMiA9IDB4Mjc2MjtcbiB0LmExMDMgPSAweDI3NjM7XG4gdC5hMTA0ID0gMHgyNzY0O1xuIHQuYTEwNiA9IDB4Mjc2NTtcbiB0LmExMDcgPSAweDI3NjY7XG4gdC5hMTA4ID0gMHgyNzY3O1xuIHQuYTExMiA9IDB4MjY2MztcbiB0LmExMTEgPSAweDI2NjY7XG4gdC5hMTEwID0gMHgyNjY1O1xuIHQuYTEwOSA9IDB4MjY2MDtcbiB0LmExMjAgPSAweDI0NjA7XG4gdC5hMTIxID0gMHgyNDYxO1xuIHQuYTEyMiA9IDB4MjQ2MjtcbiB0LmExMjMgPSAweDI0NjM7XG4gdC5hMTI0ID0gMHgyNDY0O1xuIHQuYTEyNSA9IDB4MjQ2NTtcbiB0LmExMjYgPSAweDI0NjY7XG4gdC5hMTI3ID0gMHgyNDY3O1xuIHQuYTEyOCA9IDB4MjQ2ODtcbiB0LmExMjkgPSAweDI0Njk7XG4gdC5hMTMwID0gMHgyNzc2O1xuIHQuYTEzMSA9IDB4Mjc3NztcbiB0LmExMzIgPSAweDI3Nzg7XG4gdC5hMTMzID0gMHgyNzc5O1xuIHQuYTEzNCA9IDB4Mjc3YTtcbiB0LmExMzUgPSAweDI3N2I7XG4gdC5hMTM2ID0gMHgyNzdjO1xuIHQuYTEzNyA9IDB4Mjc3ZDtcbiB0LmExMzggPSAweDI3N2U7XG4gdC5hMTM5ID0gMHgyNzdmO1xuIHQuYTE0MCA9IDB4Mjc4MDtcbiB0LmExNDEgPSAweDI3ODE7XG4gdC5hMTQyID0gMHgyNzgyO1xuIHQuYTE0MyA9IDB4Mjc4MztcbiB0LmExNDQgPSAweDI3ODQ7XG4gdC5hMTQ1ID0gMHgyNzg1O1xuIHQuYTE0NiA9IDB4Mjc4NjtcbiB0LmExNDcgPSAweDI3ODc7XG4gdC5hMTQ4ID0gMHgyNzg4O1xuIHQuYTE0OSA9IDB4Mjc4OTtcbiB0LmExNTAgPSAweDI3OGE7XG4gdC5hMTUxID0gMHgyNzhiO1xuIHQuYTE1MiA9IDB4Mjc4YztcbiB0LmExNTMgPSAweDI3OGQ7XG4gdC5hMTU0ID0gMHgyNzhlO1xuIHQuYTE1NSA9IDB4Mjc4ZjtcbiB0LmExNTYgPSAweDI3OTA7XG4gdC5hMTU3ID0gMHgyNzkxO1xuIHQuYTE1OCA9IDB4Mjc5MjtcbiB0LmExNTkgPSAweDI3OTM7XG4gdC5hMTYwID0gMHgyNzk0O1xuIHQuYTE2MSA9IDB4MjE5MjtcbiB0LmExNjMgPSAweDIxOTQ7XG4gdC5hMTY0ID0gMHgyMTk1O1xuIHQuYTE5NiA9IDB4Mjc5ODtcbiB0LmExNjUgPSAweDI3OTk7XG4gdC5hMTkyID0gMHgyNzlhO1xuIHQuYTE2NiA9IDB4Mjc5YjtcbiB0LmExNjcgPSAweDI3OWM7XG4gdC5hMTY4ID0gMHgyNzlkO1xuIHQuYTE2OSA9IDB4Mjc5ZTtcbiB0LmExNzAgPSAweDI3OWY7XG4gdC5hMTcxID0gMHgyN2EwO1xuIHQuYTE3MiA9IDB4MjdhMTtcbiB0LmExNzMgPSAweDI3YTI7XG4gdC5hMTYyID0gMHgyN2EzO1xuIHQuYTE3NCA9IDB4MjdhNDtcbiB0LmExNzUgPSAweDI3YTU7XG4gdC5hMTc2ID0gMHgyN2E2O1xuIHQuYTE3NyA9IDB4MjdhNztcbiB0LmExNzggPSAweDI3YTg7XG4gdC5hMTc5ID0gMHgyN2E5O1xuIHQuYTE5MyA9IDB4MjdhYTtcbiB0LmExODAgPSAweDI3YWI7XG4gdC5hMTk5ID0gMHgyN2FjO1xuIHQuYTE4MSA9IDB4MjdhZDtcbiB0LmEyMDAgPSAweDI3YWU7XG4gdC5hMTgyID0gMHgyN2FmO1xuIHQuYTIwMSA9IDB4MjdiMTtcbiB0LmExODMgPSAweDI3YjI7XG4gdC5hMTg0ID0gMHgyN2IzO1xuIHQuYTE5NyA9IDB4MjdiNDtcbiB0LmExODUgPSAweDI3YjU7XG4gdC5hMTk0ID0gMHgyN2I2O1xuIHQuYTE5OCA9IDB4MjdiNztcbiB0LmExODYgPSAweDI3Yjg7XG4gdC5hMTk1ID0gMHgyN2I5O1xuIHQuYTE4NyA9IDB4MjdiYTtcbiB0LmExODggPSAweDI3YmI7XG4gdC5hMTg5ID0gMHgyN2JjO1xuIHQuYTE5MCA9IDB4MjdiZDtcbiB0LmExOTEgPSAweDI3YmU7XG4gdC5hODkgPSAweDI3Njg7XG4gdC5hOTAgPSAweDI3Njk7XG4gdC5hOTMgPSAweDI3NmE7XG4gdC5hOTQgPSAweDI3NmI7XG4gdC5hOTEgPSAweDI3NmM7XG4gdC5hOTIgPSAweDI3NmQ7XG4gdC5hMjA1ID0gMHgyNzZlO1xuIHQuYTg1ID0gMHgyNzZmO1xuIHQuYTIwNiA9IDB4Mjc3MDtcbiB0LmE4NiA9IDB4Mjc3MTtcbiB0LmE4NyA9IDB4Mjc3MjtcbiB0LmE4OCA9IDB4Mjc3MztcbiB0LmE5NSA9IDB4Mjc3NDtcbiB0LmE5NiA9IDB4Mjc3NTtcbiB0W1wiLm5vdGRlZlwiXSA9IDB4MDAwMDtcbn0pO1xuZXhwb3J0cy5nZXRHbHlwaHNVbmljb2RlID0gZ2V0R2x5cGhzVW5pY29kZTtcbmV4cG9ydHMuZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlID0gZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlO1xuXG4vKioqLyB9KSxcbi8qIDM0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSA9IGV4cG9ydHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrID0gZXhwb3J0cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSBleHBvcnRzLmdldFN5bWJvbHNGb250cyA9IGV4cG9ydHMuZ2V0U2VyaWZGb250cyA9IGV4cG9ydHMuZ2V0Tm9uU3RkRm9udE1hcCA9IGV4cG9ydHMuZ2V0U3RkRm9udE1hcCA9IHZvaWQgMDtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxuY29uc3QgZ2V0U3RkRm9udE1hcCA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuQXJpYWxOYXJyb3cgPSBcIkhlbHZldGljYVwiO1xuICB0W1wiQXJpYWxOYXJyb3ctQm9sZFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIkFyaWFsTmFycm93LUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWxOYXJyb3ctSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0LkFyaWFsQmxhY2sgPSBcIkhlbHZldGljYVwiO1xuICB0W1wiQXJpYWxCbGFjay1Cb2xkXCJdID0gXCJIZWx2ZXRpY2EtQm9sZFwiO1xuICB0W1wiQXJpYWxCbGFjay1Cb2xkSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkFyaWFsQmxhY2stSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWwtQmxhY2tcIl0gPSBcIkhlbHZldGljYVwiO1xuICB0W1wiQXJpYWwtQmxhY2stQm9sZFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWwtQmxhY2stSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0LkFyaWFsID0gXCJIZWx2ZXRpY2FcIjtcbiAgdFtcIkFyaWFsLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJBcmlhbC1Cb2xkSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkFyaWFsLUl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLU9ibGlxdWVcIjtcbiAgdFtcIkFyaWFsLUJvbGRJdGFsaWNNVFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJBcmlhbC1Cb2xkTVRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJBcmlhbC1JdGFsaWNNVFwiXSA9IFwiSGVsdmV0aWNhLU9ibGlxdWVcIjtcbiAgdC5BcmlhbE1UID0gXCJIZWx2ZXRpY2FcIjtcbiAgdFtcIkNvdXJpZXItQm9sZFwiXSA9IFwiQ291cmllci1Cb2xkXCI7XG4gIHRbXCJDb3VyaWVyLUJvbGRJdGFsaWNcIl0gPSBcIkNvdXJpZXItQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkNvdXJpZXItSXRhbGljXCJdID0gXCJDb3VyaWVyLU9ibGlxdWVcIjtcbiAgdC5Db3VyaWVyTmV3ID0gXCJDb3VyaWVyXCI7XG4gIHRbXCJDb3VyaWVyTmV3LUJvbGRcIl0gPSBcIkNvdXJpZXItQm9sZFwiO1xuICB0W1wiQ291cmllck5ldy1Cb2xkSXRhbGljXCJdID0gXCJDb3VyaWVyLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJDb3VyaWVyTmV3LUl0YWxpY1wiXSA9IFwiQ291cmllci1PYmxpcXVlXCI7XG4gIHRbXCJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UXCJdID0gXCJDb3VyaWVyLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJDb3VyaWVyTmV3UFMtQm9sZE1UXCJdID0gXCJDb3VyaWVyLUJvbGRcIjtcbiAgdFtcIkNvdXJpZXJOZXdQUy1JdGFsaWNNVFwiXSA9IFwiQ291cmllci1PYmxpcXVlXCI7XG4gIHQuQ291cmllck5ld1BTTVQgPSBcIkNvdXJpZXJcIjtcbiAgdC5IZWx2ZXRpY2EgPSBcIkhlbHZldGljYVwiO1xuICB0W1wiSGVsdmV0aWNhLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZEl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiSGVsdmV0aWNhLUl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLU9ibGlxdWVcIjtcbiAgdFtcIkhlbHZldGljYS1PYmxpcXVlXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0W1wiU3ltYm9sLUJvbGRcIl0gPSBcIlN5bWJvbFwiO1xuICB0W1wiU3ltYm9sLUJvbGRJdGFsaWNcIl0gPSBcIlN5bWJvbFwiO1xuICB0W1wiU3ltYm9sLUl0YWxpY1wiXSA9IFwiU3ltYm9sXCI7XG4gIHQuVGltZXNOZXdSb21hbiA9IFwiVGltZXMtUm9tYW5cIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW4tQm9sZFwiXSA9IFwiVGltZXMtQm9sZFwiO1xuICB0W1wiVGltZXNOZXdSb21hbi1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuLUl0YWxpY1wiXSA9IFwiVGltZXMtSXRhbGljXCI7XG4gIHQuVGltZXNOZXdSb21hblBTID0gXCJUaW1lcy1Sb21hblwiO1xuICB0W1wiVGltZXNOZXdSb21hblBTLUJvbGRcIl0gPSBcIlRpbWVzLUJvbGRcIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpY01UXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtQm9sZE1UXCJdID0gXCJUaW1lcy1Cb2xkXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtSXRhbGljXCJdID0gXCJUaW1lcy1JdGFsaWNcIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWNNVFwiXSA9IFwiVGltZXMtSXRhbGljXCI7XG4gIHQuVGltZXNOZXdSb21hblBTTVQgPSBcIlRpbWVzLVJvbWFuXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkXCJdID0gXCJUaW1lcy1Cb2xkXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1JdGFsaWNcIl0gPSBcIlRpbWVzLUl0YWxpY1wiO1xufSk7XG5leHBvcnRzLmdldFN0ZEZvbnRNYXAgPSBnZXRTdGRGb250TWFwO1xuY29uc3QgZ2V0Tm9uU3RkRm9udE1hcCA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuQ2FsaWJyaSA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJDYWxpYnJpLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJDYWxpYnJpLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ2FsaWJyaS1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQ2VudHVyeUdvdGhpYyA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJDZW50dXJ5R290aGljLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJDZW50dXJ5R290aGljLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ2VudHVyeUdvdGhpYy1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQ29taWNTYW5zTVMgPSBcIkNvbWljIFNhbnMgTVNcIjtcbiAgdFtcIkNvbWljU2Fuc01TLUJvbGRcIl0gPSBcIkNvbWljIFNhbnMgTVMtQm9sZFwiO1xuICB0W1wiQ29taWNTYW5zTVMtQm9sZEl0YWxpY1wiXSA9IFwiQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJDb21pY1NhbnNNUy1JdGFsaWNcIl0gPSBcIkNvbWljIFNhbnMgTVMtSXRhbGljXCI7XG4gIHQuTHVjaWRhQ29uc29sZSA9IFwiQ291cmllclwiO1xuICB0W1wiTHVjaWRhQ29uc29sZS1Cb2xkXCJdID0gXCJDb3VyaWVyLUJvbGRcIjtcbiAgdFtcIkx1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpY1wiXSA9IFwiQ291cmllci1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiTHVjaWRhQ29uc29sZS1JdGFsaWNcIl0gPSBcIkNvdXJpZXItT2JsaXF1ZVwiO1xuICB0W1wiTHVjaWRhU2Fucy1EZW1pXCJdID0gXCJIZWx2ZXRpY2EtQm9sZFwiO1xuICB0W1wiTVMtR290aGljXCJdID0gXCJNUyBHb3RoaWNcIjtcbiAgdFtcIk1TLUdvdGhpYy1Cb2xkXCJdID0gXCJNUyBHb3RoaWMtQm9sZFwiO1xuICB0W1wiTVMtR290aGljLUJvbGRJdGFsaWNcIl0gPSBcIk1TIEdvdGhpYy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJNUy1Hb3RoaWMtSXRhbGljXCJdID0gXCJNUyBHb3RoaWMtSXRhbGljXCI7XG4gIHRbXCJNUy1NaW5jaG9cIl0gPSBcIk1TIE1pbmNob1wiO1xuICB0W1wiTVMtTWluY2hvLUJvbGRcIl0gPSBcIk1TIE1pbmNoby1Cb2xkXCI7XG4gIHRbXCJNUy1NaW5jaG8tQm9sZEl0YWxpY1wiXSA9IFwiTVMgTWluY2hvLUJvbGRJdGFsaWNcIjtcbiAgdFtcIk1TLU1pbmNoby1JdGFsaWNcIl0gPSBcIk1TIE1pbmNoby1JdGFsaWNcIjtcbiAgdFtcIk1TLVBHb3RoaWNcIl0gPSBcIk1TIFBHb3RoaWNcIjtcbiAgdFtcIk1TLVBHb3RoaWMtQm9sZFwiXSA9IFwiTVMgUEdvdGhpYy1Cb2xkXCI7XG4gIHRbXCJNUy1QR290aGljLUJvbGRJdGFsaWNcIl0gPSBcIk1TIFBHb3RoaWMtQm9sZEl0YWxpY1wiO1xuICB0W1wiTVMtUEdvdGhpYy1JdGFsaWNcIl0gPSBcIk1TIFBHb3RoaWMtSXRhbGljXCI7XG4gIHRbXCJNUy1QTWluY2hvXCJdID0gXCJNUyBQTWluY2hvXCI7XG4gIHRbXCJNUy1QTWluY2hvLUJvbGRcIl0gPSBcIk1TIFBNaW5jaG8tQm9sZFwiO1xuICB0W1wiTVMtUE1pbmNoby1Cb2xkSXRhbGljXCJdID0gXCJNUyBQTWluY2hvLUJvbGRJdGFsaWNcIjtcbiAgdFtcIk1TLVBNaW5jaG8tSXRhbGljXCJdID0gXCJNUyBQTWluY2hvLUl0YWxpY1wiO1xuICB0Lk51cHRpYWxTY3JpcHQgPSBcIlRpbWVzLUl0YWxpY1wiO1xuICB0LlNlZ29lVUlTeW1ib2wgPSBcIkhlbHZldGljYVwiO1xuICB0LldpbmdkaW5ncyA9IFwiWmFwZkRpbmdiYXRzXCI7XG4gIHRbXCJXaW5nZGluZ3MtUmVndWxhclwiXSA9IFwiWmFwZkRpbmdiYXRzXCI7XG59KTtcbmV4cG9ydHMuZ2V0Tm9uU3RkRm9udE1hcCA9IGdldE5vblN0ZEZvbnRNYXA7XG5jb25zdCBnZXRTZXJpZkZvbnRzID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgdFtcIkFkb2JlIEplbnNvblwiXSA9IHRydWU7XG4gIHRbXCJBZG9iZSBUZXh0XCJdID0gdHJ1ZTtcbiAgdC5BbGJlcnR1cyA9IHRydWU7XG4gIHQuQWxkdXMgPSB0cnVlO1xuICB0LkFsZXhhbmRyaWEgPSB0cnVlO1xuICB0LkFsZ2VyaWFuID0gdHJ1ZTtcbiAgdFtcIkFtZXJpY2FuIFR5cGV3cml0ZXJcIl0gPSB0cnVlO1xuICB0LkFudGlxdWEgPSB0cnVlO1xuICB0LkFwZXggPSB0cnVlO1xuICB0LkFybm8gPSB0cnVlO1xuICB0LkFzdGVyID0gdHJ1ZTtcbiAgdC5BdXJvcmEgPSB0cnVlO1xuICB0LkJhc2tlcnZpbGxlID0gdHJ1ZTtcbiAgdC5CZWxsID0gdHJ1ZTtcbiAgdC5CZW1ibyA9IHRydWU7XG4gIHRbXCJCZW1ibyBTY2hvb2xib29rXCJdID0gdHJ1ZTtcbiAgdC5CZW5ndWlhdCA9IHRydWU7XG4gIHRbXCJCZXJrZWxleSBPbGQgU3R5bGVcIl0gPSB0cnVlO1xuICB0W1wiQmVybmhhcmQgTW9kZXJuXCJdID0gdHJ1ZTtcbiAgdFtcIkJlcnRob2xkIENpdHlcIl0gPSB0cnVlO1xuICB0LkJvZG9uaSA9IHRydWU7XG4gIHRbXCJCYXVlciBCb2RvbmlcIl0gPSB0cnVlO1xuICB0W1wiQm9vayBBbnRpcXVhXCJdID0gdHJ1ZTtcbiAgdC5Cb29rbWFuID0gdHJ1ZTtcbiAgdFtcIkJvcmRlYXV4IFJvbWFuXCJdID0gdHJ1ZTtcbiAgdFtcIkNhbGlmb3JuaWFuIEZCXCJdID0gdHJ1ZTtcbiAgdC5DYWxpc3RvID0gdHJ1ZTtcbiAgdC5DYWx2ZXJ0ID0gdHJ1ZTtcbiAgdC5DYXBpdGFscyA9IHRydWU7XG4gIHQuQ2FtYnJpYSA9IHRydWU7XG4gIHQuQ2FydGllciA9IHRydWU7XG4gIHQuQ2FzbG9uID0gdHJ1ZTtcbiAgdC5DYXR1bGwgPSB0cnVlO1xuICB0LkNlbnRhdXIgPSB0cnVlO1xuICB0W1wiQ2VudHVyeSBPbGQgU3R5bGVcIl0gPSB0cnVlO1xuICB0W1wiQ2VudHVyeSBTY2hvb2xib29rXCJdID0gdHJ1ZTtcbiAgdC5DaGFwYXJyYWwgPSB0cnVlO1xuICB0W1wiQ2hhcmlzIFNJTFwiXSA9IHRydWU7XG4gIHQuQ2hlbHRlbmhhbSA9IHRydWU7XG4gIHRbXCJDaG9sbGEgU2xhYlwiXSA9IHRydWU7XG4gIHQuQ2xhcmVuZG9uID0gdHJ1ZTtcbiAgdC5DbGVhcmZhY2UgPSB0cnVlO1xuICB0LkNvY2hpbiA9IHRydWU7XG4gIHQuQ29sb25uYSA9IHRydWU7XG4gIHRbXCJDb21wdXRlciBNb2Rlcm5cIl0gPSB0cnVlO1xuICB0W1wiQ29uY3JldGUgUm9tYW5cIl0gPSB0cnVlO1xuICB0LkNvbnN0YW50aWEgPSB0cnVlO1xuICB0W1wiQ29vcGVyIEJsYWNrXCJdID0gdHJ1ZTtcbiAgdC5Db3JvbmEgPSB0cnVlO1xuICB0LkVjb3R5cGUgPSB0cnVlO1xuICB0LkVneXB0aWVubmUgPSB0cnVlO1xuICB0LkVsZXBoYW50ID0gdHJ1ZTtcbiAgdC5FeGNlbHNpb3IgPSB0cnVlO1xuICB0LkZhaXJmaWVsZCA9IHRydWU7XG4gIHRbXCJGRiBTY2FsYVwiXSA9IHRydWU7XG4gIHQuRm9sa2FyZCA9IHRydWU7XG4gIHQuRm9vdGxpZ2h0ID0gdHJ1ZTtcbiAgdC5GcmVlU2VyaWYgPSB0cnVlO1xuICB0W1wiRnJpeiBRdWFkcmF0YVwiXSA9IHRydWU7XG4gIHQuR2FyYW1vbmQgPSB0cnVlO1xuICB0LkdlbnRpdW0gPSB0cnVlO1xuICB0Lkdlb3JnaWEgPSB0cnVlO1xuICB0Lkdsb3VjZXN0ZXIgPSB0cnVlO1xuICB0W1wiR291ZHkgT2xkIFN0eWxlXCJdID0gdHJ1ZTtcbiAgdFtcIkdvdWR5IFNjaG9vbGJvb2tcIl0gPSB0cnVlO1xuICB0W1wiR291ZHkgUHJvIEZvbnRcIl0gPSB0cnVlO1xuICB0LkdyYW5qb24gPSB0cnVlO1xuICB0W1wiR3VhcmRpYW4gRWd5cHRpYW5cIl0gPSB0cnVlO1xuICB0LkhlYXRoZXIgPSB0cnVlO1xuICB0LkhlcmN1bGVzID0gdHJ1ZTtcbiAgdFtcIkhpZ2ggVG93ZXIgVGV4dFwiXSA9IHRydWU7XG4gIHQuSGlyb3NoaWdlID0gdHJ1ZTtcbiAgdFtcIkhvZWZsZXIgVGV4dFwiXSA9IHRydWU7XG4gIHRbXCJIdW1hbmEgU2VyaWZcIl0gPSB0cnVlO1xuICB0LkltcHJpbnQgPSB0cnVlO1xuICB0W1wiSW9uaWMgTm8uIDVcIl0gPSB0cnVlO1xuICB0LkphbnNvbiA9IHRydWU7XG4gIHQuSm9hbm5hID0gdHJ1ZTtcbiAgdC5Lb3Jpbm5hID0gdHJ1ZTtcbiAgdC5MZXhpY29uID0gdHJ1ZTtcbiAgdFtcIkxpYmVyYXRpb24gU2VyaWZcIl0gPSB0cnVlO1xuICB0W1wiTGludXggTGliZXJ0aW5lXCJdID0gdHJ1ZTtcbiAgdC5MaXRlcmF0dXJuYXlhID0gdHJ1ZTtcbiAgdC5MdWNpZGEgPSB0cnVlO1xuICB0W1wiTHVjaWRhIEJyaWdodFwiXSA9IHRydWU7XG4gIHQuTWVsaW9yID0gdHJ1ZTtcbiAgdC5NZW1waGlzID0gdHJ1ZTtcbiAgdC5NaWxsZXIgPSB0cnVlO1xuICB0Lk1pbmlvbiA9IHRydWU7XG4gIHQuTW9kZXJuID0gdHJ1ZTtcbiAgdFtcIk1vbmEgTGlzYVwiXSA9IHRydWU7XG4gIHRbXCJNcnMgRWF2ZXNcIl0gPSB0cnVlO1xuICB0W1wiTVMgU2VyaWZcIl0gPSB0cnVlO1xuICB0W1wiTXVzZW8gU2xhYlwiXSA9IHRydWU7XG4gIHRbXCJOZXcgWW9ya1wiXSA9IHRydWU7XG4gIHRbXCJOaW1idXMgUm9tYW5cIl0gPSB0cnVlO1xuICB0W1wiTlBTIFJhd2xpbnNvbiBSb2Fkd2F5XCJdID0gdHJ1ZTtcbiAgdC5OdXB0aWFsU2NyaXB0ID0gdHJ1ZTtcbiAgdC5QYWxhdGlubyA9IHRydWU7XG4gIHQuUGVycGV0dWEgPSB0cnVlO1xuICB0LlBsYW50aW4gPSB0cnVlO1xuICB0W1wiUGxhbnRpbiBTY2hvb2xib29rXCJdID0gdHJ1ZTtcbiAgdC5QbGF5YmlsbCA9IHRydWU7XG4gIHRbXCJQb29yIFJpY2hhcmRcIl0gPSB0cnVlO1xuICB0W1wiUmF3bGluc29uIFJvYWR3YXlcIl0gPSB0cnVlO1xuICB0LlJlbmF1bHQgPSB0cnVlO1xuICB0LlJlcXVpZW0gPSB0cnVlO1xuICB0LlJvY2t3ZWxsID0gdHJ1ZTtcbiAgdC5Sb21hbiA9IHRydWU7XG4gIHRbXCJSb3RpcyBTZXJpZlwiXSA9IHRydWU7XG4gIHQuU2Fib24gPSB0cnVlO1xuICB0LlNjYWxhID0gdHJ1ZTtcbiAgdC5TZWFndWxsID0gdHJ1ZTtcbiAgdC5TaXN0aW5hID0gdHJ1ZTtcbiAgdC5Tb3V2ZW5pciA9IHRydWU7XG4gIHQuU1RJWCA9IHRydWU7XG4gIHRbXCJTdG9uZSBJbmZvcm1hbFwiXSA9IHRydWU7XG4gIHRbXCJTdG9uZSBTZXJpZlwiXSA9IHRydWU7XG4gIHQuU3lsZmFlbiA9IHRydWU7XG4gIHQuVGltZXMgPSB0cnVlO1xuICB0LlRyYWphbiA9IHRydWU7XG4gIHRbXCJUcmluaXTDqVwiXSA9IHRydWU7XG4gIHRbXCJUcnVtcCBNZWRpYWV2YWxcIl0gPSB0cnVlO1xuICB0LlV0b3BpYSA9IHRydWU7XG4gIHRbXCJWYWxlIFR5cGVcIl0gPSB0cnVlO1xuICB0W1wiQml0c3RyZWFtIFZlcmFcIl0gPSB0cnVlO1xuICB0W1wiVmVyYSBTZXJpZlwiXSA9IHRydWU7XG4gIHQuVmVyc2FpbGxlcyA9IHRydWU7XG4gIHQuV2FudGVkID0gdHJ1ZTtcbiAgdC5XZWlzcyA9IHRydWU7XG4gIHRbXCJXaWRlIExhdGluXCJdID0gdHJ1ZTtcbiAgdC5XaW5kc29yID0gdHJ1ZTtcbiAgdC5YSVRTID0gdHJ1ZTtcbn0pO1xuZXhwb3J0cy5nZXRTZXJpZkZvbnRzID0gZ2V0U2VyaWZGb250cztcbmNvbnN0IGdldFN5bWJvbHNGb250cyA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuRGluZ2JhdHMgPSB0cnVlO1xuICB0LlN5bWJvbCA9IHRydWU7XG4gIHQuWmFwZkRpbmdiYXRzID0gdHJ1ZTtcbn0pO1xuZXhwb3J0cy5nZXRTeW1ib2xzRm9udHMgPSBnZXRTeW1ib2xzRm9udHM7XG5jb25zdCBnZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICB0WzJdID0gMTA7XG4gIHRbM10gPSAzMjtcbiAgdFs0XSA9IDMzO1xuICB0WzVdID0gMzQ7XG4gIHRbNl0gPSAzNTtcbiAgdFs3XSA9IDM2O1xuICB0WzhdID0gMzc7XG4gIHRbOV0gPSAzODtcbiAgdFsxMF0gPSAzOTtcbiAgdFsxMV0gPSA0MDtcbiAgdFsxMl0gPSA0MTtcbiAgdFsxM10gPSA0MjtcbiAgdFsxNF0gPSA0MztcbiAgdFsxNV0gPSA0NDtcbiAgdFsxNl0gPSA0NTtcbiAgdFsxN10gPSA0NjtcbiAgdFsxOF0gPSA0NztcbiAgdFsxOV0gPSA0ODtcbiAgdFsyMF0gPSA0OTtcbiAgdFsyMV0gPSA1MDtcbiAgdFsyMl0gPSA1MTtcbiAgdFsyM10gPSA1MjtcbiAgdFsyNF0gPSA1MztcbiAgdFsyNV0gPSA1NDtcbiAgdFsyNl0gPSA1NTtcbiAgdFsyN10gPSA1NjtcbiAgdFsyOF0gPSA1NztcbiAgdFsyOV0gPSA1ODtcbiAgdFszMF0gPSA4OTQ7XG4gIHRbMzFdID0gNjA7XG4gIHRbMzJdID0gNjE7XG4gIHRbMzNdID0gNjI7XG4gIHRbMzRdID0gNjM7XG4gIHRbMzVdID0gNjQ7XG4gIHRbMzZdID0gNjU7XG4gIHRbMzddID0gNjY7XG4gIHRbMzhdID0gNjc7XG4gIHRbMzldID0gNjg7XG4gIHRbNDBdID0gNjk7XG4gIHRbNDFdID0gNzA7XG4gIHRbNDJdID0gNzE7XG4gIHRbNDNdID0gNzI7XG4gIHRbNDRdID0gNzM7XG4gIHRbNDVdID0gNzQ7XG4gIHRbNDZdID0gNzU7XG4gIHRbNDddID0gNzY7XG4gIHRbNDhdID0gNzc7XG4gIHRbNDldID0gNzg7XG4gIHRbNTBdID0gNzk7XG4gIHRbNTFdID0gODA7XG4gIHRbNTJdID0gODE7XG4gIHRbNTNdID0gODI7XG4gIHRbNTRdID0gODM7XG4gIHRbNTVdID0gODQ7XG4gIHRbNTZdID0gODU7XG4gIHRbNTddID0gODY7XG4gIHRbNThdID0gODc7XG4gIHRbNTldID0gODg7XG4gIHRbNjBdID0gODk7XG4gIHRbNjFdID0gOTA7XG4gIHRbNjJdID0gOTE7XG4gIHRbNjNdID0gOTI7XG4gIHRbNjRdID0gOTM7XG4gIHRbNjVdID0gOTQ7XG4gIHRbNjZdID0gOTU7XG4gIHRbNjddID0gOTY7XG4gIHRbNjhdID0gOTc7XG4gIHRbNjldID0gOTg7XG4gIHRbNzBdID0gOTk7XG4gIHRbNzFdID0gMTAwO1xuICB0WzcyXSA9IDEwMTtcbiAgdFs3M10gPSAxMDI7XG4gIHRbNzRdID0gMTAzO1xuICB0Wzc1XSA9IDEwNDtcbiAgdFs3Nl0gPSAxMDU7XG4gIHRbNzddID0gMTA2O1xuICB0Wzc4XSA9IDEwNztcbiAgdFs3OV0gPSAxMDg7XG4gIHRbODBdID0gMTA5O1xuICB0WzgxXSA9IDExMDtcbiAgdFs4Ml0gPSAxMTE7XG4gIHRbODNdID0gMTEyO1xuICB0Wzg0XSA9IDExMztcbiAgdFs4NV0gPSAxMTQ7XG4gIHRbODZdID0gMTE1O1xuICB0Wzg3XSA9IDExNjtcbiAgdFs4OF0gPSAxMTc7XG4gIHRbODldID0gMTE4O1xuICB0WzkwXSA9IDExOTtcbiAgdFs5MV0gPSAxMjA7XG4gIHRbOTJdID0gMTIxO1xuICB0WzkzXSA9IDEyMjtcbiAgdFs5NF0gPSAxMjM7XG4gIHRbOTVdID0gMTI0O1xuICB0Wzk2XSA9IDEyNTtcbiAgdFs5N10gPSAxMjY7XG4gIHRbOThdID0gMTk2O1xuICB0Wzk5XSA9IDE5NztcbiAgdFsxMDBdID0gMTk5O1xuICB0WzEwMV0gPSAyMDE7XG4gIHRbMTAyXSA9IDIwOTtcbiAgdFsxMDNdID0gMjE0O1xuICB0WzEwNF0gPSAyMjA7XG4gIHRbMTA1XSA9IDIyNTtcbiAgdFsxMDZdID0gMjI0O1xuICB0WzEwN10gPSAyMjY7XG4gIHRbMTA4XSA9IDIyODtcbiAgdFsxMDldID0gMjI3O1xuICB0WzExMF0gPSAyMjk7XG4gIHRbMTExXSA9IDIzMTtcbiAgdFsxMTJdID0gMjMzO1xuICB0WzExM10gPSAyMzI7XG4gIHRbMTE0XSA9IDIzNDtcbiAgdFsxMTVdID0gMjM1O1xuICB0WzExNl0gPSAyMzc7XG4gIHRbMTE3XSA9IDIzNjtcbiAgdFsxMThdID0gMjM4O1xuICB0WzExOV0gPSAyMzk7XG4gIHRbMTIwXSA9IDI0MTtcbiAgdFsxMjFdID0gMjQzO1xuICB0WzEyMl0gPSAyNDI7XG4gIHRbMTIzXSA9IDI0NDtcbiAgdFsxMjRdID0gMjQ2O1xuICB0WzEyNV0gPSAyNDU7XG4gIHRbMTI2XSA9IDI1MDtcbiAgdFsxMjddID0gMjQ5O1xuICB0WzEyOF0gPSAyNTE7XG4gIHRbMTI5XSA9IDI1MjtcbiAgdFsxMzBdID0gODIyNDtcbiAgdFsxMzFdID0gMTc2O1xuICB0WzEzMl0gPSAxNjI7XG4gIHRbMTMzXSA9IDE2MztcbiAgdFsxMzRdID0gMTY3O1xuICB0WzEzNV0gPSA4MjI2O1xuICB0WzEzNl0gPSAxODI7XG4gIHRbMTM3XSA9IDIyMztcbiAgdFsxMzhdID0gMTc0O1xuICB0WzEzOV0gPSAxNjk7XG4gIHRbMTQwXSA9IDg0ODI7XG4gIHRbMTQxXSA9IDE4MDtcbiAgdFsxNDJdID0gMTY4O1xuICB0WzE0M10gPSA4ODAwO1xuICB0WzE0NF0gPSAxOTg7XG4gIHRbMTQ1XSA9IDIxNjtcbiAgdFsxNDZdID0gODczNDtcbiAgdFsxNDddID0gMTc3O1xuICB0WzE0OF0gPSA4ODA0O1xuICB0WzE0OV0gPSA4ODA1O1xuICB0WzE1MF0gPSAxNjU7XG4gIHRbMTUxXSA9IDE4MTtcbiAgdFsxNTJdID0gODcwNjtcbiAgdFsxNTNdID0gODcyMTtcbiAgdFsxNTRdID0gODcxOTtcbiAgdFsxNTZdID0gODc0NztcbiAgdFsxNTddID0gMTcwO1xuICB0WzE1OF0gPSAxODY7XG4gIHRbMTU5XSA9IDg0ODY7XG4gIHRbMTYwXSA9IDIzMDtcbiAgdFsxNjFdID0gMjQ4O1xuICB0WzE2Ml0gPSAxOTE7XG4gIHRbMTYzXSA9IDE2MTtcbiAgdFsxNjRdID0gMTcyO1xuICB0WzE2NV0gPSA4NzMwO1xuICB0WzE2Nl0gPSA0MDI7XG4gIHRbMTY3XSA9IDg3NzY7XG4gIHRbMTY4XSA9IDg3MTA7XG4gIHRbMTY5XSA9IDE3MTtcbiAgdFsxNzBdID0gMTg3O1xuICB0WzE3MV0gPSA4MjMwO1xuICB0WzIxMF0gPSAyMTg7XG4gIHRbMjIzXSA9IDcxMTtcbiAgdFsyMjRdID0gMzIxO1xuICB0WzIyNV0gPSAzMjI7XG4gIHRbMjI3XSA9IDM1MztcbiAgdFsyMjldID0gMzgyO1xuICB0WzIzNF0gPSAyNTM7XG4gIHRbMjUyXSA9IDI2MztcbiAgdFsyNTNdID0gMjY4O1xuICB0WzI1NF0gPSAyNjk7XG4gIHRbMjU4XSA9IDI1ODtcbiAgdFsyNjBdID0gMjYwO1xuICB0WzI2MV0gPSAyNjE7XG4gIHRbMjY1XSA9IDI4MDtcbiAgdFsyNjZdID0gMjgxO1xuICB0WzI2OF0gPSAyODM7XG4gIHRbMjY5XSA9IDMxMztcbiAgdFsyNzVdID0gMzIzO1xuICB0WzI3Nl0gPSAzMjQ7XG4gIHRbMjc4XSA9IDMyODtcbiAgdFsyODRdID0gMzQ1O1xuICB0WzI4NV0gPSAzNDY7XG4gIHRbMjg2XSA9IDM0NztcbiAgdFsyOTJdID0gMzY3O1xuICB0WzI5NV0gPSAzNzc7XG4gIHRbMjk2XSA9IDM3ODtcbiAgdFsyOThdID0gMzgwO1xuICB0WzMwNV0gPSA5NjM7XG4gIHRbMzA2XSA9IDk2NDtcbiAgdFszMDddID0gOTY2O1xuICB0WzMwOF0gPSA4MjE1O1xuICB0WzMwOV0gPSA4MjUyO1xuICB0WzMxMF0gPSA4MzE5O1xuICB0WzMxMV0gPSA4MzU5O1xuICB0WzMxMl0gPSA4NTkyO1xuICB0WzMxM10gPSA4NTkzO1xuICB0WzMzN10gPSA5NTUyO1xuICB0WzQ5M10gPSAxMDM5O1xuICB0WzQ5NF0gPSAxMDQwO1xuICB0WzcwNV0gPSAxNTI0O1xuICB0WzcwNl0gPSA4MzYyO1xuICB0WzcxMF0gPSA2NDI4ODtcbiAgdFs3MTFdID0gNjQyOTg7XG4gIHRbNzU5XSA9IDE2MTc7XG4gIHRbNzYxXSA9IDE3NzY7XG4gIHRbNzYzXSA9IDE3Nzg7XG4gIHRbNzc1XSA9IDE2NTI7XG4gIHRbNzc3XSA9IDE3NjQ7XG4gIHRbNzc4XSA9IDE3ODA7XG4gIHRbNzc5XSA9IDE3ODE7XG4gIHRbNzgwXSA9IDE3ODI7XG4gIHRbNzgyXSA9IDc3MTtcbiAgdFs3ODNdID0gNjQ3MjY7XG4gIHRbNzg2XSA9IDgzNjM7XG4gIHRbNzg4XSA9IDg1MzI7XG4gIHRbNzkwXSA9IDc2ODtcbiAgdFs3OTFdID0gNzY5O1xuICB0Wzc5Ml0gPSA3Njg7XG4gIHRbNzk1XSA9IDgwMztcbiAgdFs3OTddID0gNjQzMzY7XG4gIHRbNzk4XSA9IDY0MzM3O1xuICB0Wzc5OV0gPSA2NDM0MjtcbiAgdFs4MDBdID0gNjQzNDM7XG4gIHRbODAxXSA9IDY0MzQ0O1xuICB0WzgwMl0gPSA2NDM0NTtcbiAgdFs4MDNdID0gNjQzNjI7XG4gIHRbODA0XSA9IDY0MzYzO1xuICB0WzgwNV0gPSA2NDM2NDtcbiAgdFsyNDI0XSA9IDc4MjE7XG4gIHRbMjQyNV0gPSA3ODIyO1xuICB0WzI0MjZdID0gNzgyMztcbiAgdFsyNDI3XSA9IDc4MjQ7XG4gIHRbMjQyOF0gPSA3ODI1O1xuICB0WzI0MjldID0gNzgyNjtcbiAgdFsyNDMwXSA9IDc4Mjc7XG4gIHRbMjQzM10gPSA3NjgyO1xuICB0WzI2NzhdID0gODA0NTtcbiAgdFsyNjc5XSA9IDgwNDY7XG4gIHRbMjgzMF0gPSAxNTUyO1xuICB0WzI4MzhdID0gNjg2O1xuICB0WzI4NDBdID0gNzUxO1xuICB0WzI4NDJdID0gNzUzO1xuICB0WzI4NDNdID0gNzU0O1xuICB0WzI4NDRdID0gNzU1O1xuICB0WzI4NDZdID0gNzU3O1xuICB0WzI4NTZdID0gNzY3O1xuICB0WzI4NTddID0gODQ4O1xuICB0WzI4NThdID0gODQ5O1xuICB0WzI4NjJdID0gODUzO1xuICB0WzI4NjNdID0gODU0O1xuICB0WzI4NjRdID0gODU1O1xuICB0WzI4NjVdID0gODYxO1xuICB0WzI4NjZdID0gODYyO1xuICB0WzI5MDZdID0gNzQ2MDtcbiAgdFsyOTA4XSA9IDc0NjI7XG4gIHRbMjkwOV0gPSA3NDYzO1xuICB0WzI5MTBdID0gNzQ2NDtcbiAgdFsyOTEyXSA9IDc0NjY7XG4gIHRbMjkxM10gPSA3NDY3O1xuICB0WzI5MTRdID0gNzQ2ODtcbiAgdFsyOTE2XSA9IDc0NzA7XG4gIHRbMjkxN10gPSA3NDcxO1xuICB0WzI5MThdID0gNzQ3MjtcbiAgdFsyOTIwXSA9IDc0NzQ7XG4gIHRbMjkyMV0gPSA3NDc1O1xuICB0WzI5MjJdID0gNzQ3NjtcbiAgdFsyOTI0XSA9IDc0Nzg7XG4gIHRbMjkyNV0gPSA3NDc5O1xuICB0WzI5MjZdID0gNzQ4MDtcbiAgdFsyOTI4XSA9IDc0ODI7XG4gIHRbMjkyOV0gPSA3NDgzO1xuICB0WzI5MzBdID0gNzQ4NDtcbiAgdFsyOTMyXSA9IDc0ODY7XG4gIHRbMjkzM10gPSA3NDg3O1xuICB0WzI5MzRdID0gNzQ4ODtcbiAgdFsyOTM2XSA9IDc0OTA7XG4gIHRbMjkzN10gPSA3NDkxO1xuICB0WzI5MzhdID0gNzQ5MjtcbiAgdFsyOTQwXSA9IDc0OTQ7XG4gIHRbMjk0MV0gPSA3NDk1O1xuICB0WzI5NDJdID0gNzQ5NjtcbiAgdFsyOTQ0XSA9IDc0OTg7XG4gIHRbMjk0Nl0gPSA3NTAwO1xuICB0WzI5NDhdID0gNzUwMjtcbiAgdFsyOTUwXSA9IDc1MDQ7XG4gIHRbMjk1MV0gPSA3NTA1O1xuICB0WzI5NTJdID0gNzUwNjtcbiAgdFsyOTU0XSA9IDc1MDg7XG4gIHRbMjk1NV0gPSA3NTA5O1xuICB0WzI5NTZdID0gNzUxMDtcbiAgdFsyOTU4XSA9IDc1MTI7XG4gIHRbMjk1OV0gPSA3NTEzO1xuICB0WzI5NjBdID0gNzUxNDtcbiAgdFsyOTYyXSA9IDc1MTY7XG4gIHRbMjk2M10gPSA3NTE3O1xuICB0WzI5NjRdID0gNzUxODtcbiAgdFsyOTY2XSA9IDc1MjA7XG4gIHRbMjk2N10gPSA3NTIxO1xuICB0WzI5NjhdID0gNzUyMjtcbiAgdFsyOTcwXSA9IDc1MjQ7XG4gIHRbMjk3MV0gPSA3NTI1O1xuICB0WzI5NzJdID0gNzUyNjtcbiAgdFsyOTc0XSA9IDc1Mjg7XG4gIHRbMjk3NV0gPSA3NTI5O1xuICB0WzI5NzZdID0gNzUzMDtcbiAgdFsyOTc4XSA9IDE1Mzc7XG4gIHRbMjk3OV0gPSAxNTM4O1xuICB0WzI5ODBdID0gMTUzOTtcbiAgdFsyOTgyXSA9IDE1NDk7XG4gIHRbMjk4M10gPSAxNTUxO1xuICB0WzI5ODRdID0gMTU1MjtcbiAgdFsyOTg2XSA9IDE1NTQ7XG4gIHRbMjk4N10gPSAxNTU1O1xuICB0WzI5ODhdID0gMTU1NjtcbiAgdFsyOTkwXSA9IDE2MjM7XG4gIHRbMjk5MV0gPSAxNjI0O1xuICB0WzI5OTVdID0gMTc3NTtcbiAgdFsyOTk5XSA9IDE3OTE7XG4gIHRbMzAwMl0gPSA2NDI5MDtcbiAgdFszMDAzXSA9IDY0MjkxO1xuICB0WzMwMDRdID0gNjQyOTI7XG4gIHRbMzAwNl0gPSA2NDI5NDtcbiAgdFszMDA3XSA9IDY0Mjk1O1xuICB0WzMwMDhdID0gNjQyOTY7XG4gIHRbMzAxMV0gPSAxOTAwO1xuICB0WzMwMTRdID0gODIyMztcbiAgdFszMDE1XSA9IDgyNDQ7XG4gIHRbMzAxN10gPSA3NTMyO1xuICB0WzMwMThdID0gNzUzMztcbiAgdFszMDE5XSA9IDc1MzQ7XG4gIHRbMzA3NV0gPSA3NTkwO1xuICB0WzMwNzZdID0gNzU5MTtcbiAgdFszMDc5XSA9IDc1OTQ7XG4gIHRbMzA4MF0gPSA3NTk1O1xuICB0WzMwODNdID0gNzU5ODtcbiAgdFszMDg0XSA9IDc1OTk7XG4gIHRbMzA4N10gPSA3NjAyO1xuICB0WzMwODhdID0gNzYwMztcbiAgdFszMDkxXSA9IDc2MDY7XG4gIHRbMzA5Ml0gPSA3NjA3O1xuICB0WzMwOTVdID0gNzYxMDtcbiAgdFszMDk2XSA9IDc2MTE7XG4gIHRbMzA5OV0gPSA3NjE0O1xuICB0WzMxMDBdID0gNzYxNTtcbiAgdFszMTAzXSA9IDc2MTg7XG4gIHRbMzEwNF0gPSA3NjE5O1xuICB0WzMxMDddID0gODMzNztcbiAgdFszMTA4XSA9IDgzMzg7XG4gIHRbMzExNl0gPSAxODg0O1xuICB0WzMxMTldID0gMTg4NTtcbiAgdFszMTIwXSA9IDE4ODU7XG4gIHRbMzEyM10gPSAxODg2O1xuICB0WzMxMjRdID0gMTg4NjtcbiAgdFszMTI3XSA9IDE4ODc7XG4gIHRbMzEyOF0gPSAxODg3O1xuICB0WzMxMzFdID0gMTg4ODtcbiAgdFszMTMyXSA9IDE4ODg7XG4gIHRbMzEzNV0gPSAxODg5O1xuICB0WzMxMzZdID0gMTg4OTtcbiAgdFszMTM5XSA9IDE4OTA7XG4gIHRbMzE0MF0gPSAxODkwO1xuICB0WzMxNDNdID0gMTg5MTtcbiAgdFszMTQ0XSA9IDE4OTE7XG4gIHRbMzE0N10gPSAxODkyO1xuICB0WzMxNDhdID0gMTg5MjtcbiAgdFszMTUzXSA9IDU4MDtcbiAgdFszMTU0XSA9IDU4MTtcbiAgdFszMTU3XSA9IDU4NDtcbiAgdFszMTU4XSA9IDU4NTtcbiAgdFszMTYxXSA9IDU4ODtcbiAgdFszMTYyXSA9IDU4OTtcbiAgdFszMTY1XSA9IDg5MTtcbiAgdFszMTY2XSA9IDg5MjtcbiAgdFszMTY5XSA9IDEyNzQ7XG4gIHRbMzE3MF0gPSAxMjc1O1xuICB0WzMxNzNdID0gMTI3ODtcbiAgdFszMTc0XSA9IDEyNzk7XG4gIHRbMzE4MV0gPSA3NjIyO1xuICB0WzMxODJdID0gNzYyMztcbiAgdFszMjgyXSA9IDExNzk5O1xuICB0WzMzMTZdID0gNTc4O1xuICB0WzMzNzldID0gNDI3ODU7XG4gIHRbMzM5M10gPSAxMTU5O1xuICB0WzM0MTZdID0gODM3Nztcbn0pO1xuZXhwb3J0cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSBnZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM7XG5jb25zdCBnZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2sgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICB0WzIyN10gPSAzMjI7XG4gIHRbMjY0XSA9IDI2MTtcbiAgdFsyOTFdID0gMzQ2O1xufSk7XG5leHBvcnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9IGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaztcbmNvbnN0IGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHRbMV0gPSAzMjtcbiAgdFs0XSA9IDY1O1xuICB0WzE3XSA9IDY2O1xuICB0WzE4XSA9IDY3O1xuICB0WzI0XSA9IDY4O1xuICB0WzI4XSA9IDY5O1xuICB0WzM4XSA9IDcwO1xuICB0WzM5XSA9IDcxO1xuICB0WzQ0XSA9IDcyO1xuICB0WzQ3XSA9IDczO1xuICB0WzU4XSA9IDc0O1xuICB0WzYwXSA9IDc1O1xuICB0WzYyXSA9IDc2O1xuICB0WzY4XSA9IDc3O1xuICB0WzY5XSA9IDc4O1xuICB0Wzc1XSA9IDc5O1xuICB0Wzg3XSA9IDgwO1xuICB0Wzg5XSA9IDgxO1xuICB0WzkwXSA9IDgyO1xuICB0Wzk0XSA9IDgzO1xuICB0WzEwMF0gPSA4NDtcbiAgdFsxMDRdID0gODU7XG4gIHRbMTE1XSA9IDg2O1xuICB0WzExNl0gPSA4NztcbiAgdFsxMjFdID0gODg7XG4gIHRbMTIyXSA9IDg5O1xuICB0WzEyN10gPSA5MDtcbiAgdFsyNThdID0gOTc7XG4gIHRbMjY4XSA9IDI2MTtcbiAgdFsyNzFdID0gOTg7XG4gIHRbMjcyXSA9IDk5O1xuICB0WzI3M10gPSAyNjM7XG4gIHRbMjgyXSA9IDEwMDtcbiAgdFsyODZdID0gMTAxO1xuICB0WzI5NV0gPSAyODE7XG4gIHRbMjk2XSA9IDEwMjtcbiAgdFszMzZdID0gMTAzO1xuICB0WzM0Nl0gPSAxMDQ7XG4gIHRbMzQ5XSA9IDEwNTtcbiAgdFszNjFdID0gMTA2O1xuICB0WzM2NF0gPSAxMDc7XG4gIHRbMzY3XSA9IDEwODtcbiAgdFszNzFdID0gMzIyO1xuICB0WzM3M10gPSAxMDk7XG4gIHRbMzc0XSA9IDExMDtcbiAgdFszODFdID0gMTExO1xuICB0WzM4M10gPSAyNDM7XG4gIHRbMzkzXSA9IDExMjtcbiAgdFszOTVdID0gMTEzO1xuICB0WzM5Nl0gPSAxMTQ7XG4gIHRbNDAwXSA9IDExNTtcbiAgdFs0MDFdID0gMzQ3O1xuICB0WzQxMF0gPSAxMTY7XG4gIHRbNDM3XSA9IDExNztcbiAgdFs0NDhdID0gMTE4O1xuICB0WzQ0OV0gPSAxMTk7XG4gIHRbNDU0XSA9IDEyMDtcbiAgdFs0NTVdID0gMTIxO1xuICB0WzQ2MF0gPSAxMjI7XG4gIHRbNDYzXSA9IDM4MDtcbiAgdFs4NTNdID0gNDQ7XG4gIHRbODU1XSA9IDU4O1xuICB0Wzg1Nl0gPSA0NjtcbiAgdFs4NzZdID0gNDc7XG4gIHRbODc4XSA9IDQ1O1xuICB0Wzg4Ml0gPSA0NTtcbiAgdFs4OTRdID0gNDA7XG4gIHRbODk1XSA9IDQxO1xuICB0Wzg5Nl0gPSA5MTtcbiAgdFs4OTddID0gOTM7XG4gIHRbOTIzXSA9IDY0O1xuICB0WzEwMDRdID0gNDg7XG4gIHRbMTAwNV0gPSA0OTtcbiAgdFsxMDA2XSA9IDUwO1xuICB0WzEwMDddID0gNTE7XG4gIHRbMTAwOF0gPSA1MjtcbiAgdFsxMDA5XSA9IDUzO1xuICB0WzEwMTBdID0gNTQ7XG4gIHRbMTAxMV0gPSA1NTtcbiAgdFsxMDEyXSA9IDU2O1xuICB0WzEwMTNdID0gNTc7XG4gIHRbMTA4MV0gPSAzNztcbiAgdFsxMDg1XSA9IDQzO1xuICB0WzEwODZdID0gNDU7XG59KTtcbmV4cG9ydHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpID0gZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpO1xuXG4vKioqLyB9KSxcbi8qIDM1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cbnZhciBnZXRMb29rdXBUYWJsZUZhY3RvcnkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpLmdldExvb2t1cFRhYmxlRmFjdG9yeTtcbnZhciBnZXRTcGVjaWFsUFVBU3ltYm9scyA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkge1xuIHRbNjM3MjFdID0gMHgwMGE5O1xuIHRbNjMxOTNdID0gMHgwMGE5O1xuIHRbNjM3MjBdID0gMHgwMGFlO1xuIHRbNjMxOTRdID0gMHgwMGFlO1xuIHRbNjM3MjJdID0gMHgyMTIyO1xuIHRbNjMxOTVdID0gMHgyMTIyO1xuIHRbNjM3MjldID0gMHgyM2E3O1xuIHRbNjM3MzBdID0gMHgyM2E4O1xuIHRbNjM3MzFdID0gMHgyM2E5O1xuIHRbNjM3NDBdID0gMHgyM2FiO1xuIHRbNjM3NDFdID0gMHgyM2FjO1xuIHRbNjM3NDJdID0gMHgyM2FkO1xuIHRbNjM3MjZdID0gMHgyM2ExO1xuIHRbNjM3MjddID0gMHgyM2EyO1xuIHRbNjM3MjhdID0gMHgyM2EzO1xuIHRbNjM3MzddID0gMHgyM2E0O1xuIHRbNjM3MzhdID0gMHgyM2E1O1xuIHRbNjM3MzldID0gMHgyM2E2O1xuIHRbNjM3MjNdID0gMHgyMzliO1xuIHRbNjM3MjRdID0gMHgyMzljO1xuIHRbNjM3MjVdID0gMHgyMzlkO1xuIHRbNjM3MzRdID0gMHgyMzllO1xuIHRbNjM3MzVdID0gMHgyMzlmO1xuIHRbNjM3MzZdID0gMHgyM2EwO1xufSk7XG5mdW5jdGlvbiBtYXBTcGVjaWFsVW5pY29kZVZhbHVlcyhjb2RlKSB7XG4gaWYgKGNvZGUgPj0gMHhmZmYwICYmIGNvZGUgPD0gMHhmZmZmKSB7XG4gIHJldHVybiAwO1xuIH0gZWxzZSBpZiAoY29kZSA+PSAweGY2MDAgJiYgY29kZSA8PSAweGY4ZmYpIHtcbiAgcmV0dXJuIGdldFNwZWNpYWxQVUFTeW1ib2xzKClbY29kZV0gfHwgY29kZTtcbiB9IGVsc2UgaWYgKGNvZGUgPT09IDB4MDBhZCkge1xuICByZXR1cm4gMHgwMDJkO1xuIH1cbiByZXR1cm4gY29kZTtcbn1cbmZ1bmN0aW9uIGdldFVuaWNvZGVGb3JHbHlwaChuYW1lLCBnbHlwaHNVbmljb2RlTWFwKSB7XG4gdmFyIHVuaWNvZGUgPSBnbHlwaHNVbmljb2RlTWFwW25hbWVdO1xuIGlmICh1bmljb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHVuaWNvZGU7XG4gfVxuIGlmICghbmFtZSkge1xuICByZXR1cm4gLTE7XG4gfVxuIGlmIChuYW1lWzBdID09PSBcInVcIikge1xuICB2YXIgbmFtZUxlbiA9IG5hbWUubGVuZ3RoLCBoZXhTdHI7XG4gIGlmIChuYW1lTGVuID09PSA3ICYmIG5hbWVbMV0gPT09IFwiblwiICYmIG5hbWVbMl0gPT09IFwiaVwiKSB7XG4gICBoZXhTdHIgPSBuYW1lLnN1YnN0cmluZygzKTtcbiAgfSBlbHNlIGlmIChuYW1lTGVuID49IDUgJiYgbmFtZUxlbiA8PSA3KSB7XG4gICBoZXhTdHIgPSBuYW1lLnN1YnN0cmluZygxKTtcbiAgfSBlbHNlIHtcbiAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoaGV4U3RyID09PSBoZXhTdHIudG9VcHBlckNhc2UoKSkge1xuICAgdW5pY29kZSA9IHBhcnNlSW50KGhleFN0ciwgMTYpO1xuICAgaWYgKHVuaWNvZGUgPj0gMCkge1xuICAgIHJldHVybiB1bmljb2RlO1xuICAgfVxuICB9XG4gfVxuIHJldHVybiAtMTtcbn1cbnZhciBVbmljb2RlUmFuZ2VzID0gW1xuIHtcbiAgYmVnaW46IDB4MDAwMCxcbiAgZW5kOiAweDAwN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDA4MCxcbiAgZW5kOiAweDAwZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDEwMCxcbiAgZW5kOiAweDAxN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDE4MCxcbiAgZW5kOiAweDAyNGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDI1MCxcbiAgZW5kOiAweDAyYWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDJiMCxcbiAgZW5kOiAweDAyZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDMwMCxcbiAgZW5kOiAweDAzNmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDM3MCxcbiAgZW5kOiAweDAzZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MmM4MCxcbiAgZW5kOiAweDJjZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDQwMCxcbiAgZW5kOiAweDA0ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDUzMCxcbiAgZW5kOiAweDA1OGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDU5MCxcbiAgZW5kOiAweDA1ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTUwMCxcbiAgZW5kOiAweGE2M2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDYwMCxcbiAgZW5kOiAweDA2ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDdjMCxcbiAgZW5kOiAweDA3ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDkwMCxcbiAgZW5kOiAweDA5N2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDk4MCxcbiAgZW5kOiAweDA5ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGEwMCxcbiAgZW5kOiAweDBhN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGE4MCxcbiAgZW5kOiAweDBhZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGIwMCxcbiAgZW5kOiAweDBiN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGI4MCxcbiAgZW5kOiAweDBiZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGMwMCxcbiAgZW5kOiAweDBjN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGM4MCxcbiAgZW5kOiAweDBjZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGQwMCxcbiAgZW5kOiAweDBkN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGUwMCxcbiAgZW5kOiAweDBlN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGU4MCxcbiAgZW5kOiAweDBlZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTBhMCxcbiAgZW5kOiAweDEwZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWIwMCxcbiAgZW5kOiAweDFiN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTEwMCxcbiAgZW5kOiAweDExZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWUwMCxcbiAgZW5kOiAweDFlZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWYwMCxcbiAgZW5kOiAweDFmZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjAwMCxcbiAgZW5kOiAweDIwNmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjA3MCxcbiAgZW5kOiAweDIwOWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjBhMCxcbiAgZW5kOiAweDIwY2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjBkMCxcbiAgZW5kOiAweDIwZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjEwMCxcbiAgZW5kOiAweDIxNGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjE1MCxcbiAgZW5kOiAweDIxOGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjE5MCxcbiAgZW5kOiAweDIxZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjIwMCxcbiAgZW5kOiAweDIyZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjMwMCxcbiAgZW5kOiAweDIzZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjQwMCxcbiAgZW5kOiAweDI0M2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjQ0MCxcbiAgZW5kOiAweDI0NWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjQ2MCxcbiAgZW5kOiAweDI0ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjUwMCxcbiAgZW5kOiAweDI1N2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjU4MCxcbiAgZW5kOiAweDI1OWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjVhMCxcbiAgZW5kOiAweDI1ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjYwMCxcbiAgZW5kOiAweDI2ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjcwMCxcbiAgZW5kOiAweDI3YmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzAwMCxcbiAgZW5kOiAweDMwM2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzA0MCxcbiAgZW5kOiAweDMwOWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzBhMCxcbiAgZW5kOiAweDMwZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzEwMCxcbiAgZW5kOiAweDMxMmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzEzMCxcbiAgZW5kOiAweDMxOGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTg0MCxcbiAgZW5kOiAweGE4N2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzIwMCxcbiAgZW5kOiAweDMyZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzMwMCxcbiAgZW5kOiAweDMzZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YWMwMCxcbiAgZW5kOiAweGQ3YWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZDgwMCxcbiAgZW5kOiAweGRmZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTA5MDAsXG4gIGVuZDogMHgxMDkxZlxuIH0sXG4ge1xuICBiZWdpbjogMHg0ZTAwLFxuICBlbmQ6IDB4OWZmZlxuIH0sXG4ge1xuICBiZWdpbjogMHhlMDAwLFxuICBlbmQ6IDB4ZjhmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgzMWMwLFxuICBlbmQ6IDB4MzFlZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmYjAwLFxuICBlbmQ6IDB4ZmI0ZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmYjUwLFxuICBlbmQ6IDB4ZmRmZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZTIwLFxuICBlbmQ6IDB4ZmUyZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZTEwLFxuICBlbmQ6IDB4ZmUxZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZTUwLFxuICBlbmQ6IDB4ZmU2ZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZTcwLFxuICBlbmQ6IDB4ZmVmZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZjAwLFxuICBlbmQ6IDB4ZmZlZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZmYwLFxuICBlbmQ6IDB4ZmZmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgwZjAwLFxuICBlbmQ6IDB4MGZmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgwNzAwLFxuICBlbmQ6IDB4MDc0ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgwNzgwLFxuICBlbmQ6IDB4MDdiZlxuIH0sXG4ge1xuICBiZWdpbjogMHgwZDgwLFxuICBlbmQ6IDB4MGRmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDAwLFxuICBlbmQ6IDB4MTA5ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMjAwLFxuICBlbmQ6IDB4MTM3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxM2EwLFxuICBlbmQ6IDB4MTNmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxNDAwLFxuICBlbmQ6IDB4MTY3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxNjgwLFxuICBlbmQ6IDB4MTY5ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxNmEwLFxuICBlbmQ6IDB4MTZmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxNzgwLFxuICBlbmQ6IDB4MTdmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxODAwLFxuICBlbmQ6IDB4MThhZlxuIH0sXG4ge1xuICBiZWdpbjogMHgyODAwLFxuICBlbmQ6IDB4MjhmZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhMDAwLFxuICBlbmQ6IDB4YTQ4ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxNzAwLFxuICBlbmQ6IDB4MTcxZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDMwMCxcbiAgZW5kOiAweDEwMzJmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwMzMwLFxuICBlbmQ6IDB4MTAzNGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTA0MDAsXG4gIGVuZDogMHgxMDQ0ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxZDAwMCxcbiAgZW5kOiAweDFkMGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFkNDAwLFxuICBlbmQ6IDB4MWQ3ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmYwMDAsXG4gIGVuZDogMHhmZmZmZFxuIH0sXG4ge1xuICBiZWdpbjogMHhmZTAwLFxuICBlbmQ6IDB4ZmUwZlxuIH0sXG4ge1xuICBiZWdpbjogMHhlMDAwMCxcbiAgZW5kOiAweGUwMDdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDE5MDAsXG4gIGVuZDogMHgxOTRmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDE5NTAsXG4gIGVuZDogMHgxOTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDE5ODAsXG4gIGVuZDogMHgxOWRmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFhMDAsXG4gIGVuZDogMHgxYTFmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDJjMDAsXG4gIGVuZDogMHgyYzVmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDJkMzAsXG4gIGVuZDogMHgyZDdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDRkYzAsXG4gIGVuZDogMHg0ZGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGE4MDAsXG4gIGVuZDogMHhhODJmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwMDAwLFxuICBlbmQ6IDB4MTAwN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAxNDAsXG4gIGVuZDogMHgxMDE4ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDM4MCxcbiAgZW5kOiAweDEwMzlmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwM2EwLFxuICBlbmQ6IDB4MTAzZGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTA0NTAsXG4gIGVuZDogMHgxMDQ3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDQ4MCxcbiAgZW5kOiAweDEwNGFmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwODAwLFxuICBlbmQ6IDB4MTA4M2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTBhMDAsXG4gIGVuZDogMHgxMGE1ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxZDMwMCxcbiAgZW5kOiAweDFkMzVmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEyMDAwLFxuICBlbmQ6IDB4MTIzZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWQzNjAsXG4gIGVuZDogMHgxZDM3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxYjgwLFxuICBlbmQ6IDB4MWJiZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxYzAwLFxuICBlbmQ6IDB4MWM0ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxYzUwLFxuICBlbmQ6IDB4MWM3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhODgwLFxuICBlbmQ6IDB4YThkZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhOTAwLFxuICBlbmQ6IDB4YTkyZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhOTMwLFxuICBlbmQ6IDB4YTk1ZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhYTAwLFxuICBlbmQ6IDB4YWE1ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDE5MCxcbiAgZW5kOiAweDEwMWNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwMWQwLFxuICBlbmQ6IDB4MTAxZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAyYTAsXG4gIGVuZDogMHgxMDJkZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxZjAzMCxcbiAgZW5kOiAweDFmMDlmXG4gfVxuXTtcbmZ1bmN0aW9uIGdldFVuaWNvZGVSYW5nZUZvcih2YWx1ZSkge1xuIGZvciAodmFyIGkgPSAwLCBpaSA9IFVuaWNvZGVSYW5nZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICB2YXIgcmFuZ2UgPSBVbmljb2RlUmFuZ2VzW2ldO1xuICBpZiAodmFsdWUgPj0gcmFuZ2UuYmVnaW4gJiYgdmFsdWUgPCByYW5nZS5lbmQpIHtcbiAgIHJldHVybiBpO1xuICB9XG4gfVxuIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIGlzUlRMUmFuZ2VGb3IodmFsdWUpIHtcbiB2YXIgcmFuZ2UgPSBVbmljb2RlUmFuZ2VzWzEzXTtcbiBpZiAodmFsdWUgPj0gcmFuZ2UuYmVnaW4gJiYgdmFsdWUgPCByYW5nZS5lbmQpIHtcbiAgcmV0dXJuIHRydWU7XG4gfVxuIHJhbmdlID0gVW5pY29kZVJhbmdlc1sxMV07XG4gaWYgKHZhbHVlID49IHJhbmdlLmJlZ2luICYmIHZhbHVlIDwgcmFuZ2UuZW5kKSB7XG4gIHJldHVybiB0cnVlO1xuIH1cbiByZXR1cm4gZmFsc2U7XG59XG52YXIgZ2V0Tm9ybWFsaXplZFVuaWNvZGVzID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7XG4gdFtcIlxcdTAwQThcIl0gPSBcIlxcdTAwMjBcXHUwMzA4XCI7XG4gdFtcIlxcdTAwQUZcIl0gPSBcIlxcdTAwMjBcXHUwMzA0XCI7XG4gdFtcIlxcdTAwQjRcIl0gPSBcIlxcdTAwMjBcXHUwMzAxXCI7XG4gdFtcIlxcdTAwQjVcIl0gPSBcIlxcdTAzQkNcIjtcbiB0W1wiXFx1MDBCOFwiXSA9IFwiXFx1MDAyMFxcdTAzMjdcIjtcbiB0W1wiXFx1MDEzMlwiXSA9IFwiXFx1MDA0OVxcdTAwNEFcIjtcbiB0W1wiXFx1MDEzM1wiXSA9IFwiXFx1MDA2OVxcdTAwNkFcIjtcbiB0W1wiXFx1MDEzRlwiXSA9IFwiXFx1MDA0Q1xcdTAwQjdcIjtcbiB0W1wiXFx1MDE0MFwiXSA9IFwiXFx1MDA2Q1xcdTAwQjdcIjtcbiB0W1wiXFx1MDE0OVwiXSA9IFwiXFx1MDJCQ1xcdTAwNkVcIjtcbiB0W1wiXFx1MDE3RlwiXSA9IFwiXFx1MDA3M1wiO1xuIHRbXCJcXHUwMUM0XCJdID0gXCJcXHUwMDQ0XFx1MDE3RFwiO1xuIHRbXCJcXHUwMUM1XCJdID0gXCJcXHUwMDQ0XFx1MDE3RVwiO1xuIHRbXCJcXHUwMUM2XCJdID0gXCJcXHUwMDY0XFx1MDE3RVwiO1xuIHRbXCJcXHUwMUM3XCJdID0gXCJcXHUwMDRDXFx1MDA0QVwiO1xuIHRbXCJcXHUwMUM4XCJdID0gXCJcXHUwMDRDXFx1MDA2QVwiO1xuIHRbXCJcXHUwMUM5XCJdID0gXCJcXHUwMDZDXFx1MDA2QVwiO1xuIHRbXCJcXHUwMUNBXCJdID0gXCJcXHUwMDRFXFx1MDA0QVwiO1xuIHRbXCJcXHUwMUNCXCJdID0gXCJcXHUwMDRFXFx1MDA2QVwiO1xuIHRbXCJcXHUwMUNDXCJdID0gXCJcXHUwMDZFXFx1MDA2QVwiO1xuIHRbXCJcXHUwMUYxXCJdID0gXCJcXHUwMDQ0XFx1MDA1QVwiO1xuIHRbXCJcXHUwMUYyXCJdID0gXCJcXHUwMDQ0XFx1MDA3QVwiO1xuIHRbXCJcXHUwMUYzXCJdID0gXCJcXHUwMDY0XFx1MDA3QVwiO1xuIHRbXCJcXHUwMkQ4XCJdID0gXCJcXHUwMDIwXFx1MDMwNlwiO1xuIHRbXCJcXHUwMkQ5XCJdID0gXCJcXHUwMDIwXFx1MDMwN1wiO1xuIHRbXCJcXHUwMkRBXCJdID0gXCJcXHUwMDIwXFx1MDMwQVwiO1xuIHRbXCJcXHUwMkRCXCJdID0gXCJcXHUwMDIwXFx1MDMyOFwiO1xuIHRbXCJcXHUwMkRDXCJdID0gXCJcXHUwMDIwXFx1MDMwM1wiO1xuIHRbXCJcXHUwMkREXCJdID0gXCJcXHUwMDIwXFx1MDMwQlwiO1xuIHRbXCJcXHUwMzdBXCJdID0gXCJcXHUwMDIwXFx1MDM0NVwiO1xuIHRbXCJcXHUwMzg0XCJdID0gXCJcXHUwMDIwXFx1MDMwMVwiO1xuIHRbXCJcXHUwM0QwXCJdID0gXCJcXHUwM0IyXCI7XG4gdFtcIlxcdTAzRDFcIl0gPSBcIlxcdTAzQjhcIjtcbiB0W1wiXFx1MDNEMlwiXSA9IFwiXFx1MDNBNVwiO1xuIHRbXCJcXHUwM0Q1XCJdID0gXCJcXHUwM0M2XCI7XG4gdFtcIlxcdTAzRDZcIl0gPSBcIlxcdTAzQzBcIjtcbiB0W1wiXFx1MDNGMFwiXSA9IFwiXFx1MDNCQVwiO1xuIHRbXCJcXHUwM0YxXCJdID0gXCJcXHUwM0MxXCI7XG4gdFtcIlxcdTAzRjJcIl0gPSBcIlxcdTAzQzJcIjtcbiB0W1wiXFx1MDNGNFwiXSA9IFwiXFx1MDM5OFwiO1xuIHRbXCJcXHUwM0Y1XCJdID0gXCJcXHUwM0I1XCI7XG4gdFtcIlxcdTAzRjlcIl0gPSBcIlxcdTAzQTNcIjtcbiB0W1wiXFx1MDU4N1wiXSA9IFwiXFx1MDU2NVxcdTA1ODJcIjtcbiB0W1wiXFx1MDY3NVwiXSA9IFwiXFx1MDYyN1xcdTA2NzRcIjtcbiB0W1wiXFx1MDY3NlwiXSA9IFwiXFx1MDY0OFxcdTA2NzRcIjtcbiB0W1wiXFx1MDY3N1wiXSA9IFwiXFx1MDZDN1xcdTA2NzRcIjtcbiB0W1wiXFx1MDY3OFwiXSA9IFwiXFx1MDY0QVxcdTA2NzRcIjtcbiB0W1wiXFx1MEUzM1wiXSA9IFwiXFx1MEU0RFxcdTBFMzJcIjtcbiB0W1wiXFx1MEVCM1wiXSA9IFwiXFx1MEVDRFxcdTBFQjJcIjtcbiB0W1wiXFx1MEVEQ1wiXSA9IFwiXFx1MEVBQlxcdTBFOTlcIjtcbiB0W1wiXFx1MEVERFwiXSA9IFwiXFx1MEVBQlxcdTBFQTFcIjtcbiB0W1wiXFx1MEY3N1wiXSA9IFwiXFx1MEZCMlxcdTBGODFcIjtcbiB0W1wiXFx1MEY3OVwiXSA9IFwiXFx1MEZCM1xcdTBGODFcIjtcbiB0W1wiXFx1MUU5QVwiXSA9IFwiXFx1MDA2MVxcdTAyQkVcIjtcbiB0W1wiXFx1MUZCRFwiXSA9IFwiXFx1MDAyMFxcdTAzMTNcIjtcbiB0W1wiXFx1MUZCRlwiXSA9IFwiXFx1MDAyMFxcdTAzMTNcIjtcbiB0W1wiXFx1MUZDMFwiXSA9IFwiXFx1MDAyMFxcdTAzNDJcIjtcbiB0W1wiXFx1MUZGRVwiXSA9IFwiXFx1MDAyMFxcdTAzMTRcIjtcbiB0W1wiXFx1MjAwMlwiXSA9IFwiXFx1MDAyMFwiO1xuIHRbXCJcXHUyMDAzXCJdID0gXCJcXHUwMDIwXCI7XG4gdFtcIlxcdTIwMDRcIl0gPSBcIlxcdTAwMjBcIjtcbiB0W1wiXFx1MjAwNVwiXSA9IFwiXFx1MDAyMFwiO1xuIHRbXCJcXHUyMDA2XCJdID0gXCJcXHUwMDIwXCI7XG4gdFtcIlxcdTIwMDhcIl0gPSBcIlxcdTAwMjBcIjtcbiB0W1wiXFx1MjAwOVwiXSA9IFwiXFx1MDAyMFwiO1xuIHRbXCJcXHUyMDBBXCJdID0gXCJcXHUwMDIwXCI7XG4gdFtcIlxcdTIwMTdcIl0gPSBcIlxcdTAwMjBcXHUwMzMzXCI7XG4gdFtcIlxcdTIwMjRcIl0gPSBcIlxcdTAwMkVcIjtcbiB0W1wiXFx1MjAyNVwiXSA9IFwiXFx1MDAyRVxcdTAwMkVcIjtcbiB0W1wiXFx1MjAyNlwiXSA9IFwiXFx1MDAyRVxcdTAwMkVcXHUwMDJFXCI7XG4gdFtcIlxcdTIwMzNcIl0gPSBcIlxcdTIwMzJcXHUyMDMyXCI7XG4gdFtcIlxcdTIwMzRcIl0gPSBcIlxcdTIwMzJcXHUyMDMyXFx1MjAzMlwiO1xuIHRbXCJcXHUyMDM2XCJdID0gXCJcXHUyMDM1XFx1MjAzNVwiO1xuIHRbXCJcXHUyMDM3XCJdID0gXCJcXHUyMDM1XFx1MjAzNVxcdTIwMzVcIjtcbiB0W1wiXFx1MjAzQ1wiXSA9IFwiXFx1MDAyMVxcdTAwMjFcIjtcbiB0W1wiXFx1MjAzRVwiXSA9IFwiXFx1MDAyMFxcdTAzMDVcIjtcbiB0W1wiXFx1MjA0N1wiXSA9IFwiXFx1MDAzRlxcdTAwM0ZcIjtcbiB0W1wiXFx1MjA0OFwiXSA9IFwiXFx1MDAzRlxcdTAwMjFcIjtcbiB0W1wiXFx1MjA0OVwiXSA9IFwiXFx1MDAyMVxcdTAwM0ZcIjtcbiB0W1wiXFx1MjA1N1wiXSA9IFwiXFx1MjAzMlxcdTIwMzJcXHUyMDMyXFx1MjAzMlwiO1xuIHRbXCJcXHUyMDVGXCJdID0gXCJcXHUwMDIwXCI7XG4gdFtcIlxcdTIwQThcIl0gPSBcIlxcdTAwNTJcXHUwMDczXCI7XG4gdFtcIlxcdTIxMDBcIl0gPSBcIlxcdTAwNjFcXHUwMDJGXFx1MDA2M1wiO1xuIHRbXCJcXHUyMTAxXCJdID0gXCJcXHUwMDYxXFx1MDAyRlxcdTAwNzNcIjtcbiB0W1wiXFx1MjEwM1wiXSA9IFwiXFx1MDBCMFxcdTAwNDNcIjtcbiB0W1wiXFx1MjEwNVwiXSA9IFwiXFx1MDA2M1xcdTAwMkZcXHUwMDZGXCI7XG4gdFtcIlxcdTIxMDZcIl0gPSBcIlxcdTAwNjNcXHUwMDJGXFx1MDA3NVwiO1xuIHRbXCJcXHUyMTA3XCJdID0gXCJcXHUwMTkwXCI7XG4gdFtcIlxcdTIxMDlcIl0gPSBcIlxcdTAwQjBcXHUwMDQ2XCI7XG4gdFtcIlxcdTIxMTZcIl0gPSBcIlxcdTAwNEVcXHUwMDZGXCI7XG4gdFtcIlxcdTIxMjFcIl0gPSBcIlxcdTAwNTRcXHUwMDQ1XFx1MDA0Q1wiO1xuIHRbXCJcXHUyMTM1XCJdID0gXCJcXHUwNUQwXCI7XG4gdFtcIlxcdTIxMzZcIl0gPSBcIlxcdTA1RDFcIjtcbiB0W1wiXFx1MjEzN1wiXSA9IFwiXFx1MDVEMlwiO1xuIHRbXCJcXHUyMTM4XCJdID0gXCJcXHUwNUQzXCI7XG4gdFtcIlxcdTIxM0JcIl0gPSBcIlxcdTAwNDZcXHUwMDQxXFx1MDA1OFwiO1xuIHRbXCJcXHUyMTYwXCJdID0gXCJcXHUwMDQ5XCI7XG4gdFtcIlxcdTIxNjFcIl0gPSBcIlxcdTAwNDlcXHUwMDQ5XCI7XG4gdFtcIlxcdTIxNjJcIl0gPSBcIlxcdTAwNDlcXHUwMDQ5XFx1MDA0OVwiO1xuIHRbXCJcXHUyMTYzXCJdID0gXCJcXHUwMDQ5XFx1MDA1NlwiO1xuIHRbXCJcXHUyMTY0XCJdID0gXCJcXHUwMDU2XCI7XG4gdFtcIlxcdTIxNjVcIl0gPSBcIlxcdTAwNTZcXHUwMDQ5XCI7XG4gdFtcIlxcdTIxNjZcIl0gPSBcIlxcdTAwNTZcXHUwMDQ5XFx1MDA0OVwiO1xuIHRbXCJcXHUyMTY3XCJdID0gXCJcXHUwMDU2XFx1MDA0OVxcdTAwNDlcXHUwMDQ5XCI7XG4gdFtcIlxcdTIxNjhcIl0gPSBcIlxcdTAwNDlcXHUwMDU4XCI7XG4gdFtcIlxcdTIxNjlcIl0gPSBcIlxcdTAwNThcIjtcbiB0W1wiXFx1MjE2QVwiXSA9IFwiXFx1MDA1OFxcdTAwNDlcIjtcbiB0W1wiXFx1MjE2QlwiXSA9IFwiXFx1MDA1OFxcdTAwNDlcXHUwMDQ5XCI7XG4gdFtcIlxcdTIxNkNcIl0gPSBcIlxcdTAwNENcIjtcbiB0W1wiXFx1MjE2RFwiXSA9IFwiXFx1MDA0M1wiO1xuIHRbXCJcXHUyMTZFXCJdID0gXCJcXHUwMDQ0XCI7XG4gdFtcIlxcdTIxNkZcIl0gPSBcIlxcdTAwNERcIjtcbiB0W1wiXFx1MjE3MFwiXSA9IFwiXFx1MDA2OVwiO1xuIHRbXCJcXHUyMTcxXCJdID0gXCJcXHUwMDY5XFx1MDA2OVwiO1xuIHRbXCJcXHUyMTcyXCJdID0gXCJcXHUwMDY5XFx1MDA2OVxcdTAwNjlcIjtcbiB0W1wiXFx1MjE3M1wiXSA9IFwiXFx1MDA2OVxcdTAwNzZcIjtcbiB0W1wiXFx1MjE3NFwiXSA9IFwiXFx1MDA3NlwiO1xuIHRbXCJcXHUyMTc1XCJdID0gXCJcXHUwMDc2XFx1MDA2OVwiO1xuIHRbXCJcXHUyMTc2XCJdID0gXCJcXHUwMDc2XFx1MDA2OVxcdTAwNjlcIjtcbiB0W1wiXFx1MjE3N1wiXSA9IFwiXFx1MDA3NlxcdTAwNjlcXHUwMDY5XFx1MDA2OVwiO1xuIHRbXCJcXHUyMTc4XCJdID0gXCJcXHUwMDY5XFx1MDA3OFwiO1xuIHRbXCJcXHUyMTc5XCJdID0gXCJcXHUwMDc4XCI7XG4gdFtcIlxcdTIxN0FcIl0gPSBcIlxcdTAwNzhcXHUwMDY5XCI7XG4gdFtcIlxcdTIxN0JcIl0gPSBcIlxcdTAwNzhcXHUwMDY5XFx1MDA2OVwiO1xuIHRbXCJcXHUyMTdDXCJdID0gXCJcXHUwMDZDXCI7XG4gdFtcIlxcdTIxN0RcIl0gPSBcIlxcdTAwNjNcIjtcbiB0W1wiXFx1MjE3RVwiXSA9IFwiXFx1MDA2NFwiO1xuIHRbXCJcXHUyMTdGXCJdID0gXCJcXHUwMDZEXCI7XG4gdFtcIlxcdTIyMkNcIl0gPSBcIlxcdTIyMkJcXHUyMjJCXCI7XG4gdFtcIlxcdTIyMkRcIl0gPSBcIlxcdTIyMkJcXHUyMjJCXFx1MjIyQlwiO1xuIHRbXCJcXHUyMjJGXCJdID0gXCJcXHUyMjJFXFx1MjIyRVwiO1xuIHRbXCJcXHUyMjMwXCJdID0gXCJcXHUyMjJFXFx1MjIyRVxcdTIyMkVcIjtcbiB0W1wiXFx1MjQ3NFwiXSA9IFwiXFx1MDAyOFxcdTAwMzFcXHUwMDI5XCI7XG4gdFtcIlxcdTI0NzVcIl0gPSBcIlxcdTAwMjhcXHUwMDMyXFx1MDAyOVwiO1xuIHRbXCJcXHUyNDc2XCJdID0gXCJcXHUwMDI4XFx1MDAzM1xcdTAwMjlcIjtcbiB0W1wiXFx1MjQ3N1wiXSA9IFwiXFx1MDAyOFxcdTAwMzRcXHUwMDI5XCI7XG4gdFtcIlxcdTI0NzhcIl0gPSBcIlxcdTAwMjhcXHUwMDM1XFx1MDAyOVwiO1xuIHRbXCJcXHUyNDc5XCJdID0gXCJcXHUwMDI4XFx1MDAzNlxcdTAwMjlcIjtcbiB0W1wiXFx1MjQ3QVwiXSA9IFwiXFx1MDAyOFxcdTAwMzdcXHUwMDI5XCI7XG4gdFtcIlxcdTI0N0JcIl0gPSBcIlxcdTAwMjhcXHUwMDM4XFx1MDAyOVwiO1xuIHRbXCJcXHUyNDdDXCJdID0gXCJcXHUwMDI4XFx1MDAzOVxcdTAwMjlcIjtcbiB0W1wiXFx1MjQ3RFwiXSA9IFwiXFx1MDAyOFxcdTAwMzFcXHUwMDMwXFx1MDAyOVwiO1xuIHRbXCJcXHUyNDdFXCJdID0gXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzFcXHUwMDI5XCI7XG4gdFtcIlxcdTI0N0ZcIl0gPSBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzMlxcdTAwMjlcIjtcbiB0W1wiXFx1MjQ4MFwiXSA9IFwiXFx1MDAyOFxcdTAwMzFcXHUwMDMzXFx1MDAyOVwiO1xuIHRbXCJcXHUyNDgxXCJdID0gXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzRcXHUwMDI5XCI7XG4gdFtcIlxcdTI0ODJcIl0gPSBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzNVxcdTAwMjlcIjtcbiB0W1wiXFx1MjQ4M1wiXSA9IFwiXFx1MDAyOFxcdTAwMzFcXHUwMDM2XFx1MDAyOVwiO1xuIHRbXCJcXHUyNDg0XCJdID0gXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzdcXHUwMDI5XCI7XG4gdFtcIlxcdTI0ODVcIl0gPSBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzOFxcdTAwMjlcIjtcbiB0W1wiXFx1MjQ4NlwiXSA9IFwiXFx1MDAyOFxcdTAwMzFcXHUwMDM5XFx1MDAyOVwiO1xuIHRbXCJcXHUyNDg3XCJdID0gXCJcXHUwMDI4XFx1MDAzMlxcdTAwMzBcXHUwMDI5XCI7XG4gdFtcIlxcdTI0ODhcIl0gPSBcIlxcdTAwMzFcXHUwMDJFXCI7XG4gdFtcIlxcdTI0ODlcIl0gPSBcIlxcdTAwMzJcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OEFcIl0gPSBcIlxcdTAwMzNcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OEJcIl0gPSBcIlxcdTAwMzRcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OENcIl0gPSBcIlxcdTAwMzVcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OERcIl0gPSBcIlxcdTAwMzZcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OEVcIl0gPSBcIlxcdTAwMzdcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OEZcIl0gPSBcIlxcdTAwMzhcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OTBcIl0gPSBcIlxcdTAwMzlcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OTFcIl0gPSBcIlxcdTAwMzFcXHUwMDMwXFx1MDAyRVwiO1xuIHRbXCJcXHUyNDkyXCJdID0gXCJcXHUwMDMxXFx1MDAzMVxcdTAwMkVcIjtcbiB0W1wiXFx1MjQ5M1wiXSA9IFwiXFx1MDAzMVxcdTAwMzJcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OTRcIl0gPSBcIlxcdTAwMzFcXHUwMDMzXFx1MDAyRVwiO1xuIHRbXCJcXHUyNDk1XCJdID0gXCJcXHUwMDMxXFx1MDAzNFxcdTAwMkVcIjtcbiB0W1wiXFx1MjQ5NlwiXSA9IFwiXFx1MDAzMVxcdTAwMzVcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OTdcIl0gPSBcIlxcdTAwMzFcXHUwMDM2XFx1MDAyRVwiO1xuIHRbXCJcXHUyNDk4XCJdID0gXCJcXHUwMDMxXFx1MDAzN1xcdTAwMkVcIjtcbiB0W1wiXFx1MjQ5OVwiXSA9IFwiXFx1MDAzMVxcdTAwMzhcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OUFcIl0gPSBcIlxcdTAwMzFcXHUwMDM5XFx1MDAyRVwiO1xuIHRbXCJcXHUyNDlCXCJdID0gXCJcXHUwMDMyXFx1MDAzMFxcdTAwMkVcIjtcbiB0W1wiXFx1MjQ5Q1wiXSA9IFwiXFx1MDAyOFxcdTAwNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTI0OURcIl0gPSBcIlxcdTAwMjhcXHUwMDYyXFx1MDAyOVwiO1xuIHRbXCJcXHUyNDlFXCJdID0gXCJcXHUwMDI4XFx1MDA2M1xcdTAwMjlcIjtcbiB0W1wiXFx1MjQ5RlwiXSA9IFwiXFx1MDAyOFxcdTAwNjRcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QTBcIl0gPSBcIlxcdTAwMjhcXHUwMDY1XFx1MDAyOVwiO1xuIHRbXCJcXHUyNEExXCJdID0gXCJcXHUwMDI4XFx1MDA2NlxcdTAwMjlcIjtcbiB0W1wiXFx1MjRBMlwiXSA9IFwiXFx1MDAyOFxcdTAwNjdcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QTNcIl0gPSBcIlxcdTAwMjhcXHUwMDY4XFx1MDAyOVwiO1xuIHRbXCJcXHUyNEE0XCJdID0gXCJcXHUwMDI4XFx1MDA2OVxcdTAwMjlcIjtcbiB0W1wiXFx1MjRBNVwiXSA9IFwiXFx1MDAyOFxcdTAwNkFcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QTZcIl0gPSBcIlxcdTAwMjhcXHUwMDZCXFx1MDAyOVwiO1xuIHRbXCJcXHUyNEE3XCJdID0gXCJcXHUwMDI4XFx1MDA2Q1xcdTAwMjlcIjtcbiB0W1wiXFx1MjRBOFwiXSA9IFwiXFx1MDAyOFxcdTAwNkRcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QTlcIl0gPSBcIlxcdTAwMjhcXHUwMDZFXFx1MDAyOVwiO1xuIHRbXCJcXHUyNEFBXCJdID0gXCJcXHUwMDI4XFx1MDA2RlxcdTAwMjlcIjtcbiB0W1wiXFx1MjRBQlwiXSA9IFwiXFx1MDAyOFxcdTAwNzBcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QUNcIl0gPSBcIlxcdTAwMjhcXHUwMDcxXFx1MDAyOVwiO1xuIHRbXCJcXHUyNEFEXCJdID0gXCJcXHUwMDI4XFx1MDA3MlxcdTAwMjlcIjtcbiB0W1wiXFx1MjRBRVwiXSA9IFwiXFx1MDAyOFxcdTAwNzNcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QUZcIl0gPSBcIlxcdTAwMjhcXHUwMDc0XFx1MDAyOVwiO1xuIHRbXCJcXHUyNEIwXCJdID0gXCJcXHUwMDI4XFx1MDA3NVxcdTAwMjlcIjtcbiB0W1wiXFx1MjRCMVwiXSA9IFwiXFx1MDAyOFxcdTAwNzZcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QjJcIl0gPSBcIlxcdTAwMjhcXHUwMDc3XFx1MDAyOVwiO1xuIHRbXCJcXHUyNEIzXCJdID0gXCJcXHUwMDI4XFx1MDA3OFxcdTAwMjlcIjtcbiB0W1wiXFx1MjRCNFwiXSA9IFwiXFx1MDAyOFxcdTAwNzlcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QjVcIl0gPSBcIlxcdTAwMjhcXHUwMDdBXFx1MDAyOVwiO1xuIHRbXCJcXHUyQTBDXCJdID0gXCJcXHUyMjJCXFx1MjIyQlxcdTIyMkJcXHUyMjJCXCI7XG4gdFtcIlxcdTJBNzRcIl0gPSBcIlxcdTAwM0FcXHUwMDNBXFx1MDAzRFwiO1xuIHRbXCJcXHUyQTc1XCJdID0gXCJcXHUwMDNEXFx1MDAzRFwiO1xuIHRbXCJcXHUyQTc2XCJdID0gXCJcXHUwMDNEXFx1MDAzRFxcdTAwM0RcIjtcbiB0W1wiXFx1MkU5RlwiXSA9IFwiXFx1NkJDRFwiO1xuIHRbXCJcXHUyRUYzXCJdID0gXCJcXHU5RjlGXCI7XG4gdFtcIlxcdTJGMDBcIl0gPSBcIlxcdTRFMDBcIjtcbiB0W1wiXFx1MkYwMVwiXSA9IFwiXFx1NEUyOFwiO1xuIHRbXCJcXHUyRjAyXCJdID0gXCJcXHU0RTM2XCI7XG4gdFtcIlxcdTJGMDNcIl0gPSBcIlxcdTRFM0ZcIjtcbiB0W1wiXFx1MkYwNFwiXSA9IFwiXFx1NEU1OVwiO1xuIHRbXCJcXHUyRjA1XCJdID0gXCJcXHU0RTg1XCI7XG4gdFtcIlxcdTJGMDZcIl0gPSBcIlxcdTRFOENcIjtcbiB0W1wiXFx1MkYwN1wiXSA9IFwiXFx1NEVBMFwiO1xuIHRbXCJcXHUyRjA4XCJdID0gXCJcXHU0RUJBXCI7XG4gdFtcIlxcdTJGMDlcIl0gPSBcIlxcdTUxM0ZcIjtcbiB0W1wiXFx1MkYwQVwiXSA9IFwiXFx1NTE2NVwiO1xuIHRbXCJcXHUyRjBCXCJdID0gXCJcXHU1MTZCXCI7XG4gdFtcIlxcdTJGMENcIl0gPSBcIlxcdTUxODJcIjtcbiB0W1wiXFx1MkYwRFwiXSA9IFwiXFx1NTE5NlwiO1xuIHRbXCJcXHUyRjBFXCJdID0gXCJcXHU1MUFCXCI7XG4gdFtcIlxcdTJGMEZcIl0gPSBcIlxcdTUxRTBcIjtcbiB0W1wiXFx1MkYxMFwiXSA9IFwiXFx1NTFGNVwiO1xuIHRbXCJcXHUyRjExXCJdID0gXCJcXHU1MjAwXCI7XG4gdFtcIlxcdTJGMTJcIl0gPSBcIlxcdTUyOUJcIjtcbiB0W1wiXFx1MkYxM1wiXSA9IFwiXFx1NTJGOVwiO1xuIHRbXCJcXHUyRjE0XCJdID0gXCJcXHU1MzE1XCI7XG4gdFtcIlxcdTJGMTVcIl0gPSBcIlxcdTUzMUFcIjtcbiB0W1wiXFx1MkYxNlwiXSA9IFwiXFx1NTMzOFwiO1xuIHRbXCJcXHUyRjE3XCJdID0gXCJcXHU1MzQxXCI7XG4gdFtcIlxcdTJGMThcIl0gPSBcIlxcdTUzNUNcIjtcbiB0W1wiXFx1MkYxOVwiXSA9IFwiXFx1NTM2OVwiO1xuIHRbXCJcXHUyRjFBXCJdID0gXCJcXHU1MzgyXCI7XG4gdFtcIlxcdTJGMUJcIl0gPSBcIlxcdTUzQjZcIjtcbiB0W1wiXFx1MkYxQ1wiXSA9IFwiXFx1NTNDOFwiO1xuIHRbXCJcXHUyRjFEXCJdID0gXCJcXHU1M0UzXCI7XG4gdFtcIlxcdTJGMUVcIl0gPSBcIlxcdTU2RDdcIjtcbiB0W1wiXFx1MkYxRlwiXSA9IFwiXFx1NTcxRlwiO1xuIHRbXCJcXHUyRjIwXCJdID0gXCJcXHU1OEVCXCI7XG4gdFtcIlxcdTJGMjFcIl0gPSBcIlxcdTU5MDJcIjtcbiB0W1wiXFx1MkYyMlwiXSA9IFwiXFx1NTkwQVwiO1xuIHRbXCJcXHUyRjIzXCJdID0gXCJcXHU1OTE1XCI7XG4gdFtcIlxcdTJGMjRcIl0gPSBcIlxcdTU5MjdcIjtcbiB0W1wiXFx1MkYyNVwiXSA9IFwiXFx1NTk3M1wiO1xuIHRbXCJcXHUyRjI2XCJdID0gXCJcXHU1QjUwXCI7XG4gdFtcIlxcdTJGMjdcIl0gPSBcIlxcdTVCODBcIjtcbiB0W1wiXFx1MkYyOFwiXSA9IFwiXFx1NUJGOFwiO1xuIHRbXCJcXHUyRjI5XCJdID0gXCJcXHU1QzBGXCI7XG4gdFtcIlxcdTJGMkFcIl0gPSBcIlxcdTVDMjJcIjtcbiB0W1wiXFx1MkYyQlwiXSA9IFwiXFx1NUMzOFwiO1xuIHRbXCJcXHUyRjJDXCJdID0gXCJcXHU1QzZFXCI7XG4gdFtcIlxcdTJGMkRcIl0gPSBcIlxcdTVDNzFcIjtcbiB0W1wiXFx1MkYyRVwiXSA9IFwiXFx1NUREQlwiO1xuIHRbXCJcXHUyRjJGXCJdID0gXCJcXHU1REU1XCI7XG4gdFtcIlxcdTJGMzBcIl0gPSBcIlxcdTVERjFcIjtcbiB0W1wiXFx1MkYzMVwiXSA9IFwiXFx1NURGRVwiO1xuIHRbXCJcXHUyRjMyXCJdID0gXCJcXHU1RTcyXCI7XG4gdFtcIlxcdTJGMzNcIl0gPSBcIlxcdTVFN0FcIjtcbiB0W1wiXFx1MkYzNFwiXSA9IFwiXFx1NUU3RlwiO1xuIHRbXCJcXHUyRjM1XCJdID0gXCJcXHU1RUY0XCI7XG4gdFtcIlxcdTJGMzZcIl0gPSBcIlxcdTVFRkVcIjtcbiB0W1wiXFx1MkYzN1wiXSA9IFwiXFx1NUYwQlwiO1xuIHRbXCJcXHUyRjM4XCJdID0gXCJcXHU1RjEzXCI7XG4gdFtcIlxcdTJGMzlcIl0gPSBcIlxcdTVGNTBcIjtcbiB0W1wiXFx1MkYzQVwiXSA9IFwiXFx1NUY2MVwiO1xuIHRbXCJcXHUyRjNCXCJdID0gXCJcXHU1RjczXCI7XG4gdFtcIlxcdTJGM0NcIl0gPSBcIlxcdTVGQzNcIjtcbiB0W1wiXFx1MkYzRFwiXSA9IFwiXFx1NjIwOFwiO1xuIHRbXCJcXHUyRjNFXCJdID0gXCJcXHU2MjM2XCI7XG4gdFtcIlxcdTJGM0ZcIl0gPSBcIlxcdTYyNEJcIjtcbiB0W1wiXFx1MkY0MFwiXSA9IFwiXFx1NjUyRlwiO1xuIHRbXCJcXHUyRjQxXCJdID0gXCJcXHU2NTM0XCI7XG4gdFtcIlxcdTJGNDJcIl0gPSBcIlxcdTY1ODdcIjtcbiB0W1wiXFx1MkY0M1wiXSA9IFwiXFx1NjU5N1wiO1xuIHRbXCJcXHUyRjQ0XCJdID0gXCJcXHU2NUE0XCI7XG4gdFtcIlxcdTJGNDVcIl0gPSBcIlxcdTY1QjlcIjtcbiB0W1wiXFx1MkY0NlwiXSA9IFwiXFx1NjVFMFwiO1xuIHRbXCJcXHUyRjQ3XCJdID0gXCJcXHU2NUU1XCI7XG4gdFtcIlxcdTJGNDhcIl0gPSBcIlxcdTY2RjBcIjtcbiB0W1wiXFx1MkY0OVwiXSA9IFwiXFx1NjcwOFwiO1xuIHRbXCJcXHUyRjRBXCJdID0gXCJcXHU2NzI4XCI7XG4gdFtcIlxcdTJGNEJcIl0gPSBcIlxcdTZCMjBcIjtcbiB0W1wiXFx1MkY0Q1wiXSA9IFwiXFx1NkI2MlwiO1xuIHRbXCJcXHUyRjREXCJdID0gXCJcXHU2Qjc5XCI7XG4gdFtcIlxcdTJGNEVcIl0gPSBcIlxcdTZCQjNcIjtcbiB0W1wiXFx1MkY0RlwiXSA9IFwiXFx1NkJDQlwiO1xuIHRbXCJcXHUyRjUwXCJdID0gXCJcXHU2QkQ0XCI7XG4gdFtcIlxcdTJGNTFcIl0gPSBcIlxcdTZCREJcIjtcbiB0W1wiXFx1MkY1MlwiXSA9IFwiXFx1NkMwRlwiO1xuIHRbXCJcXHUyRjUzXCJdID0gXCJcXHU2QzE0XCI7XG4gdFtcIlxcdTJGNTRcIl0gPSBcIlxcdTZDMzRcIjtcbiB0W1wiXFx1MkY1NVwiXSA9IFwiXFx1NzA2QlwiO1xuIHRbXCJcXHUyRjU2XCJdID0gXCJcXHU3MjJBXCI7XG4gdFtcIlxcdTJGNTdcIl0gPSBcIlxcdTcyMzZcIjtcbiB0W1wiXFx1MkY1OFwiXSA9IFwiXFx1NzIzQlwiO1xuIHRbXCJcXHUyRjU5XCJdID0gXCJcXHU3MjNGXCI7XG4gdFtcIlxcdTJGNUFcIl0gPSBcIlxcdTcyNDdcIjtcbiB0W1wiXFx1MkY1QlwiXSA9IFwiXFx1NzI1OVwiO1xuIHRbXCJcXHUyRjVDXCJdID0gXCJcXHU3MjVCXCI7XG4gdFtcIlxcdTJGNURcIl0gPSBcIlxcdTcyQUNcIjtcbiB0W1wiXFx1MkY1RVwiXSA9IFwiXFx1NzM4NFwiO1xuIHRbXCJcXHUyRjVGXCJdID0gXCJcXHU3Mzg5XCI7XG4gdFtcIlxcdTJGNjBcIl0gPSBcIlxcdTc0RENcIjtcbiB0W1wiXFx1MkY2MVwiXSA9IFwiXFx1NzRFNlwiO1xuIHRbXCJcXHUyRjYyXCJdID0gXCJcXHU3NTE4XCI7XG4gdFtcIlxcdTJGNjNcIl0gPSBcIlxcdTc1MUZcIjtcbiB0W1wiXFx1MkY2NFwiXSA9IFwiXFx1NzUyOFwiO1xuIHRbXCJcXHUyRjY1XCJdID0gXCJcXHU3NTMwXCI7XG4gdFtcIlxcdTJGNjZcIl0gPSBcIlxcdTc1OEJcIjtcbiB0W1wiXFx1MkY2N1wiXSA9IFwiXFx1NzU5MlwiO1xuIHRbXCJcXHUyRjY4XCJdID0gXCJcXHU3Njc2XCI7XG4gdFtcIlxcdTJGNjlcIl0gPSBcIlxcdTc2N0RcIjtcbiB0W1wiXFx1MkY2QVwiXSA9IFwiXFx1NzZBRVwiO1xuIHRbXCJcXHUyRjZCXCJdID0gXCJcXHU3NkJGXCI7XG4gdFtcIlxcdTJGNkNcIl0gPSBcIlxcdTc2RUVcIjtcbiB0W1wiXFx1MkY2RFwiXSA9IFwiXFx1NzdEQlwiO1xuIHRbXCJcXHUyRjZFXCJdID0gXCJcXHU3N0UyXCI7XG4gdFtcIlxcdTJGNkZcIl0gPSBcIlxcdTc3RjNcIjtcbiB0W1wiXFx1MkY3MFwiXSA9IFwiXFx1NzkzQVwiO1xuIHRbXCJcXHUyRjcxXCJdID0gXCJcXHU3OUI4XCI7XG4gdFtcIlxcdTJGNzJcIl0gPSBcIlxcdTc5QkVcIjtcbiB0W1wiXFx1MkY3M1wiXSA9IFwiXFx1N0E3NFwiO1xuIHRbXCJcXHUyRjc0XCJdID0gXCJcXHU3QUNCXCI7XG4gdFtcIlxcdTJGNzVcIl0gPSBcIlxcdTdBRjlcIjtcbiB0W1wiXFx1MkY3NlwiXSA9IFwiXFx1N0M3M1wiO1xuIHRbXCJcXHUyRjc3XCJdID0gXCJcXHU3Q0Y4XCI7XG4gdFtcIlxcdTJGNzhcIl0gPSBcIlxcdTdGMzZcIjtcbiB0W1wiXFx1MkY3OVwiXSA9IFwiXFx1N0Y1MVwiO1xuIHRbXCJcXHUyRjdBXCJdID0gXCJcXHU3RjhBXCI7XG4gdFtcIlxcdTJGN0JcIl0gPSBcIlxcdTdGQkRcIjtcbiB0W1wiXFx1MkY3Q1wiXSA9IFwiXFx1ODAwMVwiO1xuIHRbXCJcXHUyRjdEXCJdID0gXCJcXHU4MDBDXCI7XG4gdFtcIlxcdTJGN0VcIl0gPSBcIlxcdTgwMTJcIjtcbiB0W1wiXFx1MkY3RlwiXSA9IFwiXFx1ODAzM1wiO1xuIHRbXCJcXHUyRjgwXCJdID0gXCJcXHU4MDdGXCI7XG4gdFtcIlxcdTJGODFcIl0gPSBcIlxcdTgwODlcIjtcbiB0W1wiXFx1MkY4MlwiXSA9IFwiXFx1ODFFM1wiO1xuIHRbXCJcXHUyRjgzXCJdID0gXCJcXHU4MUVBXCI7XG4gdFtcIlxcdTJGODRcIl0gPSBcIlxcdTgxRjNcIjtcbiB0W1wiXFx1MkY4NVwiXSA9IFwiXFx1ODFGQ1wiO1xuIHRbXCJcXHUyRjg2XCJdID0gXCJcXHU4MjBDXCI7XG4gdFtcIlxcdTJGODdcIl0gPSBcIlxcdTgyMUJcIjtcbiB0W1wiXFx1MkY4OFwiXSA9IFwiXFx1ODIxRlwiO1xuIHRbXCJcXHUyRjg5XCJdID0gXCJcXHU4MjZFXCI7XG4gdFtcIlxcdTJGOEFcIl0gPSBcIlxcdTgyNzJcIjtcbiB0W1wiXFx1MkY4QlwiXSA9IFwiXFx1ODI3OFwiO1xuIHRbXCJcXHUyRjhDXCJdID0gXCJcXHU4NjREXCI7XG4gdFtcIlxcdTJGOERcIl0gPSBcIlxcdTg2NkJcIjtcbiB0W1wiXFx1MkY4RVwiXSA9IFwiXFx1ODg0MFwiO1xuIHRbXCJcXHUyRjhGXCJdID0gXCJcXHU4ODRDXCI7XG4gdFtcIlxcdTJGOTBcIl0gPSBcIlxcdTg4NjNcIjtcbiB0W1wiXFx1MkY5MVwiXSA9IFwiXFx1ODk3RVwiO1xuIHRbXCJcXHUyRjkyXCJdID0gXCJcXHU4OThCXCI7XG4gdFtcIlxcdTJGOTNcIl0gPSBcIlxcdTg5RDJcIjtcbiB0W1wiXFx1MkY5NFwiXSA9IFwiXFx1OEEwMFwiO1xuIHRbXCJcXHUyRjk1XCJdID0gXCJcXHU4QzM3XCI7XG4gdFtcIlxcdTJGOTZcIl0gPSBcIlxcdThDNDZcIjtcbiB0W1wiXFx1MkY5N1wiXSA9IFwiXFx1OEM1NVwiO1xuIHRbXCJcXHUyRjk4XCJdID0gXCJcXHU4Qzc4XCI7XG4gdFtcIlxcdTJGOTlcIl0gPSBcIlxcdThDOURcIjtcbiB0W1wiXFx1MkY5QVwiXSA9IFwiXFx1OEQ2NFwiO1xuIHRbXCJcXHUyRjlCXCJdID0gXCJcXHU4RDcwXCI7XG4gdFtcIlxcdTJGOUNcIl0gPSBcIlxcdThEQjNcIjtcbiB0W1wiXFx1MkY5RFwiXSA9IFwiXFx1OEVBQlwiO1xuIHRbXCJcXHUyRjlFXCJdID0gXCJcXHU4RUNBXCI7XG4gdFtcIlxcdTJGOUZcIl0gPSBcIlxcdThGOUJcIjtcbiB0W1wiXFx1MkZBMFwiXSA9IFwiXFx1OEZCMFwiO1xuIHRbXCJcXHUyRkExXCJdID0gXCJcXHU4RkI1XCI7XG4gdFtcIlxcdTJGQTJcIl0gPSBcIlxcdTkwOTFcIjtcbiB0W1wiXFx1MkZBM1wiXSA9IFwiXFx1OTE0OVwiO1xuIHRbXCJcXHUyRkE0XCJdID0gXCJcXHU5MUM2XCI7XG4gdFtcIlxcdTJGQTVcIl0gPSBcIlxcdTkxQ0NcIjtcbiB0W1wiXFx1MkZBNlwiXSA9IFwiXFx1OTFEMVwiO1xuIHRbXCJcXHUyRkE3XCJdID0gXCJcXHU5NTc3XCI7XG4gdFtcIlxcdTJGQThcIl0gPSBcIlxcdTk1ODBcIjtcbiB0W1wiXFx1MkZBOVwiXSA9IFwiXFx1OTYxQ1wiO1xuIHRbXCJcXHUyRkFBXCJdID0gXCJcXHU5NkI2XCI7XG4gdFtcIlxcdTJGQUJcIl0gPSBcIlxcdTk2QjlcIjtcbiB0W1wiXFx1MkZBQ1wiXSA9IFwiXFx1OTZFOFwiO1xuIHRbXCJcXHUyRkFEXCJdID0gXCJcXHU5NzUxXCI7XG4gdFtcIlxcdTJGQUVcIl0gPSBcIlxcdTk3NUVcIjtcbiB0W1wiXFx1MkZBRlwiXSA9IFwiXFx1OTc2MlwiO1xuIHRbXCJcXHUyRkIwXCJdID0gXCJcXHU5NzY5XCI7XG4gdFtcIlxcdTJGQjFcIl0gPSBcIlxcdTk3Q0JcIjtcbiB0W1wiXFx1MkZCMlwiXSA9IFwiXFx1OTdFRFwiO1xuIHRbXCJcXHUyRkIzXCJdID0gXCJcXHU5N0YzXCI7XG4gdFtcIlxcdTJGQjRcIl0gPSBcIlxcdTk4MDFcIjtcbiB0W1wiXFx1MkZCNVwiXSA9IFwiXFx1OThBOFwiO1xuIHRbXCJcXHUyRkI2XCJdID0gXCJcXHU5OERCXCI7XG4gdFtcIlxcdTJGQjdcIl0gPSBcIlxcdTk4REZcIjtcbiB0W1wiXFx1MkZCOFwiXSA9IFwiXFx1OTk5NlwiO1xuIHRbXCJcXHUyRkI5XCJdID0gXCJcXHU5OTk5XCI7XG4gdFtcIlxcdTJGQkFcIl0gPSBcIlxcdTk5QUNcIjtcbiB0W1wiXFx1MkZCQlwiXSA9IFwiXFx1OUFBOFwiO1xuIHRbXCJcXHUyRkJDXCJdID0gXCJcXHU5QUQ4XCI7XG4gdFtcIlxcdTJGQkRcIl0gPSBcIlxcdTlBREZcIjtcbiB0W1wiXFx1MkZCRVwiXSA9IFwiXFx1OUIyNVwiO1xuIHRbXCJcXHUyRkJGXCJdID0gXCJcXHU5QjJGXCI7XG4gdFtcIlxcdTJGQzBcIl0gPSBcIlxcdTlCMzJcIjtcbiB0W1wiXFx1MkZDMVwiXSA9IFwiXFx1OUIzQ1wiO1xuIHRbXCJcXHUyRkMyXCJdID0gXCJcXHU5QjVBXCI7XG4gdFtcIlxcdTJGQzNcIl0gPSBcIlxcdTlDRTVcIjtcbiB0W1wiXFx1MkZDNFwiXSA9IFwiXFx1OUU3NVwiO1xuIHRbXCJcXHUyRkM1XCJdID0gXCJcXHU5RTdGXCI7XG4gdFtcIlxcdTJGQzZcIl0gPSBcIlxcdTlFQTVcIjtcbiB0W1wiXFx1MkZDN1wiXSA9IFwiXFx1OUVCQlwiO1xuIHRbXCJcXHUyRkM4XCJdID0gXCJcXHU5RUMzXCI7XG4gdFtcIlxcdTJGQzlcIl0gPSBcIlxcdTlFQ0RcIjtcbiB0W1wiXFx1MkZDQVwiXSA9IFwiXFx1OUVEMVwiO1xuIHRbXCJcXHUyRkNCXCJdID0gXCJcXHU5RUY5XCI7XG4gdFtcIlxcdTJGQ0NcIl0gPSBcIlxcdTlFRkRcIjtcbiB0W1wiXFx1MkZDRFwiXSA9IFwiXFx1OUYwRVwiO1xuIHRbXCJcXHUyRkNFXCJdID0gXCJcXHU5RjEzXCI7XG4gdFtcIlxcdTJGQ0ZcIl0gPSBcIlxcdTlGMjBcIjtcbiB0W1wiXFx1MkZEMFwiXSA9IFwiXFx1OUYzQlwiO1xuIHRbXCJcXHUyRkQxXCJdID0gXCJcXHU5RjRBXCI7XG4gdFtcIlxcdTJGRDJcIl0gPSBcIlxcdTlGNTJcIjtcbiB0W1wiXFx1MkZEM1wiXSA9IFwiXFx1OUY4RFwiO1xuIHRbXCJcXHUyRkQ0XCJdID0gXCJcXHU5RjlDXCI7XG4gdFtcIlxcdTJGRDVcIl0gPSBcIlxcdTlGQTBcIjtcbiB0W1wiXFx1MzAzNlwiXSA9IFwiXFx1MzAxMlwiO1xuIHRbXCJcXHUzMDM4XCJdID0gXCJcXHU1MzQxXCI7XG4gdFtcIlxcdTMwMzlcIl0gPSBcIlxcdTUzNDRcIjtcbiB0W1wiXFx1MzAzQVwiXSA9IFwiXFx1NTM0NVwiO1xuIHRbXCJcXHUzMDlCXCJdID0gXCJcXHUwMDIwXFx1MzA5OVwiO1xuIHRbXCJcXHUzMDlDXCJdID0gXCJcXHUwMDIwXFx1MzA5QVwiO1xuIHRbXCJcXHUzMTMxXCJdID0gXCJcXHUxMTAwXCI7XG4gdFtcIlxcdTMxMzJcIl0gPSBcIlxcdTExMDFcIjtcbiB0W1wiXFx1MzEzM1wiXSA9IFwiXFx1MTFBQVwiO1xuIHRbXCJcXHUzMTM0XCJdID0gXCJcXHUxMTAyXCI7XG4gdFtcIlxcdTMxMzVcIl0gPSBcIlxcdTExQUNcIjtcbiB0W1wiXFx1MzEzNlwiXSA9IFwiXFx1MTFBRFwiO1xuIHRbXCJcXHUzMTM3XCJdID0gXCJcXHUxMTAzXCI7XG4gdFtcIlxcdTMxMzhcIl0gPSBcIlxcdTExMDRcIjtcbiB0W1wiXFx1MzEzOVwiXSA9IFwiXFx1MTEwNVwiO1xuIHRbXCJcXHUzMTNBXCJdID0gXCJcXHUxMUIwXCI7XG4gdFtcIlxcdTMxM0JcIl0gPSBcIlxcdTExQjFcIjtcbiB0W1wiXFx1MzEzQ1wiXSA9IFwiXFx1MTFCMlwiO1xuIHRbXCJcXHUzMTNEXCJdID0gXCJcXHUxMUIzXCI7XG4gdFtcIlxcdTMxM0VcIl0gPSBcIlxcdTExQjRcIjtcbiB0W1wiXFx1MzEzRlwiXSA9IFwiXFx1MTFCNVwiO1xuIHRbXCJcXHUzMTQwXCJdID0gXCJcXHUxMTFBXCI7XG4gdFtcIlxcdTMxNDFcIl0gPSBcIlxcdTExMDZcIjtcbiB0W1wiXFx1MzE0MlwiXSA9IFwiXFx1MTEwN1wiO1xuIHRbXCJcXHUzMTQzXCJdID0gXCJcXHUxMTA4XCI7XG4gdFtcIlxcdTMxNDRcIl0gPSBcIlxcdTExMjFcIjtcbiB0W1wiXFx1MzE0NVwiXSA9IFwiXFx1MTEwOVwiO1xuIHRbXCJcXHUzMTQ2XCJdID0gXCJcXHUxMTBBXCI7XG4gdFtcIlxcdTMxNDdcIl0gPSBcIlxcdTExMEJcIjtcbiB0W1wiXFx1MzE0OFwiXSA9IFwiXFx1MTEwQ1wiO1xuIHRbXCJcXHUzMTQ5XCJdID0gXCJcXHUxMTBEXCI7XG4gdFtcIlxcdTMxNEFcIl0gPSBcIlxcdTExMEVcIjtcbiB0W1wiXFx1MzE0QlwiXSA9IFwiXFx1MTEwRlwiO1xuIHRbXCJcXHUzMTRDXCJdID0gXCJcXHUxMTEwXCI7XG4gdFtcIlxcdTMxNERcIl0gPSBcIlxcdTExMTFcIjtcbiB0W1wiXFx1MzE0RVwiXSA9IFwiXFx1MTExMlwiO1xuIHRbXCJcXHUzMTRGXCJdID0gXCJcXHUxMTYxXCI7XG4gdFtcIlxcdTMxNTBcIl0gPSBcIlxcdTExNjJcIjtcbiB0W1wiXFx1MzE1MVwiXSA9IFwiXFx1MTE2M1wiO1xuIHRbXCJcXHUzMTUyXCJdID0gXCJcXHUxMTY0XCI7XG4gdFtcIlxcdTMxNTNcIl0gPSBcIlxcdTExNjVcIjtcbiB0W1wiXFx1MzE1NFwiXSA9IFwiXFx1MTE2NlwiO1xuIHRbXCJcXHUzMTU1XCJdID0gXCJcXHUxMTY3XCI7XG4gdFtcIlxcdTMxNTZcIl0gPSBcIlxcdTExNjhcIjtcbiB0W1wiXFx1MzE1N1wiXSA9IFwiXFx1MTE2OVwiO1xuIHRbXCJcXHUzMTU4XCJdID0gXCJcXHUxMTZBXCI7XG4gdFtcIlxcdTMxNTlcIl0gPSBcIlxcdTExNkJcIjtcbiB0W1wiXFx1MzE1QVwiXSA9IFwiXFx1MTE2Q1wiO1xuIHRbXCJcXHUzMTVCXCJdID0gXCJcXHUxMTZEXCI7XG4gdFtcIlxcdTMxNUNcIl0gPSBcIlxcdTExNkVcIjtcbiB0W1wiXFx1MzE1RFwiXSA9IFwiXFx1MTE2RlwiO1xuIHRbXCJcXHUzMTVFXCJdID0gXCJcXHUxMTcwXCI7XG4gdFtcIlxcdTMxNUZcIl0gPSBcIlxcdTExNzFcIjtcbiB0W1wiXFx1MzE2MFwiXSA9IFwiXFx1MTE3MlwiO1xuIHRbXCJcXHUzMTYxXCJdID0gXCJcXHUxMTczXCI7XG4gdFtcIlxcdTMxNjJcIl0gPSBcIlxcdTExNzRcIjtcbiB0W1wiXFx1MzE2M1wiXSA9IFwiXFx1MTE3NVwiO1xuIHRbXCJcXHUzMTY0XCJdID0gXCJcXHUxMTYwXCI7XG4gdFtcIlxcdTMxNjVcIl0gPSBcIlxcdTExMTRcIjtcbiB0W1wiXFx1MzE2NlwiXSA9IFwiXFx1MTExNVwiO1xuIHRbXCJcXHUzMTY3XCJdID0gXCJcXHUxMUM3XCI7XG4gdFtcIlxcdTMxNjhcIl0gPSBcIlxcdTExQzhcIjtcbiB0W1wiXFx1MzE2OVwiXSA9IFwiXFx1MTFDQ1wiO1xuIHRbXCJcXHUzMTZBXCJdID0gXCJcXHUxMUNFXCI7XG4gdFtcIlxcdTMxNkJcIl0gPSBcIlxcdTExRDNcIjtcbiB0W1wiXFx1MzE2Q1wiXSA9IFwiXFx1MTFEN1wiO1xuIHRbXCJcXHUzMTZEXCJdID0gXCJcXHUxMUQ5XCI7XG4gdFtcIlxcdTMxNkVcIl0gPSBcIlxcdTExMUNcIjtcbiB0W1wiXFx1MzE2RlwiXSA9IFwiXFx1MTFERFwiO1xuIHRbXCJcXHUzMTcwXCJdID0gXCJcXHUxMURGXCI7XG4gdFtcIlxcdTMxNzFcIl0gPSBcIlxcdTExMURcIjtcbiB0W1wiXFx1MzE3MlwiXSA9IFwiXFx1MTExRVwiO1xuIHRbXCJcXHUzMTczXCJdID0gXCJcXHUxMTIwXCI7XG4gdFtcIlxcdTMxNzRcIl0gPSBcIlxcdTExMjJcIjtcbiB0W1wiXFx1MzE3NVwiXSA9IFwiXFx1MTEyM1wiO1xuIHRbXCJcXHUzMTc2XCJdID0gXCJcXHUxMTI3XCI7XG4gdFtcIlxcdTMxNzdcIl0gPSBcIlxcdTExMjlcIjtcbiB0W1wiXFx1MzE3OFwiXSA9IFwiXFx1MTEyQlwiO1xuIHRbXCJcXHUzMTc5XCJdID0gXCJcXHUxMTJDXCI7XG4gdFtcIlxcdTMxN0FcIl0gPSBcIlxcdTExMkRcIjtcbiB0W1wiXFx1MzE3QlwiXSA9IFwiXFx1MTEyRVwiO1xuIHRbXCJcXHUzMTdDXCJdID0gXCJcXHUxMTJGXCI7XG4gdFtcIlxcdTMxN0RcIl0gPSBcIlxcdTExMzJcIjtcbiB0W1wiXFx1MzE3RVwiXSA9IFwiXFx1MTEzNlwiO1xuIHRbXCJcXHUzMTdGXCJdID0gXCJcXHUxMTQwXCI7XG4gdFtcIlxcdTMxODBcIl0gPSBcIlxcdTExNDdcIjtcbiB0W1wiXFx1MzE4MVwiXSA9IFwiXFx1MTE0Q1wiO1xuIHRbXCJcXHUzMTgyXCJdID0gXCJcXHUxMUYxXCI7XG4gdFtcIlxcdTMxODNcIl0gPSBcIlxcdTExRjJcIjtcbiB0W1wiXFx1MzE4NFwiXSA9IFwiXFx1MTE1N1wiO1xuIHRbXCJcXHUzMTg1XCJdID0gXCJcXHUxMTU4XCI7XG4gdFtcIlxcdTMxODZcIl0gPSBcIlxcdTExNTlcIjtcbiB0W1wiXFx1MzE4N1wiXSA9IFwiXFx1MTE4NFwiO1xuIHRbXCJcXHUzMTg4XCJdID0gXCJcXHUxMTg1XCI7XG4gdFtcIlxcdTMxODlcIl0gPSBcIlxcdTExODhcIjtcbiB0W1wiXFx1MzE4QVwiXSA9IFwiXFx1MTE5MVwiO1xuIHRbXCJcXHUzMThCXCJdID0gXCJcXHUxMTkyXCI7XG4gdFtcIlxcdTMxOENcIl0gPSBcIlxcdTExOTRcIjtcbiB0W1wiXFx1MzE4RFwiXSA9IFwiXFx1MTE5RVwiO1xuIHRbXCJcXHUzMThFXCJdID0gXCJcXHUxMUExXCI7XG4gdFtcIlxcdTMyMDBcIl0gPSBcIlxcdTAwMjhcXHUxMTAwXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjAxXCJdID0gXCJcXHUwMDI4XFx1MTEwMlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIwMlwiXSA9IFwiXFx1MDAyOFxcdTExMDNcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMDNcIl0gPSBcIlxcdTAwMjhcXHUxMTA1XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjA0XCJdID0gXCJcXHUwMDI4XFx1MTEwNlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIwNVwiXSA9IFwiXFx1MDAyOFxcdTExMDdcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMDZcIl0gPSBcIlxcdTAwMjhcXHUxMTA5XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjA3XCJdID0gXCJcXHUwMDI4XFx1MTEwQlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIwOFwiXSA9IFwiXFx1MDAyOFxcdTExMENcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMDlcIl0gPSBcIlxcdTAwMjhcXHUxMTBFXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjBBXCJdID0gXCJcXHUwMDI4XFx1MTEwRlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIwQlwiXSA9IFwiXFx1MDAyOFxcdTExMTBcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMENcIl0gPSBcIlxcdTAwMjhcXHUxMTExXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjBEXCJdID0gXCJcXHUwMDI4XFx1MTExMlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIwRVwiXSA9IFwiXFx1MDAyOFxcdTExMDBcXHUxMTYxXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjBGXCJdID0gXCJcXHUwMDI4XFx1MTEwMlxcdTExNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMTBcIl0gPSBcIlxcdTAwMjhcXHUxMTAzXFx1MTE2MVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIxMVwiXSA9IFwiXFx1MDAyOFxcdTExMDVcXHUxMTYxXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjEyXCJdID0gXCJcXHUwMDI4XFx1MTEwNlxcdTExNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMTNcIl0gPSBcIlxcdTAwMjhcXHUxMTA3XFx1MTE2MVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIxNFwiXSA9IFwiXFx1MDAyOFxcdTExMDlcXHUxMTYxXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjE1XCJdID0gXCJcXHUwMDI4XFx1MTEwQlxcdTExNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMTZcIl0gPSBcIlxcdTAwMjhcXHUxMTBDXFx1MTE2MVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIxN1wiXSA9IFwiXFx1MDAyOFxcdTExMEVcXHUxMTYxXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjE4XCJdID0gXCJcXHUwMDI4XFx1MTEwRlxcdTExNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMTlcIl0gPSBcIlxcdTAwMjhcXHUxMTEwXFx1MTE2MVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIxQVwiXSA9IFwiXFx1MDAyOFxcdTExMTFcXHUxMTYxXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjFCXCJdID0gXCJcXHUwMDI4XFx1MTExMlxcdTExNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMUNcIl0gPSBcIlxcdTAwMjhcXHUxMTBDXFx1MTE2RVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIxRFwiXSA9IFwiXFx1MDAyOFxcdTExMEJcXHUxMTY5XFx1MTEwQ1xcdTExNjVcXHUxMUFCXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjFFXCJdID0gXCJcXHUwMDI4XFx1MTEwQlxcdTExNjlcXHUxMTEyXFx1MTE2RVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyMFwiXSA9IFwiXFx1MDAyOFxcdTRFMDBcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMjFcIl0gPSBcIlxcdTAwMjhcXHU0RThDXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjIyXCJdID0gXCJcXHUwMDI4XFx1NEUwOVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyM1wiXSA9IFwiXFx1MDAyOFxcdTU2REJcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMjRcIl0gPSBcIlxcdTAwMjhcXHU0RTk0XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjI1XCJdID0gXCJcXHUwMDI4XFx1NTE2RFxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyNlwiXSA9IFwiXFx1MDAyOFxcdTRFMDNcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMjdcIl0gPSBcIlxcdTAwMjhcXHU1MTZCXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjI4XCJdID0gXCJcXHUwMDI4XFx1NEU1RFxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyOVwiXSA9IFwiXFx1MDAyOFxcdTUzNDFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMkFcIl0gPSBcIlxcdTAwMjhcXHU2NzA4XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjJCXCJdID0gXCJcXHUwMDI4XFx1NzA2QlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyQ1wiXSA9IFwiXFx1MDAyOFxcdTZDMzRcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMkRcIl0gPSBcIlxcdTAwMjhcXHU2NzI4XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjJFXCJdID0gXCJcXHUwMDI4XFx1OTFEMVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyRlwiXSA9IFwiXFx1MDAyOFxcdTU3MUZcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMzBcIl0gPSBcIlxcdTAwMjhcXHU2NUU1XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjMxXCJdID0gXCJcXHUwMDI4XFx1NjgyQVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIzMlwiXSA9IFwiXFx1MDAyOFxcdTY3MDlcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMzNcIl0gPSBcIlxcdTAwMjhcXHU3OTNFXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjM0XCJdID0gXCJcXHUwMDI4XFx1NTQwRFxcdTAwMjlcIjtcbiB0W1wiXFx1MzIzNVwiXSA9IFwiXFx1MDAyOFxcdTcyNzlcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMzZcIl0gPSBcIlxcdTAwMjhcXHU4Q0ExXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjM3XCJdID0gXCJcXHUwMDI4XFx1Nzk1RFxcdTAwMjlcIjtcbiB0W1wiXFx1MzIzOFwiXSA9IFwiXFx1MDAyOFxcdTUyQjRcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMzlcIl0gPSBcIlxcdTAwMjhcXHU0RUUzXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjNBXCJdID0gXCJcXHUwMDI4XFx1NTQ3Q1xcdTAwMjlcIjtcbiB0W1wiXFx1MzIzQlwiXSA9IFwiXFx1MDAyOFxcdTVCNjZcXHUwMDI5XCI7XG4gdFtcIlxcdTMyM0NcIl0gPSBcIlxcdTAwMjhcXHU3NkUzXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjNEXCJdID0gXCJcXHUwMDI4XFx1NEYwMVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIzRVwiXSA9IFwiXFx1MDAyOFxcdThDQzdcXHUwMDI5XCI7XG4gdFtcIlxcdTMyM0ZcIl0gPSBcIlxcdTAwMjhcXHU1MzU0XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjQwXCJdID0gXCJcXHUwMDI4XFx1Nzk2RFxcdTAwMjlcIjtcbiB0W1wiXFx1MzI0MVwiXSA9IFwiXFx1MDAyOFxcdTRGMTFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyNDJcIl0gPSBcIlxcdTAwMjhcXHU4MUVBXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjQzXCJdID0gXCJcXHUwMDI4XFx1ODFGM1xcdTAwMjlcIjtcbiB0W1wiXFx1MzJDMFwiXSA9IFwiXFx1MDAzMVxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDMVwiXSA9IFwiXFx1MDAzMlxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDMlwiXSA9IFwiXFx1MDAzM1xcdTY3MDhcIjtcbiB0W1wiXFx1MzJDM1wiXSA9IFwiXFx1MDAzNFxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDNFwiXSA9IFwiXFx1MDAzNVxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDNVwiXSA9IFwiXFx1MDAzNlxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDNlwiXSA9IFwiXFx1MDAzN1xcdTY3MDhcIjtcbiB0W1wiXFx1MzJDN1wiXSA9IFwiXFx1MDAzOFxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDOFwiXSA9IFwiXFx1MDAzOVxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDOVwiXSA9IFwiXFx1MDAzMVxcdTAwMzBcXHU2NzA4XCI7XG4gdFtcIlxcdTMyQ0FcIl0gPSBcIlxcdTAwMzFcXHUwMDMxXFx1NjcwOFwiO1xuIHRbXCJcXHUzMkNCXCJdID0gXCJcXHUwMDMxXFx1MDAzMlxcdTY3MDhcIjtcbiB0W1wiXFx1MzM1OFwiXSA9IFwiXFx1MDAzMFxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1OVwiXSA9IFwiXFx1MDAzMVxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1QVwiXSA9IFwiXFx1MDAzMlxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1QlwiXSA9IFwiXFx1MDAzM1xcdTcwQjlcIjtcbiB0W1wiXFx1MzM1Q1wiXSA9IFwiXFx1MDAzNFxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1RFwiXSA9IFwiXFx1MDAzNVxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1RVwiXSA9IFwiXFx1MDAzNlxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1RlwiXSA9IFwiXFx1MDAzN1xcdTcwQjlcIjtcbiB0W1wiXFx1MzM2MFwiXSA9IFwiXFx1MDAzOFxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2MVwiXSA9IFwiXFx1MDAzOVxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2MlwiXSA9IFwiXFx1MDAzMVxcdTAwMzBcXHU3MEI5XCI7XG4gdFtcIlxcdTMzNjNcIl0gPSBcIlxcdTAwMzFcXHUwMDMxXFx1NzBCOVwiO1xuIHRbXCJcXHUzMzY0XCJdID0gXCJcXHUwMDMxXFx1MDAzMlxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2NVwiXSA9IFwiXFx1MDAzMVxcdTAwMzNcXHU3MEI5XCI7XG4gdFtcIlxcdTMzNjZcIl0gPSBcIlxcdTAwMzFcXHUwMDM0XFx1NzBCOVwiO1xuIHRbXCJcXHUzMzY3XCJdID0gXCJcXHUwMDMxXFx1MDAzNVxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2OFwiXSA9IFwiXFx1MDAzMVxcdTAwMzZcXHU3MEI5XCI7XG4gdFtcIlxcdTMzNjlcIl0gPSBcIlxcdTAwMzFcXHUwMDM3XFx1NzBCOVwiO1xuIHRbXCJcXHUzMzZBXCJdID0gXCJcXHUwMDMxXFx1MDAzOFxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2QlwiXSA9IFwiXFx1MDAzMVxcdTAwMzlcXHU3MEI5XCI7XG4gdFtcIlxcdTMzNkNcIl0gPSBcIlxcdTAwMzJcXHUwMDMwXFx1NzBCOVwiO1xuIHRbXCJcXHUzMzZEXCJdID0gXCJcXHUwMDMyXFx1MDAzMVxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2RVwiXSA9IFwiXFx1MDAzMlxcdTAwMzJcXHU3MEI5XCI7XG4gdFtcIlxcdTMzNkZcIl0gPSBcIlxcdTAwMzJcXHUwMDMzXFx1NzBCOVwiO1xuIHRbXCJcXHUzMzcwXCJdID0gXCJcXHUwMDMyXFx1MDAzNFxcdTcwQjlcIjtcbiB0W1wiXFx1MzNFMFwiXSA9IFwiXFx1MDAzMVxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFMVwiXSA9IFwiXFx1MDAzMlxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFMlwiXSA9IFwiXFx1MDAzM1xcdTY1RTVcIjtcbiB0W1wiXFx1MzNFM1wiXSA9IFwiXFx1MDAzNFxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFNFwiXSA9IFwiXFx1MDAzNVxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFNVwiXSA9IFwiXFx1MDAzNlxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFNlwiXSA9IFwiXFx1MDAzN1xcdTY1RTVcIjtcbiB0W1wiXFx1MzNFN1wiXSA9IFwiXFx1MDAzOFxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFOFwiXSA9IFwiXFx1MDAzOVxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFOVwiXSA9IFwiXFx1MDAzMVxcdTAwMzBcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRUFcIl0gPSBcIlxcdTAwMzFcXHUwMDMxXFx1NjVFNVwiO1xuIHRbXCJcXHUzM0VCXCJdID0gXCJcXHUwMDMxXFx1MDAzMlxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFQ1wiXSA9IFwiXFx1MDAzMVxcdTAwMzNcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRURcIl0gPSBcIlxcdTAwMzFcXHUwMDM0XFx1NjVFNVwiO1xuIHRbXCJcXHUzM0VFXCJdID0gXCJcXHUwMDMxXFx1MDAzNVxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFRlwiXSA9IFwiXFx1MDAzMVxcdTAwMzZcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRjBcIl0gPSBcIlxcdTAwMzFcXHUwMDM3XFx1NjVFNVwiO1xuIHRbXCJcXHUzM0YxXCJdID0gXCJcXHUwMDMxXFx1MDAzOFxcdTY1RTVcIjtcbiB0W1wiXFx1MzNGMlwiXSA9IFwiXFx1MDAzMVxcdTAwMzlcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRjNcIl0gPSBcIlxcdTAwMzJcXHUwMDMwXFx1NjVFNVwiO1xuIHRbXCJcXHUzM0Y0XCJdID0gXCJcXHUwMDMyXFx1MDAzMVxcdTY1RTVcIjtcbiB0W1wiXFx1MzNGNVwiXSA9IFwiXFx1MDAzMlxcdTAwMzJcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRjZcIl0gPSBcIlxcdTAwMzJcXHUwMDMzXFx1NjVFNVwiO1xuIHRbXCJcXHUzM0Y3XCJdID0gXCJcXHUwMDMyXFx1MDAzNFxcdTY1RTVcIjtcbiB0W1wiXFx1MzNGOFwiXSA9IFwiXFx1MDAzMlxcdTAwMzVcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRjlcIl0gPSBcIlxcdTAwMzJcXHUwMDM2XFx1NjVFNVwiO1xuIHRbXCJcXHUzM0ZBXCJdID0gXCJcXHUwMDMyXFx1MDAzN1xcdTY1RTVcIjtcbiB0W1wiXFx1MzNGQlwiXSA9IFwiXFx1MDAzMlxcdTAwMzhcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRkNcIl0gPSBcIlxcdTAwMzJcXHUwMDM5XFx1NjVFNVwiO1xuIHRbXCJcXHUzM0ZEXCJdID0gXCJcXHUwMDMzXFx1MDAzMFxcdTY1RTVcIjtcbiB0W1wiXFx1MzNGRVwiXSA9IFwiXFx1MDAzM1xcdTAwMzFcXHU2NUU1XCI7XG4gdFtcIlxcdUZCMDBcIl0gPSBcIlxcdTAwNjZcXHUwMDY2XCI7XG4gdFtcIlxcdUZCMDFcIl0gPSBcIlxcdTAwNjZcXHUwMDY5XCI7XG4gdFtcIlxcdUZCMDJcIl0gPSBcIlxcdTAwNjZcXHUwMDZDXCI7XG4gdFtcIlxcdUZCMDNcIl0gPSBcIlxcdTAwNjZcXHUwMDY2XFx1MDA2OVwiO1xuIHRbXCJcXHVGQjA0XCJdID0gXCJcXHUwMDY2XFx1MDA2NlxcdTAwNkNcIjtcbiB0W1wiXFx1RkIwNVwiXSA9IFwiXFx1MDE3RlxcdTAwNzRcIjtcbiB0W1wiXFx1RkIwNlwiXSA9IFwiXFx1MDA3M1xcdTAwNzRcIjtcbiB0W1wiXFx1RkIxM1wiXSA9IFwiXFx1MDU3NFxcdTA1NzZcIjtcbiB0W1wiXFx1RkIxNFwiXSA9IFwiXFx1MDU3NFxcdTA1NjVcIjtcbiB0W1wiXFx1RkIxNVwiXSA9IFwiXFx1MDU3NFxcdTA1NkJcIjtcbiB0W1wiXFx1RkIxNlwiXSA9IFwiXFx1MDU3RVxcdTA1NzZcIjtcbiB0W1wiXFx1RkIxN1wiXSA9IFwiXFx1MDU3NFxcdTA1NkRcIjtcbiB0W1wiXFx1RkI0RlwiXSA9IFwiXFx1MDVEMFxcdTA1RENcIjtcbiB0W1wiXFx1RkI1MFwiXSA9IFwiXFx1MDY3MVwiO1xuIHRbXCJcXHVGQjUxXCJdID0gXCJcXHUwNjcxXCI7XG4gdFtcIlxcdUZCNTJcIl0gPSBcIlxcdTA2N0JcIjtcbiB0W1wiXFx1RkI1M1wiXSA9IFwiXFx1MDY3QlwiO1xuIHRbXCJcXHVGQjU0XCJdID0gXCJcXHUwNjdCXCI7XG4gdFtcIlxcdUZCNTVcIl0gPSBcIlxcdTA2N0JcIjtcbiB0W1wiXFx1RkI1NlwiXSA9IFwiXFx1MDY3RVwiO1xuIHRbXCJcXHVGQjU3XCJdID0gXCJcXHUwNjdFXCI7XG4gdFtcIlxcdUZCNThcIl0gPSBcIlxcdTA2N0VcIjtcbiB0W1wiXFx1RkI1OVwiXSA9IFwiXFx1MDY3RVwiO1xuIHRbXCJcXHVGQjVBXCJdID0gXCJcXHUwNjgwXCI7XG4gdFtcIlxcdUZCNUJcIl0gPSBcIlxcdTA2ODBcIjtcbiB0W1wiXFx1RkI1Q1wiXSA9IFwiXFx1MDY4MFwiO1xuIHRbXCJcXHVGQjVEXCJdID0gXCJcXHUwNjgwXCI7XG4gdFtcIlxcdUZCNUVcIl0gPSBcIlxcdTA2N0FcIjtcbiB0W1wiXFx1RkI1RlwiXSA9IFwiXFx1MDY3QVwiO1xuIHRbXCJcXHVGQjYwXCJdID0gXCJcXHUwNjdBXCI7XG4gdFtcIlxcdUZCNjFcIl0gPSBcIlxcdTA2N0FcIjtcbiB0W1wiXFx1RkI2MlwiXSA9IFwiXFx1MDY3RlwiO1xuIHRbXCJcXHVGQjYzXCJdID0gXCJcXHUwNjdGXCI7XG4gdFtcIlxcdUZCNjRcIl0gPSBcIlxcdTA2N0ZcIjtcbiB0W1wiXFx1RkI2NVwiXSA9IFwiXFx1MDY3RlwiO1xuIHRbXCJcXHVGQjY2XCJdID0gXCJcXHUwNjc5XCI7XG4gdFtcIlxcdUZCNjdcIl0gPSBcIlxcdTA2NzlcIjtcbiB0W1wiXFx1RkI2OFwiXSA9IFwiXFx1MDY3OVwiO1xuIHRbXCJcXHVGQjY5XCJdID0gXCJcXHUwNjc5XCI7XG4gdFtcIlxcdUZCNkFcIl0gPSBcIlxcdTA2QTRcIjtcbiB0W1wiXFx1RkI2QlwiXSA9IFwiXFx1MDZBNFwiO1xuIHRbXCJcXHVGQjZDXCJdID0gXCJcXHUwNkE0XCI7XG4gdFtcIlxcdUZCNkRcIl0gPSBcIlxcdTA2QTRcIjtcbiB0W1wiXFx1RkI2RVwiXSA9IFwiXFx1MDZBNlwiO1xuIHRbXCJcXHVGQjZGXCJdID0gXCJcXHUwNkE2XCI7XG4gdFtcIlxcdUZCNzBcIl0gPSBcIlxcdTA2QTZcIjtcbiB0W1wiXFx1RkI3MVwiXSA9IFwiXFx1MDZBNlwiO1xuIHRbXCJcXHVGQjcyXCJdID0gXCJcXHUwNjg0XCI7XG4gdFtcIlxcdUZCNzNcIl0gPSBcIlxcdTA2ODRcIjtcbiB0W1wiXFx1RkI3NFwiXSA9IFwiXFx1MDY4NFwiO1xuIHRbXCJcXHVGQjc1XCJdID0gXCJcXHUwNjg0XCI7XG4gdFtcIlxcdUZCNzZcIl0gPSBcIlxcdTA2ODNcIjtcbiB0W1wiXFx1RkI3N1wiXSA9IFwiXFx1MDY4M1wiO1xuIHRbXCJcXHVGQjc4XCJdID0gXCJcXHUwNjgzXCI7XG4gdFtcIlxcdUZCNzlcIl0gPSBcIlxcdTA2ODNcIjtcbiB0W1wiXFx1RkI3QVwiXSA9IFwiXFx1MDY4NlwiO1xuIHRbXCJcXHVGQjdCXCJdID0gXCJcXHUwNjg2XCI7XG4gdFtcIlxcdUZCN0NcIl0gPSBcIlxcdTA2ODZcIjtcbiB0W1wiXFx1RkI3RFwiXSA9IFwiXFx1MDY4NlwiO1xuIHRbXCJcXHVGQjdFXCJdID0gXCJcXHUwNjg3XCI7XG4gdFtcIlxcdUZCN0ZcIl0gPSBcIlxcdTA2ODdcIjtcbiB0W1wiXFx1RkI4MFwiXSA9IFwiXFx1MDY4N1wiO1xuIHRbXCJcXHVGQjgxXCJdID0gXCJcXHUwNjg3XCI7XG4gdFtcIlxcdUZCODJcIl0gPSBcIlxcdTA2OERcIjtcbiB0W1wiXFx1RkI4M1wiXSA9IFwiXFx1MDY4RFwiO1xuIHRbXCJcXHVGQjg0XCJdID0gXCJcXHUwNjhDXCI7XG4gdFtcIlxcdUZCODVcIl0gPSBcIlxcdTA2OENcIjtcbiB0W1wiXFx1RkI4NlwiXSA9IFwiXFx1MDY4RVwiO1xuIHRbXCJcXHVGQjg3XCJdID0gXCJcXHUwNjhFXCI7XG4gdFtcIlxcdUZCODhcIl0gPSBcIlxcdTA2ODhcIjtcbiB0W1wiXFx1RkI4OVwiXSA9IFwiXFx1MDY4OFwiO1xuIHRbXCJcXHVGQjhBXCJdID0gXCJcXHUwNjk4XCI7XG4gdFtcIlxcdUZCOEJcIl0gPSBcIlxcdTA2OThcIjtcbiB0W1wiXFx1RkI4Q1wiXSA9IFwiXFx1MDY5MVwiO1xuIHRbXCJcXHVGQjhEXCJdID0gXCJcXHUwNjkxXCI7XG4gdFtcIlxcdUZCOEVcIl0gPSBcIlxcdTA2QTlcIjtcbiB0W1wiXFx1RkI4RlwiXSA9IFwiXFx1MDZBOVwiO1xuIHRbXCJcXHVGQjkwXCJdID0gXCJcXHUwNkE5XCI7XG4gdFtcIlxcdUZCOTFcIl0gPSBcIlxcdTA2QTlcIjtcbiB0W1wiXFx1RkI5MlwiXSA9IFwiXFx1MDZBRlwiO1xuIHRbXCJcXHVGQjkzXCJdID0gXCJcXHUwNkFGXCI7XG4gdFtcIlxcdUZCOTRcIl0gPSBcIlxcdTA2QUZcIjtcbiB0W1wiXFx1RkI5NVwiXSA9IFwiXFx1MDZBRlwiO1xuIHRbXCJcXHVGQjk2XCJdID0gXCJcXHUwNkIzXCI7XG4gdFtcIlxcdUZCOTdcIl0gPSBcIlxcdTA2QjNcIjtcbiB0W1wiXFx1RkI5OFwiXSA9IFwiXFx1MDZCM1wiO1xuIHRbXCJcXHVGQjk5XCJdID0gXCJcXHUwNkIzXCI7XG4gdFtcIlxcdUZCOUFcIl0gPSBcIlxcdTA2QjFcIjtcbiB0W1wiXFx1RkI5QlwiXSA9IFwiXFx1MDZCMVwiO1xuIHRbXCJcXHVGQjlDXCJdID0gXCJcXHUwNkIxXCI7XG4gdFtcIlxcdUZCOURcIl0gPSBcIlxcdTA2QjFcIjtcbiB0W1wiXFx1RkI5RVwiXSA9IFwiXFx1MDZCQVwiO1xuIHRbXCJcXHVGQjlGXCJdID0gXCJcXHUwNkJBXCI7XG4gdFtcIlxcdUZCQTBcIl0gPSBcIlxcdTA2QkJcIjtcbiB0W1wiXFx1RkJBMVwiXSA9IFwiXFx1MDZCQlwiO1xuIHRbXCJcXHVGQkEyXCJdID0gXCJcXHUwNkJCXCI7XG4gdFtcIlxcdUZCQTNcIl0gPSBcIlxcdTA2QkJcIjtcbiB0W1wiXFx1RkJBNFwiXSA9IFwiXFx1MDZDMFwiO1xuIHRbXCJcXHVGQkE1XCJdID0gXCJcXHUwNkMwXCI7XG4gdFtcIlxcdUZCQTZcIl0gPSBcIlxcdTA2QzFcIjtcbiB0W1wiXFx1RkJBN1wiXSA9IFwiXFx1MDZDMVwiO1xuIHRbXCJcXHVGQkE4XCJdID0gXCJcXHUwNkMxXCI7XG4gdFtcIlxcdUZCQTlcIl0gPSBcIlxcdTA2QzFcIjtcbiB0W1wiXFx1RkJBQVwiXSA9IFwiXFx1MDZCRVwiO1xuIHRbXCJcXHVGQkFCXCJdID0gXCJcXHUwNkJFXCI7XG4gdFtcIlxcdUZCQUNcIl0gPSBcIlxcdTA2QkVcIjtcbiB0W1wiXFx1RkJBRFwiXSA9IFwiXFx1MDZCRVwiO1xuIHRbXCJcXHVGQkFFXCJdID0gXCJcXHUwNkQyXCI7XG4gdFtcIlxcdUZCQUZcIl0gPSBcIlxcdTA2RDJcIjtcbiB0W1wiXFx1RkJCMFwiXSA9IFwiXFx1MDZEM1wiO1xuIHRbXCJcXHVGQkIxXCJdID0gXCJcXHUwNkQzXCI7XG4gdFtcIlxcdUZCRDNcIl0gPSBcIlxcdTA2QURcIjtcbiB0W1wiXFx1RkJENFwiXSA9IFwiXFx1MDZBRFwiO1xuIHRbXCJcXHVGQkQ1XCJdID0gXCJcXHUwNkFEXCI7XG4gdFtcIlxcdUZCRDZcIl0gPSBcIlxcdTA2QURcIjtcbiB0W1wiXFx1RkJEN1wiXSA9IFwiXFx1MDZDN1wiO1xuIHRbXCJcXHVGQkQ4XCJdID0gXCJcXHUwNkM3XCI7XG4gdFtcIlxcdUZCRDlcIl0gPSBcIlxcdTA2QzZcIjtcbiB0W1wiXFx1RkJEQVwiXSA9IFwiXFx1MDZDNlwiO1xuIHRbXCJcXHVGQkRCXCJdID0gXCJcXHUwNkM4XCI7XG4gdFtcIlxcdUZCRENcIl0gPSBcIlxcdTA2QzhcIjtcbiB0W1wiXFx1RkJERFwiXSA9IFwiXFx1MDY3N1wiO1xuIHRbXCJcXHVGQkRFXCJdID0gXCJcXHUwNkNCXCI7XG4gdFtcIlxcdUZCREZcIl0gPSBcIlxcdTA2Q0JcIjtcbiB0W1wiXFx1RkJFMFwiXSA9IFwiXFx1MDZDNVwiO1xuIHRbXCJcXHVGQkUxXCJdID0gXCJcXHUwNkM1XCI7XG4gdFtcIlxcdUZCRTJcIl0gPSBcIlxcdTA2QzlcIjtcbiB0W1wiXFx1RkJFM1wiXSA9IFwiXFx1MDZDOVwiO1xuIHRbXCJcXHVGQkU0XCJdID0gXCJcXHUwNkQwXCI7XG4gdFtcIlxcdUZCRTVcIl0gPSBcIlxcdTA2RDBcIjtcbiB0W1wiXFx1RkJFNlwiXSA9IFwiXFx1MDZEMFwiO1xuIHRbXCJcXHVGQkU3XCJdID0gXCJcXHUwNkQwXCI7XG4gdFtcIlxcdUZCRThcIl0gPSBcIlxcdTA2NDlcIjtcbiB0W1wiXFx1RkJFOVwiXSA9IFwiXFx1MDY0OVwiO1xuIHRbXCJcXHVGQkVBXCJdID0gXCJcXHUwNjI2XFx1MDYyN1wiO1xuIHRbXCJcXHVGQkVCXCJdID0gXCJcXHUwNjI2XFx1MDYyN1wiO1xuIHRbXCJcXHVGQkVDXCJdID0gXCJcXHUwNjI2XFx1MDZENVwiO1xuIHRbXCJcXHVGQkVEXCJdID0gXCJcXHUwNjI2XFx1MDZENVwiO1xuIHRbXCJcXHVGQkVFXCJdID0gXCJcXHUwNjI2XFx1MDY0OFwiO1xuIHRbXCJcXHVGQkVGXCJdID0gXCJcXHUwNjI2XFx1MDY0OFwiO1xuIHRbXCJcXHVGQkYwXCJdID0gXCJcXHUwNjI2XFx1MDZDN1wiO1xuIHRbXCJcXHVGQkYxXCJdID0gXCJcXHUwNjI2XFx1MDZDN1wiO1xuIHRbXCJcXHVGQkYyXCJdID0gXCJcXHUwNjI2XFx1MDZDNlwiO1xuIHRbXCJcXHVGQkYzXCJdID0gXCJcXHUwNjI2XFx1MDZDNlwiO1xuIHRbXCJcXHVGQkY0XCJdID0gXCJcXHUwNjI2XFx1MDZDOFwiO1xuIHRbXCJcXHVGQkY1XCJdID0gXCJcXHUwNjI2XFx1MDZDOFwiO1xuIHRbXCJcXHVGQkY2XCJdID0gXCJcXHUwNjI2XFx1MDZEMFwiO1xuIHRbXCJcXHVGQkY3XCJdID0gXCJcXHUwNjI2XFx1MDZEMFwiO1xuIHRbXCJcXHVGQkY4XCJdID0gXCJcXHUwNjI2XFx1MDZEMFwiO1xuIHRbXCJcXHVGQkY5XCJdID0gXCJcXHUwNjI2XFx1MDY0OVwiO1xuIHRbXCJcXHVGQkZBXCJdID0gXCJcXHUwNjI2XFx1MDY0OVwiO1xuIHRbXCJcXHVGQkZCXCJdID0gXCJcXHUwNjI2XFx1MDY0OVwiO1xuIHRbXCJcXHVGQkZDXCJdID0gXCJcXHUwNkNDXCI7XG4gdFtcIlxcdUZCRkRcIl0gPSBcIlxcdTA2Q0NcIjtcbiB0W1wiXFx1RkJGRVwiXSA9IFwiXFx1MDZDQ1wiO1xuIHRbXCJcXHVGQkZGXCJdID0gXCJcXHUwNkNDXCI7XG4gdFtcIlxcdUZDMDBcIl0gPSBcIlxcdTA2MjZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMDFcIl0gPSBcIlxcdTA2MjZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMDJcIl0gPSBcIlxcdTA2MjZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMDNcIl0gPSBcIlxcdTA2MjZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMDRcIl0gPSBcIlxcdTA2MjZcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMDVcIl0gPSBcIlxcdTA2MjhcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMDZcIl0gPSBcIlxcdTA2MjhcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMDdcIl0gPSBcIlxcdTA2MjhcXHUwNjJFXCI7XG4gdFtcIlxcdUZDMDhcIl0gPSBcIlxcdTA2MjhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMDlcIl0gPSBcIlxcdTA2MjhcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMEFcIl0gPSBcIlxcdTA2MjhcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMEJcIl0gPSBcIlxcdTA2MkFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMENcIl0gPSBcIlxcdTA2MkFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMERcIl0gPSBcIlxcdTA2MkFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDMEVcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMEZcIl0gPSBcIlxcdTA2MkFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMTBcIl0gPSBcIlxcdTA2MkFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMTFcIl0gPSBcIlxcdTA2MkJcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMTJcIl0gPSBcIlxcdTA2MkJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMTNcIl0gPSBcIlxcdTA2MkJcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMTRcIl0gPSBcIlxcdTA2MkJcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMTVcIl0gPSBcIlxcdTA2MkNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMTZcIl0gPSBcIlxcdTA2MkNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMTdcIl0gPSBcIlxcdTA2MkRcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMThcIl0gPSBcIlxcdTA2MkRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMTlcIl0gPSBcIlxcdTA2MkVcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMUFcIl0gPSBcIlxcdTA2MkVcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMUJcIl0gPSBcIlxcdTA2MkVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMUNcIl0gPSBcIlxcdTA2MzNcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMURcIl0gPSBcIlxcdTA2MzNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMUVcIl0gPSBcIlxcdTA2MzNcXHUwNjJFXCI7XG4gdFtcIlxcdUZDMUZcIl0gPSBcIlxcdTA2MzNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMjBcIl0gPSBcIlxcdTA2MzVcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMjFcIl0gPSBcIlxcdTA2MzVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMjJcIl0gPSBcIlxcdTA2MzZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMjNcIl0gPSBcIlxcdTA2MzZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMjRcIl0gPSBcIlxcdTA2MzZcXHUwNjJFXCI7XG4gdFtcIlxcdUZDMjVcIl0gPSBcIlxcdTA2MzZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMjZcIl0gPSBcIlxcdTA2MzdcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMjdcIl0gPSBcIlxcdTA2MzdcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMjhcIl0gPSBcIlxcdTA2MzhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMjlcIl0gPSBcIlxcdTA2MzlcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMkFcIl0gPSBcIlxcdTA2MzlcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMkJcIl0gPSBcIlxcdTA2M0FcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMkNcIl0gPSBcIlxcdTA2M0FcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMkRcIl0gPSBcIlxcdTA2NDFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMkVcIl0gPSBcIlxcdTA2NDFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMkZcIl0gPSBcIlxcdTA2NDFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDMzBcIl0gPSBcIlxcdTA2NDFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMzFcIl0gPSBcIlxcdTA2NDFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMzJcIl0gPSBcIlxcdTA2NDFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMzNcIl0gPSBcIlxcdTA2NDJcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMzRcIl0gPSBcIlxcdTA2NDJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMzVcIl0gPSBcIlxcdTA2NDJcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMzZcIl0gPSBcIlxcdTA2NDJcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMzdcIl0gPSBcIlxcdTA2NDNcXHUwNjI3XCI7XG4gdFtcIlxcdUZDMzhcIl0gPSBcIlxcdTA2NDNcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMzlcIl0gPSBcIlxcdTA2NDNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDM0FcIl0gPSBcIlxcdTA2NDNcXHUwNjJFXCI7XG4gdFtcIlxcdUZDM0JcIl0gPSBcIlxcdTA2NDNcXHUwNjQ0XCI7XG4gdFtcIlxcdUZDM0NcIl0gPSBcIlxcdTA2NDNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDM0RcIl0gPSBcIlxcdTA2NDNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDM0VcIl0gPSBcIlxcdTA2NDNcXHUwNjRBXCI7XG4gdFtcIlxcdUZDM0ZcIl0gPSBcIlxcdTA2NDRcXHUwNjJDXCI7XG4gdFtcIlxcdUZDNDBcIl0gPSBcIlxcdTA2NDRcXHUwNjJEXCI7XG4gdFtcIlxcdUZDNDFcIl0gPSBcIlxcdTA2NDRcXHUwNjJFXCI7XG4gdFtcIlxcdUZDNDJcIl0gPSBcIlxcdTA2NDRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNDNcIl0gPSBcIlxcdTA2NDRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNDRcIl0gPSBcIlxcdTA2NDRcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNDVcIl0gPSBcIlxcdTA2NDVcXHUwNjJDXCI7XG4gdFtcIlxcdUZDNDZcIl0gPSBcIlxcdTA2NDVcXHUwNjJEXCI7XG4gdFtcIlxcdUZDNDdcIl0gPSBcIlxcdTA2NDVcXHUwNjJFXCI7XG4gdFtcIlxcdUZDNDhcIl0gPSBcIlxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNDlcIl0gPSBcIlxcdTA2NDVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNEFcIl0gPSBcIlxcdTA2NDVcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNEJcIl0gPSBcIlxcdTA2NDZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDNENcIl0gPSBcIlxcdTA2NDZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDNERcIl0gPSBcIlxcdTA2NDZcXHUwNjJFXCI7XG4gdFtcIlxcdUZDNEVcIl0gPSBcIlxcdTA2NDZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNEZcIl0gPSBcIlxcdTA2NDZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNTBcIl0gPSBcIlxcdTA2NDZcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNTFcIl0gPSBcIlxcdTA2NDdcXHUwNjJDXCI7XG4gdFtcIlxcdUZDNTJcIl0gPSBcIlxcdTA2NDdcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNTNcIl0gPSBcIlxcdTA2NDdcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNTRcIl0gPSBcIlxcdTA2NDdcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNTVcIl0gPSBcIlxcdTA2NEFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDNTZcIl0gPSBcIlxcdTA2NEFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDNTdcIl0gPSBcIlxcdTA2NEFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDNThcIl0gPSBcIlxcdTA2NEFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNTlcIl0gPSBcIlxcdTA2NEFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNUFcIl0gPSBcIlxcdTA2NEFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNUJcIl0gPSBcIlxcdTA2MzBcXHUwNjcwXCI7XG4gdFtcIlxcdUZDNUNcIl0gPSBcIlxcdTA2MzFcXHUwNjcwXCI7XG4gdFtcIlxcdUZDNURcIl0gPSBcIlxcdTA2NDlcXHUwNjcwXCI7XG4gdFtcIlxcdUZDNUVcIl0gPSBcIlxcdTAwMjBcXHUwNjRDXFx1MDY1MVwiO1xuIHRbXCJcXHVGQzVGXCJdID0gXCJcXHUwMDIwXFx1MDY0RFxcdTA2NTFcIjtcbiB0W1wiXFx1RkM2MFwiXSA9IFwiXFx1MDAyMFxcdTA2NEVcXHUwNjUxXCI7XG4gdFtcIlxcdUZDNjFcIl0gPSBcIlxcdTAwMjBcXHUwNjRGXFx1MDY1MVwiO1xuIHRbXCJcXHVGQzYyXCJdID0gXCJcXHUwMDIwXFx1MDY1MFxcdTA2NTFcIjtcbiB0W1wiXFx1RkM2M1wiXSA9IFwiXFx1MDAyMFxcdTA2NTFcXHUwNjcwXCI7XG4gdFtcIlxcdUZDNjRcIl0gPSBcIlxcdTA2MjZcXHUwNjMxXCI7XG4gdFtcIlxcdUZDNjVcIl0gPSBcIlxcdTA2MjZcXHUwNjMyXCI7XG4gdFtcIlxcdUZDNjZcIl0gPSBcIlxcdTA2MjZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNjdcIl0gPSBcIlxcdTA2MjZcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDNjhcIl0gPSBcIlxcdTA2MjZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNjlcIl0gPSBcIlxcdTA2MjZcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNkFcIl0gPSBcIlxcdTA2MjhcXHUwNjMxXCI7XG4gdFtcIlxcdUZDNkJcIl0gPSBcIlxcdTA2MjhcXHUwNjMyXCI7XG4gdFtcIlxcdUZDNkNcIl0gPSBcIlxcdTA2MjhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNkRcIl0gPSBcIlxcdTA2MjhcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDNkVcIl0gPSBcIlxcdTA2MjhcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNkZcIl0gPSBcIlxcdTA2MjhcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNzBcIl0gPSBcIlxcdTA2MkFcXHUwNjMxXCI7XG4gdFtcIlxcdUZDNzFcIl0gPSBcIlxcdTA2MkFcXHUwNjMyXCI7XG4gdFtcIlxcdUZDNzJcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNzNcIl0gPSBcIlxcdTA2MkFcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDNzRcIl0gPSBcIlxcdTA2MkFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNzVcIl0gPSBcIlxcdTA2MkFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNzZcIl0gPSBcIlxcdTA2MkJcXHUwNjMxXCI7XG4gdFtcIlxcdUZDNzdcIl0gPSBcIlxcdTA2MkJcXHUwNjMyXCI7XG4gdFtcIlxcdUZDNzhcIl0gPSBcIlxcdTA2MkJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNzlcIl0gPSBcIlxcdTA2MkJcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDN0FcIl0gPSBcIlxcdTA2MkJcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDN0JcIl0gPSBcIlxcdTA2MkJcXHUwNjRBXCI7XG4gdFtcIlxcdUZDN0NcIl0gPSBcIlxcdTA2NDFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDN0RcIl0gPSBcIlxcdTA2NDFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDN0VcIl0gPSBcIlxcdTA2NDJcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDN0ZcIl0gPSBcIlxcdTA2NDJcXHUwNjRBXCI7XG4gdFtcIlxcdUZDODBcIl0gPSBcIlxcdTA2NDNcXHUwNjI3XCI7XG4gdFtcIlxcdUZDODFcIl0gPSBcIlxcdTA2NDNcXHUwNjQ0XCI7XG4gdFtcIlxcdUZDODJcIl0gPSBcIlxcdTA2NDNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDODNcIl0gPSBcIlxcdTA2NDNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDODRcIl0gPSBcIlxcdTA2NDNcXHUwNjRBXCI7XG4gdFtcIlxcdUZDODVcIl0gPSBcIlxcdTA2NDRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDODZcIl0gPSBcIlxcdTA2NDRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDODdcIl0gPSBcIlxcdTA2NDRcXHUwNjRBXCI7XG4gdFtcIlxcdUZDODhcIl0gPSBcIlxcdTA2NDVcXHUwNjI3XCI7XG4gdFtcIlxcdUZDODlcIl0gPSBcIlxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDOEFcIl0gPSBcIlxcdTA2NDZcXHUwNjMxXCI7XG4gdFtcIlxcdUZDOEJcIl0gPSBcIlxcdTA2NDZcXHUwNjMyXCI7XG4gdFtcIlxcdUZDOENcIl0gPSBcIlxcdTA2NDZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDOERcIl0gPSBcIlxcdTA2NDZcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDOEVcIl0gPSBcIlxcdTA2NDZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDOEZcIl0gPSBcIlxcdTA2NDZcXHUwNjRBXCI7XG4gdFtcIlxcdUZDOTBcIl0gPSBcIlxcdTA2NDlcXHUwNjcwXCI7XG4gdFtcIlxcdUZDOTFcIl0gPSBcIlxcdTA2NEFcXHUwNjMxXCI7XG4gdFtcIlxcdUZDOTJcIl0gPSBcIlxcdTA2NEFcXHUwNjMyXCI7XG4gdFtcIlxcdUZDOTNcIl0gPSBcIlxcdTA2NEFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDOTRcIl0gPSBcIlxcdTA2NEFcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDOTVcIl0gPSBcIlxcdTA2NEFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDOTZcIl0gPSBcIlxcdTA2NEFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDOTdcIl0gPSBcIlxcdTA2MjZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDOThcIl0gPSBcIlxcdTA2MjZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDOTlcIl0gPSBcIlxcdTA2MjZcXHUwNjJFXCI7XG4gdFtcIlxcdUZDOUFcIl0gPSBcIlxcdTA2MjZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDOUJcIl0gPSBcIlxcdTA2MjZcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDOUNcIl0gPSBcIlxcdTA2MjhcXHUwNjJDXCI7XG4gdFtcIlxcdUZDOURcIl0gPSBcIlxcdTA2MjhcXHUwNjJEXCI7XG4gdFtcIlxcdUZDOUVcIl0gPSBcIlxcdTA2MjhcXHUwNjJFXCI7XG4gdFtcIlxcdUZDOUZcIl0gPSBcIlxcdTA2MjhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQTBcIl0gPSBcIlxcdTA2MjhcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDQTFcIl0gPSBcIlxcdTA2MkFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQTJcIl0gPSBcIlxcdTA2MkFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQTNcIl0gPSBcIlxcdTA2MkFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQTRcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQTVcIl0gPSBcIlxcdTA2MkFcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDQTZcIl0gPSBcIlxcdTA2MkJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQTdcIl0gPSBcIlxcdTA2MkNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQThcIl0gPSBcIlxcdTA2MkNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQTlcIl0gPSBcIlxcdTA2MkRcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQUFcIl0gPSBcIlxcdTA2MkRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQUJcIl0gPSBcIlxcdTA2MkVcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQUNcIl0gPSBcIlxcdTA2MkVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQURcIl0gPSBcIlxcdTA2MzNcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQUVcIl0gPSBcIlxcdTA2MzNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQUZcIl0gPSBcIlxcdTA2MzNcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQjBcIl0gPSBcIlxcdTA2MzNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQjFcIl0gPSBcIlxcdTA2MzVcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQjJcIl0gPSBcIlxcdTA2MzVcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQjNcIl0gPSBcIlxcdTA2MzVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQjRcIl0gPSBcIlxcdTA2MzZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQjVcIl0gPSBcIlxcdTA2MzZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQjZcIl0gPSBcIlxcdTA2MzZcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQjdcIl0gPSBcIlxcdTA2MzZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQjhcIl0gPSBcIlxcdTA2MzdcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQjlcIl0gPSBcIlxcdTA2MzhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQkFcIl0gPSBcIlxcdTA2MzlcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQkJcIl0gPSBcIlxcdTA2MzlcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQkNcIl0gPSBcIlxcdTA2M0FcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQkRcIl0gPSBcIlxcdTA2M0FcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQkVcIl0gPSBcIlxcdTA2NDFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQkZcIl0gPSBcIlxcdTA2NDFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQzBcIl0gPSBcIlxcdTA2NDFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQzFcIl0gPSBcIlxcdTA2NDFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQzJcIl0gPSBcIlxcdTA2NDJcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQzNcIl0gPSBcIlxcdTA2NDJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQzRcIl0gPSBcIlxcdTA2NDNcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQzVcIl0gPSBcIlxcdTA2NDNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQzZcIl0gPSBcIlxcdTA2NDNcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQzdcIl0gPSBcIlxcdTA2NDNcXHUwNjQ0XCI7XG4gdFtcIlxcdUZDQzhcIl0gPSBcIlxcdTA2NDNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQzlcIl0gPSBcIlxcdTA2NDRcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQ0FcIl0gPSBcIlxcdTA2NDRcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQ0JcIl0gPSBcIlxcdTA2NDRcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQ0NcIl0gPSBcIlxcdTA2NDRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQ0RcIl0gPSBcIlxcdTA2NDRcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDQ0VcIl0gPSBcIlxcdTA2NDVcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQ0ZcIl0gPSBcIlxcdTA2NDVcXHUwNjJEXCI7XG4gdFtcIlxcdUZDRDBcIl0gPSBcIlxcdTA2NDVcXHUwNjJFXCI7XG4gdFtcIlxcdUZDRDFcIl0gPSBcIlxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRDJcIl0gPSBcIlxcdTA2NDZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDRDNcIl0gPSBcIlxcdTA2NDZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDRDRcIl0gPSBcIlxcdTA2NDZcXHUwNjJFXCI7XG4gdFtcIlxcdUZDRDVcIl0gPSBcIlxcdTA2NDZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRDZcIl0gPSBcIlxcdTA2NDZcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRDdcIl0gPSBcIlxcdTA2NDdcXHUwNjJDXCI7XG4gdFtcIlxcdUZDRDhcIl0gPSBcIlxcdTA2NDdcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRDlcIl0gPSBcIlxcdTA2NDdcXHUwNjcwXCI7XG4gdFtcIlxcdUZDREFcIl0gPSBcIlxcdTA2NEFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDREJcIl0gPSBcIlxcdTA2NEFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDRENcIl0gPSBcIlxcdTA2NEFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDRERcIl0gPSBcIlxcdTA2NEFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDREVcIl0gPSBcIlxcdTA2NEFcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDREZcIl0gPSBcIlxcdTA2MjZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRTBcIl0gPSBcIlxcdTA2MjZcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRTFcIl0gPSBcIlxcdTA2MjhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRTJcIl0gPSBcIlxcdTA2MjhcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRTNcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRTRcIl0gPSBcIlxcdTA2MkFcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRTVcIl0gPSBcIlxcdTA2MkJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRTZcIl0gPSBcIlxcdTA2MkJcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRTdcIl0gPSBcIlxcdTA2MzNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRThcIl0gPSBcIlxcdTA2MzNcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRTlcIl0gPSBcIlxcdTA2MzRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRUFcIl0gPSBcIlxcdTA2MzRcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRUJcIl0gPSBcIlxcdTA2NDNcXHUwNjQ0XCI7XG4gdFtcIlxcdUZDRUNcIl0gPSBcIlxcdTA2NDNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRURcIl0gPSBcIlxcdTA2NDRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRUVcIl0gPSBcIlxcdTA2NDZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRUZcIl0gPSBcIlxcdTA2NDZcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRjBcIl0gPSBcIlxcdTA2NEFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRjFcIl0gPSBcIlxcdTA2NEFcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRjJcIl0gPSBcIlxcdTA2NDBcXHUwNjRFXFx1MDY1MVwiO1xuIHRbXCJcXHVGQ0YzXCJdID0gXCJcXHUwNjQwXFx1MDY0RlxcdTA2NTFcIjtcbiB0W1wiXFx1RkNGNFwiXSA9IFwiXFx1MDY0MFxcdTA2NTBcXHUwNjUxXCI7XG4gdFtcIlxcdUZDRjVcIl0gPSBcIlxcdTA2MzdcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDRjZcIl0gPSBcIlxcdTA2MzdcXHUwNjRBXCI7XG4gdFtcIlxcdUZDRjdcIl0gPSBcIlxcdTA2MzlcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDRjhcIl0gPSBcIlxcdTA2MzlcXHUwNjRBXCI7XG4gdFtcIlxcdUZDRjlcIl0gPSBcIlxcdTA2M0FcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDRkFcIl0gPSBcIlxcdTA2M0FcXHUwNjRBXCI7XG4gdFtcIlxcdUZDRkJcIl0gPSBcIlxcdTA2MzNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDRkNcIl0gPSBcIlxcdTA2MzNcXHUwNjRBXCI7XG4gdFtcIlxcdUZDRkRcIl0gPSBcIlxcdTA2MzRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDRkVcIl0gPSBcIlxcdTA2MzRcXHUwNjRBXCI7XG4gdFtcIlxcdUZDRkZcIl0gPSBcIlxcdTA2MkRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMDBcIl0gPSBcIlxcdTA2MkRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMDFcIl0gPSBcIlxcdTA2MkNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMDJcIl0gPSBcIlxcdTA2MkNcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMDNcIl0gPSBcIlxcdTA2MkVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMDRcIl0gPSBcIlxcdTA2MkVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMDVcIl0gPSBcIlxcdTA2MzVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMDZcIl0gPSBcIlxcdTA2MzVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMDdcIl0gPSBcIlxcdTA2MzZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMDhcIl0gPSBcIlxcdTA2MzZcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMDlcIl0gPSBcIlxcdTA2MzRcXHUwNjJDXCI7XG4gdFtcIlxcdUZEMEFcIl0gPSBcIlxcdTA2MzRcXHUwNjJEXCI7XG4gdFtcIlxcdUZEMEJcIl0gPSBcIlxcdTA2MzRcXHUwNjJFXCI7XG4gdFtcIlxcdUZEMENcIl0gPSBcIlxcdTA2MzRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEMERcIl0gPSBcIlxcdTA2MzRcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMEVcIl0gPSBcIlxcdTA2MzNcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMEZcIl0gPSBcIlxcdTA2MzVcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMTBcIl0gPSBcIlxcdTA2MzZcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMTFcIl0gPSBcIlxcdTA2MzdcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMTJcIl0gPSBcIlxcdTA2MzdcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMTNcIl0gPSBcIlxcdTA2MzlcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMTRcIl0gPSBcIlxcdTA2MzlcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMTVcIl0gPSBcIlxcdTA2M0FcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMTZcIl0gPSBcIlxcdTA2M0FcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMTdcIl0gPSBcIlxcdTA2MzNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMThcIl0gPSBcIlxcdTA2MzNcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMTlcIl0gPSBcIlxcdTA2MzRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMUFcIl0gPSBcIlxcdTA2MzRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMUJcIl0gPSBcIlxcdTA2MkRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMUNcIl0gPSBcIlxcdTA2MkRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMURcIl0gPSBcIlxcdTA2MkNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMUVcIl0gPSBcIlxcdTA2MkNcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMUZcIl0gPSBcIlxcdTA2MkVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMjBcIl0gPSBcIlxcdTA2MkVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMjFcIl0gPSBcIlxcdTA2MzVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMjJcIl0gPSBcIlxcdTA2MzVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMjNcIl0gPSBcIlxcdTA2MzZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMjRcIl0gPSBcIlxcdTA2MzZcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMjVcIl0gPSBcIlxcdTA2MzRcXHUwNjJDXCI7XG4gdFtcIlxcdUZEMjZcIl0gPSBcIlxcdTA2MzRcXHUwNjJEXCI7XG4gdFtcIlxcdUZEMjdcIl0gPSBcIlxcdTA2MzRcXHUwNjJFXCI7XG4gdFtcIlxcdUZEMjhcIl0gPSBcIlxcdTA2MzRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEMjlcIl0gPSBcIlxcdTA2MzRcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMkFcIl0gPSBcIlxcdTA2MzNcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMkJcIl0gPSBcIlxcdTA2MzVcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMkNcIl0gPSBcIlxcdTA2MzZcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMkRcIl0gPSBcIlxcdTA2MzRcXHUwNjJDXCI7XG4gdFtcIlxcdUZEMkVcIl0gPSBcIlxcdTA2MzRcXHUwNjJEXCI7XG4gdFtcIlxcdUZEMkZcIl0gPSBcIlxcdTA2MzRcXHUwNjJFXCI7XG4gdFtcIlxcdUZEMzBcIl0gPSBcIlxcdTA2MzRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEMzFcIl0gPSBcIlxcdTA2MzNcXHUwNjQ3XCI7XG4gdFtcIlxcdUZEMzJcIl0gPSBcIlxcdTA2MzRcXHUwNjQ3XCI7XG4gdFtcIlxcdUZEMzNcIl0gPSBcIlxcdTA2MzdcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEMzRcIl0gPSBcIlxcdTA2MzNcXHUwNjJDXCI7XG4gdFtcIlxcdUZEMzVcIl0gPSBcIlxcdTA2MzNcXHUwNjJEXCI7XG4gdFtcIlxcdUZEMzZcIl0gPSBcIlxcdTA2MzNcXHUwNjJFXCI7XG4gdFtcIlxcdUZEMzdcIl0gPSBcIlxcdTA2MzRcXHUwNjJDXCI7XG4gdFtcIlxcdUZEMzhcIl0gPSBcIlxcdTA2MzRcXHUwNjJEXCI7XG4gdFtcIlxcdUZEMzlcIl0gPSBcIlxcdTA2MzRcXHUwNjJFXCI7XG4gdFtcIlxcdUZEM0FcIl0gPSBcIlxcdTA2MzdcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEM0JcIl0gPSBcIlxcdTA2MzhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEM0NcIl0gPSBcIlxcdTA2MjdcXHUwNjRCXCI7XG4gdFtcIlxcdUZEM0RcIl0gPSBcIlxcdTA2MjdcXHUwNjRCXCI7XG4gdFtcIlxcdUZENTBcIl0gPSBcIlxcdTA2MkFcXHUwNjJDXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDUxXCJdID0gXCJcXHUwNjJBXFx1MDYyRFxcdTA2MkNcIjtcbiB0W1wiXFx1RkQ1MlwiXSA9IFwiXFx1MDYyQVxcdTA2MkRcXHUwNjJDXCI7XG4gdFtcIlxcdUZENTNcIl0gPSBcIlxcdTA2MkFcXHUwNjJEXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDU0XCJdID0gXCJcXHUwNjJBXFx1MDYyRVxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ1NVwiXSA9IFwiXFx1MDYyQVxcdTA2NDVcXHUwNjJDXCI7XG4gdFtcIlxcdUZENTZcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XFx1MDYyRFwiO1xuIHRbXCJcXHVGRDU3XCJdID0gXCJcXHUwNjJBXFx1MDY0NVxcdTA2MkVcIjtcbiB0W1wiXFx1RkQ1OFwiXSA9IFwiXFx1MDYyQ1xcdTA2NDVcXHUwNjJEXCI7XG4gdFtcIlxcdUZENTlcIl0gPSBcIlxcdTA2MkNcXHUwNjQ1XFx1MDYyRFwiO1xuIHRbXCJcXHVGRDVBXCJdID0gXCJcXHUwNjJEXFx1MDY0NVxcdTA2NEFcIjtcbiB0W1wiXFx1RkQ1QlwiXSA9IFwiXFx1MDYyRFxcdTA2NDVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZENUNcIl0gPSBcIlxcdTA2MzNcXHUwNjJEXFx1MDYyQ1wiO1xuIHRbXCJcXHVGRDVEXCJdID0gXCJcXHUwNjMzXFx1MDYyQ1xcdTA2MkRcIjtcbiB0W1wiXFx1RkQ1RVwiXSA9IFwiXFx1MDYzM1xcdTA2MkNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZENUZcIl0gPSBcIlxcdTA2MzNcXHUwNjQ1XFx1MDYyRFwiO1xuIHRbXCJcXHVGRDYwXCJdID0gXCJcXHUwNjMzXFx1MDY0NVxcdTA2MkRcIjtcbiB0W1wiXFx1RkQ2MVwiXSA9IFwiXFx1MDYzM1xcdTA2NDVcXHUwNjJDXCI7XG4gdFtcIlxcdUZENjJcIl0gPSBcIlxcdTA2MzNcXHUwNjQ1XFx1MDY0NVwiO1xuIHRbXCJcXHVGRDYzXCJdID0gXCJcXHUwNjMzXFx1MDY0NVxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ2NFwiXSA9IFwiXFx1MDYzNVxcdTA2MkRcXHUwNjJEXCI7XG4gdFtcIlxcdUZENjVcIl0gPSBcIlxcdTA2MzVcXHUwNjJEXFx1MDYyRFwiO1xuIHRbXCJcXHVGRDY2XCJdID0gXCJcXHUwNjM1XFx1MDY0NVxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ2N1wiXSA9IFwiXFx1MDYzNFxcdTA2MkRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZENjhcIl0gPSBcIlxcdTA2MzRcXHUwNjJEXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDY5XCJdID0gXCJcXHUwNjM0XFx1MDYyQ1xcdTA2NEFcIjtcbiB0W1wiXFx1RkQ2QVwiXSA9IFwiXFx1MDYzNFxcdTA2NDVcXHUwNjJFXCI7XG4gdFtcIlxcdUZENkJcIl0gPSBcIlxcdTA2MzRcXHUwNjQ1XFx1MDYyRVwiO1xuIHRbXCJcXHVGRDZDXCJdID0gXCJcXHUwNjM0XFx1MDY0NVxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ2RFwiXSA9IFwiXFx1MDYzNFxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZENkVcIl0gPSBcIlxcdTA2MzZcXHUwNjJEXFx1MDY0OVwiO1xuIHRbXCJcXHVGRDZGXCJdID0gXCJcXHUwNjM2XFx1MDYyRVxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ3MFwiXSA9IFwiXFx1MDYzNlxcdTA2MkVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZENzFcIl0gPSBcIlxcdTA2MzdcXHUwNjQ1XFx1MDYyRFwiO1xuIHRbXCJcXHVGRDcyXCJdID0gXCJcXHUwNjM3XFx1MDY0NVxcdTA2MkRcIjtcbiB0W1wiXFx1RkQ3M1wiXSA9IFwiXFx1MDYzN1xcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZENzRcIl0gPSBcIlxcdTA2MzdcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGRDc1XCJdID0gXCJcXHUwNjM5XFx1MDYyQ1xcdTA2NDVcIjtcbiB0W1wiXFx1RkQ3NlwiXSA9IFwiXFx1MDYzOVxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZENzdcIl0gPSBcIlxcdTA2MzlcXHUwNjQ1XFx1MDY0NVwiO1xuIHRbXCJcXHVGRDc4XCJdID0gXCJcXHUwNjM5XFx1MDY0NVxcdTA2NDlcIjtcbiB0W1wiXFx1RkQ3OVwiXSA9IFwiXFx1MDYzQVxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEN0FcIl0gPSBcIlxcdTA2M0FcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGRDdCXCJdID0gXCJcXHUwNjNBXFx1MDY0NVxcdTA2NDlcIjtcbiB0W1wiXFx1RkQ3Q1wiXSA9IFwiXFx1MDY0MVxcdTA2MkVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEN0RcIl0gPSBcIlxcdTA2NDFcXHUwNjJFXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDdFXCJdID0gXCJcXHUwNjQyXFx1MDY0NVxcdTA2MkRcIjtcbiB0W1wiXFx1RkQ3RlwiXSA9IFwiXFx1MDY0MlxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEODBcIl0gPSBcIlxcdTA2NDRcXHUwNjJEXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDgxXCJdID0gXCJcXHUwNjQ0XFx1MDYyRFxcdTA2NEFcIjtcbiB0W1wiXFx1RkQ4MlwiXSA9IFwiXFx1MDY0NFxcdTA2MkRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEODNcIl0gPSBcIlxcdTA2NDRcXHUwNjJDXFx1MDYyQ1wiO1xuIHRbXCJcXHVGRDg0XCJdID0gXCJcXHUwNjQ0XFx1MDYyQ1xcdTA2MkNcIjtcbiB0W1wiXFx1RkQ4NVwiXSA9IFwiXFx1MDY0NFxcdTA2MkVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEODZcIl0gPSBcIlxcdTA2NDRcXHUwNjJFXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDg3XCJdID0gXCJcXHUwNjQ0XFx1MDY0NVxcdTA2MkRcIjtcbiB0W1wiXFx1RkQ4OFwiXSA9IFwiXFx1MDY0NFxcdTA2NDVcXHUwNjJEXCI7XG4gdFtcIlxcdUZEODlcIl0gPSBcIlxcdTA2NDVcXHUwNjJEXFx1MDYyQ1wiO1xuIHRbXCJcXHVGRDhBXCJdID0gXCJcXHUwNjQ1XFx1MDYyRFxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ4QlwiXSA9IFwiXFx1MDY0NVxcdTA2MkRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEOENcIl0gPSBcIlxcdTA2NDVcXHUwNjJDXFx1MDYyRFwiO1xuIHRbXCJcXHVGRDhEXCJdID0gXCJcXHUwNjQ1XFx1MDYyQ1xcdTA2NDVcIjtcbiB0W1wiXFx1RkQ4RVwiXSA9IFwiXFx1MDY0NVxcdTA2MkVcXHUwNjJDXCI7XG4gdFtcIlxcdUZEOEZcIl0gPSBcIlxcdTA2NDVcXHUwNjJFXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDkyXCJdID0gXCJcXHUwNjQ1XFx1MDYyQ1xcdTA2MkVcIjtcbiB0W1wiXFx1RkQ5M1wiXSA9IFwiXFx1MDY0N1xcdTA2NDVcXHUwNjJDXCI7XG4gdFtcIlxcdUZEOTRcIl0gPSBcIlxcdTA2NDdcXHUwNjQ1XFx1MDY0NVwiO1xuIHRbXCJcXHVGRDk1XCJdID0gXCJcXHUwNjQ2XFx1MDYyRFxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ5NlwiXSA9IFwiXFx1MDY0NlxcdTA2MkRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEOTdcIl0gPSBcIlxcdTA2NDZcXHUwNjJDXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDk4XCJdID0gXCJcXHUwNjQ2XFx1MDYyQ1xcdTA2NDVcIjtcbiB0W1wiXFx1RkQ5OVwiXSA9IFwiXFx1MDY0NlxcdTA2MkNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEOUFcIl0gPSBcIlxcdTA2NDZcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGRDlCXCJdID0gXCJcXHUwNjQ2XFx1MDY0NVxcdTA2NDlcIjtcbiB0W1wiXFx1RkQ5Q1wiXSA9IFwiXFx1MDY0QVxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEOURcIl0gPSBcIlxcdTA2NEFcXHUwNjQ1XFx1MDY0NVwiO1xuIHRbXCJcXHVGRDlFXCJdID0gXCJcXHUwNjI4XFx1MDYyRVxcdTA2NEFcIjtcbiB0W1wiXFx1RkQ5RlwiXSA9IFwiXFx1MDYyQVxcdTA2MkNcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQTBcIl0gPSBcIlxcdTA2MkFcXHUwNjJDXFx1MDY0OVwiO1xuIHRbXCJcXHVGREExXCJdID0gXCJcXHUwNjJBXFx1MDYyRVxcdTA2NEFcIjtcbiB0W1wiXFx1RkRBMlwiXSA9IFwiXFx1MDYyQVxcdTA2MkVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEQTNcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGREE0XCJdID0gXCJcXHUwNjJBXFx1MDY0NVxcdTA2NDlcIjtcbiB0W1wiXFx1RkRBNVwiXSA9IFwiXFx1MDYyQ1xcdTA2NDVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQTZcIl0gPSBcIlxcdTA2MkNcXHUwNjJEXFx1MDY0OVwiO1xuIHRbXCJcXHVGREE3XCJdID0gXCJcXHUwNjJDXFx1MDY0NVxcdTA2NDlcIjtcbiB0W1wiXFx1RkRBOFwiXSA9IFwiXFx1MDYzM1xcdTA2MkVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEQTlcIl0gPSBcIlxcdTA2MzVcXHUwNjJEXFx1MDY0QVwiO1xuIHRbXCJcXHVGREFBXCJdID0gXCJcXHUwNjM0XFx1MDYyRFxcdTA2NEFcIjtcbiB0W1wiXFx1RkRBQlwiXSA9IFwiXFx1MDYzNlxcdTA2MkRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQUNcIl0gPSBcIlxcdTA2NDRcXHUwNjJDXFx1MDY0QVwiO1xuIHRbXCJcXHVGREFEXCJdID0gXCJcXHUwNjQ0XFx1MDY0NVxcdTA2NEFcIjtcbiB0W1wiXFx1RkRBRVwiXSA9IFwiXFx1MDY0QVxcdTA2MkRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQUZcIl0gPSBcIlxcdTA2NEFcXHUwNjJDXFx1MDY0QVwiO1xuIHRbXCJcXHVGREIwXCJdID0gXCJcXHUwNjRBXFx1MDY0NVxcdTA2NEFcIjtcbiB0W1wiXFx1RkRCMVwiXSA9IFwiXFx1MDY0NVxcdTA2NDVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQjJcIl0gPSBcIlxcdTA2NDJcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGREIzXCJdID0gXCJcXHUwNjQ2XFx1MDYyRFxcdTA2NEFcIjtcbiB0W1wiXFx1RkRCNFwiXSA9IFwiXFx1MDY0MlxcdTA2NDVcXHUwNjJEXCI7XG4gdFtcIlxcdUZEQjVcIl0gPSBcIlxcdTA2NDRcXHUwNjJEXFx1MDY0NVwiO1xuIHRbXCJcXHVGREI2XCJdID0gXCJcXHUwNjM5XFx1MDY0NVxcdTA2NEFcIjtcbiB0W1wiXFx1RkRCN1wiXSA9IFwiXFx1MDY0M1xcdTA2NDVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQjhcIl0gPSBcIlxcdTA2NDZcXHUwNjJDXFx1MDYyRFwiO1xuIHRbXCJcXHVGREI5XCJdID0gXCJcXHUwNjQ1XFx1MDYyRVxcdTA2NEFcIjtcbiB0W1wiXFx1RkRCQVwiXSA9IFwiXFx1MDY0NFxcdTA2MkNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEQkJcIl0gPSBcIlxcdTA2NDNcXHUwNjQ1XFx1MDY0NVwiO1xuIHRbXCJcXHVGREJDXCJdID0gXCJcXHUwNjQ0XFx1MDYyQ1xcdTA2NDVcIjtcbiB0W1wiXFx1RkRCRFwiXSA9IFwiXFx1MDY0NlxcdTA2MkNcXHUwNjJEXCI7XG4gdFtcIlxcdUZEQkVcIl0gPSBcIlxcdTA2MkNcXHUwNjJEXFx1MDY0QVwiO1xuIHRbXCJcXHVGREJGXCJdID0gXCJcXHUwNjJEXFx1MDYyQ1xcdTA2NEFcIjtcbiB0W1wiXFx1RkRDMFwiXSA9IFwiXFx1MDY0NVxcdTA2MkNcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQzFcIl0gPSBcIlxcdTA2NDFcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGREMyXCJdID0gXCJcXHUwNjI4XFx1MDYyRFxcdTA2NEFcIjtcbiB0W1wiXFx1RkRDM1wiXSA9IFwiXFx1MDY0M1xcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEQzRcIl0gPSBcIlxcdTA2MzlcXHUwNjJDXFx1MDY0NVwiO1xuIHRbXCJcXHVGREM1XCJdID0gXCJcXHUwNjM1XFx1MDY0NVxcdTA2NDVcIjtcbiB0W1wiXFx1RkRDNlwiXSA9IFwiXFx1MDYzM1xcdTA2MkVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQzdcIl0gPSBcIlxcdTA2NDZcXHUwNjJDXFx1MDY0QVwiO1xuIHRbXCJcXHVGRTQ5XCJdID0gXCJcXHUyMDNFXCI7XG4gdFtcIlxcdUZFNEFcIl0gPSBcIlxcdTIwM0VcIjtcbiB0W1wiXFx1RkU0QlwiXSA9IFwiXFx1MjAzRVwiO1xuIHRbXCJcXHVGRTRDXCJdID0gXCJcXHUyMDNFXCI7XG4gdFtcIlxcdUZFNERcIl0gPSBcIlxcdTAwNUZcIjtcbiB0W1wiXFx1RkU0RVwiXSA9IFwiXFx1MDA1RlwiO1xuIHRbXCJcXHVGRTRGXCJdID0gXCJcXHUwMDVGXCI7XG4gdFtcIlxcdUZFODBcIl0gPSBcIlxcdTA2MjFcIjtcbiB0W1wiXFx1RkU4MVwiXSA9IFwiXFx1MDYyMlwiO1xuIHRbXCJcXHVGRTgyXCJdID0gXCJcXHUwNjIyXCI7XG4gdFtcIlxcdUZFODNcIl0gPSBcIlxcdTA2MjNcIjtcbiB0W1wiXFx1RkU4NFwiXSA9IFwiXFx1MDYyM1wiO1xuIHRbXCJcXHVGRTg1XCJdID0gXCJcXHUwNjI0XCI7XG4gdFtcIlxcdUZFODZcIl0gPSBcIlxcdTA2MjRcIjtcbiB0W1wiXFx1RkU4N1wiXSA9IFwiXFx1MDYyNVwiO1xuIHRbXCJcXHVGRTg4XCJdID0gXCJcXHUwNjI1XCI7XG4gdFtcIlxcdUZFODlcIl0gPSBcIlxcdTA2MjZcIjtcbiB0W1wiXFx1RkU4QVwiXSA9IFwiXFx1MDYyNlwiO1xuIHRbXCJcXHVGRThCXCJdID0gXCJcXHUwNjI2XCI7XG4gdFtcIlxcdUZFOENcIl0gPSBcIlxcdTA2MjZcIjtcbiB0W1wiXFx1RkU4RFwiXSA9IFwiXFx1MDYyN1wiO1xuIHRbXCJcXHVGRThFXCJdID0gXCJcXHUwNjI3XCI7XG4gdFtcIlxcdUZFOEZcIl0gPSBcIlxcdTA2MjhcIjtcbiB0W1wiXFx1RkU5MFwiXSA9IFwiXFx1MDYyOFwiO1xuIHRbXCJcXHVGRTkxXCJdID0gXCJcXHUwNjI4XCI7XG4gdFtcIlxcdUZFOTJcIl0gPSBcIlxcdTA2MjhcIjtcbiB0W1wiXFx1RkU5M1wiXSA9IFwiXFx1MDYyOVwiO1xuIHRbXCJcXHVGRTk0XCJdID0gXCJcXHUwNjI5XCI7XG4gdFtcIlxcdUZFOTVcIl0gPSBcIlxcdTA2MkFcIjtcbiB0W1wiXFx1RkU5NlwiXSA9IFwiXFx1MDYyQVwiO1xuIHRbXCJcXHVGRTk3XCJdID0gXCJcXHUwNjJBXCI7XG4gdFtcIlxcdUZFOThcIl0gPSBcIlxcdTA2MkFcIjtcbiB0W1wiXFx1RkU5OVwiXSA9IFwiXFx1MDYyQlwiO1xuIHRbXCJcXHVGRTlBXCJdID0gXCJcXHUwNjJCXCI7XG4gdFtcIlxcdUZFOUJcIl0gPSBcIlxcdTA2MkJcIjtcbiB0W1wiXFx1RkU5Q1wiXSA9IFwiXFx1MDYyQlwiO1xuIHRbXCJcXHVGRTlEXCJdID0gXCJcXHUwNjJDXCI7XG4gdFtcIlxcdUZFOUVcIl0gPSBcIlxcdTA2MkNcIjtcbiB0W1wiXFx1RkU5RlwiXSA9IFwiXFx1MDYyQ1wiO1xuIHRbXCJcXHVGRUEwXCJdID0gXCJcXHUwNjJDXCI7XG4gdFtcIlxcdUZFQTFcIl0gPSBcIlxcdTA2MkRcIjtcbiB0W1wiXFx1RkVBMlwiXSA9IFwiXFx1MDYyRFwiO1xuIHRbXCJcXHVGRUEzXCJdID0gXCJcXHUwNjJEXCI7XG4gdFtcIlxcdUZFQTRcIl0gPSBcIlxcdTA2MkRcIjtcbiB0W1wiXFx1RkVBNVwiXSA9IFwiXFx1MDYyRVwiO1xuIHRbXCJcXHVGRUE2XCJdID0gXCJcXHUwNjJFXCI7XG4gdFtcIlxcdUZFQTdcIl0gPSBcIlxcdTA2MkVcIjtcbiB0W1wiXFx1RkVBOFwiXSA9IFwiXFx1MDYyRVwiO1xuIHRbXCJcXHVGRUE5XCJdID0gXCJcXHUwNjJGXCI7XG4gdFtcIlxcdUZFQUFcIl0gPSBcIlxcdTA2MkZcIjtcbiB0W1wiXFx1RkVBQlwiXSA9IFwiXFx1MDYzMFwiO1xuIHRbXCJcXHVGRUFDXCJdID0gXCJcXHUwNjMwXCI7XG4gdFtcIlxcdUZFQURcIl0gPSBcIlxcdTA2MzFcIjtcbiB0W1wiXFx1RkVBRVwiXSA9IFwiXFx1MDYzMVwiO1xuIHRbXCJcXHVGRUFGXCJdID0gXCJcXHUwNjMyXCI7XG4gdFtcIlxcdUZFQjBcIl0gPSBcIlxcdTA2MzJcIjtcbiB0W1wiXFx1RkVCMVwiXSA9IFwiXFx1MDYzM1wiO1xuIHRbXCJcXHVGRUIyXCJdID0gXCJcXHUwNjMzXCI7XG4gdFtcIlxcdUZFQjNcIl0gPSBcIlxcdTA2MzNcIjtcbiB0W1wiXFx1RkVCNFwiXSA9IFwiXFx1MDYzM1wiO1xuIHRbXCJcXHVGRUI1XCJdID0gXCJcXHUwNjM0XCI7XG4gdFtcIlxcdUZFQjZcIl0gPSBcIlxcdTA2MzRcIjtcbiB0W1wiXFx1RkVCN1wiXSA9IFwiXFx1MDYzNFwiO1xuIHRbXCJcXHVGRUI4XCJdID0gXCJcXHUwNjM0XCI7XG4gdFtcIlxcdUZFQjlcIl0gPSBcIlxcdTA2MzVcIjtcbiB0W1wiXFx1RkVCQVwiXSA9IFwiXFx1MDYzNVwiO1xuIHRbXCJcXHVGRUJCXCJdID0gXCJcXHUwNjM1XCI7XG4gdFtcIlxcdUZFQkNcIl0gPSBcIlxcdTA2MzVcIjtcbiB0W1wiXFx1RkVCRFwiXSA9IFwiXFx1MDYzNlwiO1xuIHRbXCJcXHVGRUJFXCJdID0gXCJcXHUwNjM2XCI7XG4gdFtcIlxcdUZFQkZcIl0gPSBcIlxcdTA2MzZcIjtcbiB0W1wiXFx1RkVDMFwiXSA9IFwiXFx1MDYzNlwiO1xuIHRbXCJcXHVGRUMxXCJdID0gXCJcXHUwNjM3XCI7XG4gdFtcIlxcdUZFQzJcIl0gPSBcIlxcdTA2MzdcIjtcbiB0W1wiXFx1RkVDM1wiXSA9IFwiXFx1MDYzN1wiO1xuIHRbXCJcXHVGRUM0XCJdID0gXCJcXHUwNjM3XCI7XG4gdFtcIlxcdUZFQzVcIl0gPSBcIlxcdTA2MzhcIjtcbiB0W1wiXFx1RkVDNlwiXSA9IFwiXFx1MDYzOFwiO1xuIHRbXCJcXHVGRUM3XCJdID0gXCJcXHUwNjM4XCI7XG4gdFtcIlxcdUZFQzhcIl0gPSBcIlxcdTA2MzhcIjtcbiB0W1wiXFx1RkVDOVwiXSA9IFwiXFx1MDYzOVwiO1xuIHRbXCJcXHVGRUNBXCJdID0gXCJcXHUwNjM5XCI7XG4gdFtcIlxcdUZFQ0JcIl0gPSBcIlxcdTA2MzlcIjtcbiB0W1wiXFx1RkVDQ1wiXSA9IFwiXFx1MDYzOVwiO1xuIHRbXCJcXHVGRUNEXCJdID0gXCJcXHUwNjNBXCI7XG4gdFtcIlxcdUZFQ0VcIl0gPSBcIlxcdTA2M0FcIjtcbiB0W1wiXFx1RkVDRlwiXSA9IFwiXFx1MDYzQVwiO1xuIHRbXCJcXHVGRUQwXCJdID0gXCJcXHUwNjNBXCI7XG4gdFtcIlxcdUZFRDFcIl0gPSBcIlxcdTA2NDFcIjtcbiB0W1wiXFx1RkVEMlwiXSA9IFwiXFx1MDY0MVwiO1xuIHRbXCJcXHVGRUQzXCJdID0gXCJcXHUwNjQxXCI7XG4gdFtcIlxcdUZFRDRcIl0gPSBcIlxcdTA2NDFcIjtcbiB0W1wiXFx1RkVENVwiXSA9IFwiXFx1MDY0MlwiO1xuIHRbXCJcXHVGRUQ2XCJdID0gXCJcXHUwNjQyXCI7XG4gdFtcIlxcdUZFRDdcIl0gPSBcIlxcdTA2NDJcIjtcbiB0W1wiXFx1RkVEOFwiXSA9IFwiXFx1MDY0MlwiO1xuIHRbXCJcXHVGRUQ5XCJdID0gXCJcXHUwNjQzXCI7XG4gdFtcIlxcdUZFREFcIl0gPSBcIlxcdTA2NDNcIjtcbiB0W1wiXFx1RkVEQlwiXSA9IFwiXFx1MDY0M1wiO1xuIHRbXCJcXHVGRURDXCJdID0gXCJcXHUwNjQzXCI7XG4gdFtcIlxcdUZFRERcIl0gPSBcIlxcdTA2NDRcIjtcbiB0W1wiXFx1RkVERVwiXSA9IFwiXFx1MDY0NFwiO1xuIHRbXCJcXHVGRURGXCJdID0gXCJcXHUwNjQ0XCI7XG4gdFtcIlxcdUZFRTBcIl0gPSBcIlxcdTA2NDRcIjtcbiB0W1wiXFx1RkVFMVwiXSA9IFwiXFx1MDY0NVwiO1xuIHRbXCJcXHVGRUUyXCJdID0gXCJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZFRTNcIl0gPSBcIlxcdTA2NDVcIjtcbiB0W1wiXFx1RkVFNFwiXSA9IFwiXFx1MDY0NVwiO1xuIHRbXCJcXHVGRUU1XCJdID0gXCJcXHUwNjQ2XCI7XG4gdFtcIlxcdUZFRTZcIl0gPSBcIlxcdTA2NDZcIjtcbiB0W1wiXFx1RkVFN1wiXSA9IFwiXFx1MDY0NlwiO1xuIHRbXCJcXHVGRUU4XCJdID0gXCJcXHUwNjQ2XCI7XG4gdFtcIlxcdUZFRTlcIl0gPSBcIlxcdTA2NDdcIjtcbiB0W1wiXFx1RkVFQVwiXSA9IFwiXFx1MDY0N1wiO1xuIHRbXCJcXHVGRUVCXCJdID0gXCJcXHUwNjQ3XCI7XG4gdFtcIlxcdUZFRUNcIl0gPSBcIlxcdTA2NDdcIjtcbiB0W1wiXFx1RkVFRFwiXSA9IFwiXFx1MDY0OFwiO1xuIHRbXCJcXHVGRUVFXCJdID0gXCJcXHUwNjQ4XCI7XG4gdFtcIlxcdUZFRUZcIl0gPSBcIlxcdTA2NDlcIjtcbiB0W1wiXFx1RkVGMFwiXSA9IFwiXFx1MDY0OVwiO1xuIHRbXCJcXHVGRUYxXCJdID0gXCJcXHUwNjRBXCI7XG4gdFtcIlxcdUZFRjJcIl0gPSBcIlxcdTA2NEFcIjtcbiB0W1wiXFx1RkVGM1wiXSA9IFwiXFx1MDY0QVwiO1xuIHRbXCJcXHVGRUY0XCJdID0gXCJcXHUwNjRBXCI7XG4gdFtcIlxcdUZFRjVcIl0gPSBcIlxcdTA2NDRcXHUwNjIyXCI7XG4gdFtcIlxcdUZFRjZcIl0gPSBcIlxcdTA2NDRcXHUwNjIyXCI7XG4gdFtcIlxcdUZFRjdcIl0gPSBcIlxcdTA2NDRcXHUwNjIzXCI7XG4gdFtcIlxcdUZFRjhcIl0gPSBcIlxcdTA2NDRcXHUwNjIzXCI7XG4gdFtcIlxcdUZFRjlcIl0gPSBcIlxcdTA2NDRcXHUwNjI1XCI7XG4gdFtcIlxcdUZFRkFcIl0gPSBcIlxcdTA2NDRcXHUwNjI1XCI7XG4gdFtcIlxcdUZFRkJcIl0gPSBcIlxcdTA2NDRcXHUwNjI3XCI7XG4gdFtcIlxcdUZFRkNcIl0gPSBcIlxcdTA2NDRcXHUwNjI3XCI7XG59KTtcbmZ1bmN0aW9uIHJldmVyc2VJZlJ0bChjaGFycykge1xuIHZhciBjaGFyc0xlbmd0aCA9IGNoYXJzLmxlbmd0aDtcbiBpZiAoY2hhcnNMZW5ndGggPD0gMSB8fCAhaXNSVExSYW5nZUZvcihjaGFycy5jaGFyQ29kZUF0KDApKSkge1xuICByZXR1cm4gY2hhcnM7XG4gfVxuIHZhciBzID0gXCJcIjtcbiBmb3IgKHZhciBpaSA9IGNoYXJzTGVuZ3RoIC0gMTsgaWkgPj0gMDsgaWktLSkge1xuICBzICs9IGNoYXJzW2lpXTtcbiB9XG4gcmV0dXJuIHM7XG59XG5leHBvcnRzLm1hcFNwZWNpYWxVbmljb2RlVmFsdWVzID0gbWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXM7XG5leHBvcnRzLnJldmVyc2VJZlJ0bCA9IHJldmVyc2VJZlJ0bDtcbmV4cG9ydHMuZ2V0VW5pY29kZVJhbmdlRm9yID0gZ2V0VW5pY29kZVJhbmdlRm9yO1xuZXhwb3J0cy5nZXROb3JtYWxpemVkVW5pY29kZXMgPSBnZXROb3JtYWxpemVkVW5pY29kZXM7XG5leHBvcnRzLmdldFVuaWNvZGVGb3JHbHlwaCA9IGdldFVuaWNvZGVGb3JHbHlwaDtcblxuLyoqKi8gfSksXG4vKiAzNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Gb250UmVuZGVyZXJGYWN0b3J5ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NmZl9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMwKTtcblxudmFyIF9nbHlwaGxpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMzKTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMyKTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIEZvbnRSZW5kZXJlckZhY3RvcnkgPSBmdW5jdGlvbiBGb250UmVuZGVyZXJGYWN0b3J5Q2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gZ2V0TG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM107XG4gIH1cblxuICBmdW5jdGlvbiBnZXRVc2hvcnQoZGF0YSwgb2Zmc2V0KSB7XG4gICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAxXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN1YnJvdXRpbmVCaWFzKHN1YnJzKSB7XG4gICAgY29uc3QgbnVtU3VicnMgPSBzdWJycy5sZW5ndGg7XG4gICAgbGV0IGJpYXMgPSAzMjc2ODtcblxuICAgIGlmIChudW1TdWJycyA8IDEyNDApIHtcbiAgICAgIGJpYXMgPSAxMDc7XG4gICAgfSBlbHNlIGlmIChudW1TdWJycyA8IDMzOTAwKSB7XG4gICAgICBiaWFzID0gMTEzMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmlhcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ21hcChkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIG9mZnNldCA9IGdldFVzaG9ydChkYXRhLCBzdGFydCArIDIpID09PSAxID8gZ2V0TG9uZyhkYXRhLCBzdGFydCArIDgpIDogZ2V0TG9uZyhkYXRhLCBzdGFydCArIDE2KTtcbiAgICB2YXIgZm9ybWF0ID0gZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0KTtcbiAgICB2YXIgcmFuZ2VzLCBwLCBpO1xuXG4gICAgaWYgKGZvcm1hdCA9PT0gNCkge1xuICAgICAgZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgMik7XG4gICAgICB2YXIgc2VnQ291bnQgPSBnZXRVc2hvcnQoZGF0YSwgc3RhcnQgKyBvZmZzZXQgKyA2KSA+PiAxO1xuICAgICAgcCA9IHN0YXJ0ICsgb2Zmc2V0ICsgMTQ7XG4gICAgICByYW5nZXMgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHNlZ0NvdW50OyBpKyssIHAgKz0gMikge1xuICAgICAgICByYW5nZXNbaV0gPSB7XG4gICAgICAgICAgZW5kOiBnZXRVc2hvcnQoZGF0YSwgcClcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcCArPSAyO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc2VnQ291bnQ7IGkrKywgcCArPSAyKSB7XG4gICAgICAgIHJhbmdlc1tpXS5zdGFydCA9IGdldFVzaG9ydChkYXRhLCBwKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHNlZ0NvdW50OyBpKyssIHAgKz0gMikge1xuICAgICAgICByYW5nZXNbaV0uaWREZWx0YSA9IGdldFVzaG9ydChkYXRhLCBwKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHNlZ0NvdW50OyBpKyssIHAgKz0gMikge1xuICAgICAgICB2YXIgaWRPZmZzZXQgPSBnZXRVc2hvcnQoZGF0YSwgcCk7XG5cbiAgICAgICAgaWYgKGlkT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICByYW5nZXNbaV0uaWRzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcmFuZ2VzW2ldLmVuZCAtIHJhbmdlc1tpXS5zdGFydCArIDE7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgcmFuZ2VzW2ldLmlkc1tqXSA9IGdldFVzaG9ydChkYXRhLCBwICsgaWRPZmZzZXQpO1xuICAgICAgICAgIGlkT2Zmc2V0ICs9IDI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gMTIpIHtcbiAgICAgIGdldExvbmcoZGF0YSwgc3RhcnQgKyBvZmZzZXQgKyA0KTtcbiAgICAgIHZhciBncm91cHMgPSBnZXRMb25nKGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgMTIpO1xuICAgICAgcCA9IHN0YXJ0ICsgb2Zmc2V0ICsgMTY7XG4gICAgICByYW5nZXMgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGdyb3VwczsgaSsrKSB7XG4gICAgICAgIHJhbmdlcy5wdXNoKHtcbiAgICAgICAgICBzdGFydDogZ2V0TG9uZyhkYXRhLCBwKSxcbiAgICAgICAgICBlbmQ6IGdldExvbmcoZGF0YSwgcCArIDQpLFxuICAgICAgICAgIGlkRGVsdGE6IGdldExvbmcoZGF0YSwgcCArIDgpIC0gZ2V0TG9uZyhkYXRhLCBwKVxuICAgICAgICB9KTtcbiAgICAgICAgcCArPSAxMjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYHVuc3VwcG9ydGVkIGNtYXA6ICR7Zm9ybWF0fWApO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDZmYoZGF0YSwgc3RhcnQsIGVuZCwgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG4gICAgdmFyIHBhcnNlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZQYXJzZXIobmV3IF9zdHJlYW0uU3RyZWFtKGRhdGEsIHN0YXJ0LCBlbmQgLSBzdGFydCksIHByb3BlcnRpZXMsIHNlYWNBbmFseXNpc0VuYWJsZWQpO1xuICAgIHZhciBjZmYgPSBwYXJzZXIucGFyc2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2x5cGhzOiBjZmYuY2hhclN0cmluZ3Mub2JqZWN0cyxcbiAgICAgIHN1YnJzOiBjZmYudG9wRGljdC5wcml2YXRlRGljdCAmJiBjZmYudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4ICYmIGNmZi50b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cyxcbiAgICAgIGdzdWJyczogY2ZmLmdsb2JhbFN1YnJJbmRleCAmJiBjZmYuZ2xvYmFsU3VickluZGV4Lm9iamVjdHMsXG4gICAgICBpc0NGRkNJREZvbnQ6IGNmZi5pc0NJREZvbnQsXG4gICAgICBmZFNlbGVjdDogY2ZmLmZkU2VsZWN0LFxuICAgICAgZmRBcnJheTogY2ZmLmZkQXJyYXlcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VHbHlmVGFibGUoZ2x5ZiwgbG9jYSwgaXNHbHlwaExvY2F0aW9uc0xvbmcpIHtcbiAgICB2YXIgaXRlbVNpemUsIGl0ZW1EZWNvZGU7XG5cbiAgICBpZiAoaXNHbHlwaExvY2F0aW9uc0xvbmcpIHtcbiAgICAgIGl0ZW1TaXplID0gNDtcblxuICAgICAgaXRlbURlY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbVNpemUgPSAyO1xuXG4gICAgICBpdGVtRGVjb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBkYXRhW29mZnNldF0gPDwgOSB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGdseXBocyA9IFtdO1xuICAgIHZhciBzdGFydE9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYSwgMCk7XG5cbiAgICBmb3IgKHZhciBqID0gaXRlbVNpemU7IGogPCBsb2NhLmxlbmd0aDsgaiArPSBpdGVtU2l6ZSkge1xuICAgICAgdmFyIGVuZE9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYSwgaik7XG4gICAgICBnbHlwaHMucHVzaChnbHlmLnN1YmFycmF5KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTtcbiAgICAgIHN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0O1xuICAgIH1cblxuICAgIHJldHVybiBnbHlwaHM7XG4gIH1cblxuICBmdW5jdGlvbiBsb29rdXBDbWFwKHJhbmdlcywgdW5pY29kZSkge1xuICAgIHZhciBjb2RlID0gdW5pY29kZS5jb2RlUG9pbnRBdCgwKSxcbiAgICAgICAgZ2lkID0gMDtcbiAgICB2YXIgbCA9IDAsXG4gICAgICAgIHIgPSByYW5nZXMubGVuZ3RoIC0gMTtcblxuICAgIHdoaWxlIChsIDwgcikge1xuICAgICAgdmFyIGMgPSBsICsgciArIDEgPj4gMTtcblxuICAgICAgaWYgKGNvZGUgPCByYW5nZXNbY10uc3RhcnQpIHtcbiAgICAgICAgciA9IGMgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbCA9IGM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJhbmdlc1tsXS5zdGFydCA8PSBjb2RlICYmIGNvZGUgPD0gcmFuZ2VzW2xdLmVuZCkge1xuICAgICAgZ2lkID0gcmFuZ2VzW2xdLmlkRGVsdGEgKyAocmFuZ2VzW2xdLmlkcyA/IHJhbmdlc1tsXS5pZHNbY29kZSAtIHJhbmdlc1tsXS5zdGFydF0gOiBjb2RlKSAmIDB4ZmZmZjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hhckNvZGU6IGNvZGUsXG4gICAgICBnbHlwaElkOiBnaWRcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGlsZUdseWYoY29kZSwgY21kcywgZm9udCkge1xuICAgIGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSB7XG4gICAgICBjbWRzLnB1c2goe1xuICAgICAgICBjbWQ6IFwibW92ZVRvXCIsXG4gICAgICAgIGFyZ3M6IFt4LCB5XVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVRvKHgsIHkpIHtcbiAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgIGNtZDogXCJsaW5lVG9cIixcbiAgICAgICAgYXJnczogW3gsIHldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBxdWFkcmF0aWNDdXJ2ZVRvKHhhLCB5YSwgeCwgeSkge1xuICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgY21kOiBcInF1YWRyYXRpY0N1cnZlVG9cIixcbiAgICAgICAgYXJnczogW3hhLCB5YSwgeCwgeV1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgbnVtYmVyT2ZDb250b3VycyA9IChjb2RlW2ldIDw8IDI0IHwgY29kZVtpICsgMV0gPDwgMTYpID4+IDE2O1xuICAgIHZhciBmbGFncztcbiAgICB2YXIgeCA9IDAsXG4gICAgICAgIHkgPSAwO1xuICAgIGkgKz0gMTA7XG5cbiAgICBpZiAobnVtYmVyT2ZDb250b3VycyA8IDApIHtcbiAgICAgIGRvIHtcbiAgICAgICAgZmxhZ3MgPSBjb2RlW2ldIDw8IDggfCBjb2RlW2kgKyAxXTtcbiAgICAgICAgdmFyIGdseXBoSW5kZXggPSBjb2RlW2kgKyAyXSA8PCA4IHwgY29kZVtpICsgM107XG4gICAgICAgIGkgKz0gNDtcbiAgICAgICAgdmFyIGFyZzEsIGFyZzI7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgMHgwMSkge1xuICAgICAgICAgIGFyZzEgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICBhcmcyID0gKGNvZGVbaSArIDJdIDw8IDI0IHwgY29kZVtpICsgM10gPDwgMTYpID4+IDE2O1xuICAgICAgICAgIGkgKz0gNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcmcxID0gY29kZVtpKytdO1xuICAgICAgICAgIGFyZzIgPSBjb2RlW2krK107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmxhZ3MgJiAweDAyKSB7XG4gICAgICAgICAgeCA9IGFyZzE7XG4gICAgICAgICAgeSA9IGFyZzI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeCA9IDA7XG4gICAgICAgICAgeSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2NhbGVYID0gMSxcbiAgICAgICAgICAgIHNjYWxlWSA9IDEsXG4gICAgICAgICAgICBzY2FsZTAxID0gMCxcbiAgICAgICAgICAgIHNjYWxlMTAgPSAwO1xuXG4gICAgICAgIGlmIChmbGFncyAmIDB4MDgpIHtcbiAgICAgICAgICBzY2FsZVggPSBzY2FsZVkgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgMHg0MCkge1xuICAgICAgICAgIHNjYWxlWCA9IChjb2RlW2ldIDw8IDI0IHwgY29kZVtpICsgMV0gPDwgMTYpIC8gMTA3Mzc0MTgyNDtcbiAgICAgICAgICBzY2FsZVkgPSAoY29kZVtpICsgMl0gPDwgMjQgfCBjb2RlW2kgKyAzXSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICAgIGkgKz0gNDtcbiAgICAgICAgfSBlbHNlIGlmIChmbGFncyAmIDB4ODApIHtcbiAgICAgICAgICBzY2FsZVggPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgc2NhbGUwMSA9IChjb2RlW2kgKyAyXSA8PCAyNCB8IGNvZGVbaSArIDNdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgc2NhbGUxMCA9IChjb2RlW2kgKyA0XSA8PCAyNCB8IGNvZGVbaSArIDVdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgc2NhbGVZID0gKGNvZGVbaSArIDZdIDw8IDI0IHwgY29kZVtpICsgN10gPDwgMTYpIC8gMTA3Mzc0MTgyNDtcbiAgICAgICAgICBpICs9IDg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3ViZ2x5cGggPSBmb250LmdseXBoc1tnbHlwaEluZGV4XTtcblxuICAgICAgICBpZiAoc3ViZ2x5cGgpIHtcbiAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgY21kOiBcInNhdmVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICBjbWQ6IFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBhcmdzOiBbc2NhbGVYLCBzY2FsZTAxLCBzY2FsZTEwLCBzY2FsZVksIHgsIHldXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29tcGlsZUdseWYoc3ViZ2x5cGgsIGNtZHMsIGZvbnQpO1xuICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICBjbWQ6IFwicmVzdG9yZVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKGZsYWdzICYgMHgyMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlbmRQdHNPZkNvbnRvdXJzID0gW107XG4gICAgICB2YXIgaiwgamo7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBudW1iZXJPZkNvbnRvdXJzOyBqKyspIHtcbiAgICAgICAgZW5kUHRzT2ZDb250b3Vycy5wdXNoKGNvZGVbaV0gPDwgOCB8IGNvZGVbaSArIDFdKTtcbiAgICAgICAgaSArPSAyO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdHJ1Y3Rpb25MZW5ndGggPSBjb2RlW2ldIDw8IDggfCBjb2RlW2kgKyAxXTtcbiAgICAgIGkgKz0gMiArIGluc3RydWN0aW9uTGVuZ3RoO1xuICAgICAgdmFyIG51bWJlck9mUG9pbnRzID0gZW5kUHRzT2ZDb250b3Vyc1tlbmRQdHNPZkNvbnRvdXJzLmxlbmd0aCAtIDFdICsgMTtcbiAgICAgIHZhciBwb2ludHMgPSBbXTtcblxuICAgICAgd2hpbGUgKHBvaW50cy5sZW5ndGggPCBudW1iZXJPZlBvaW50cykge1xuICAgICAgICBmbGFncyA9IGNvZGVbaSsrXTtcbiAgICAgICAgdmFyIHJlcGVhdCA9IDE7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgMHgwOCkge1xuICAgICAgICAgIHJlcGVhdCArPSBjb2RlW2krK107XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAocmVwZWF0LS0gPiAwKSB7XG4gICAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgZmxhZ3NcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyT2ZQb2ludHM7IGorKykge1xuICAgICAgICBzd2l0Y2ggKHBvaW50c1tqXS5mbGFncyAmIDB4MTIpIHtcbiAgICAgICAgICBjYXNlIDB4MDA6XG4gICAgICAgICAgICB4ICs9IChjb2RlW2ldIDw8IDI0IHwgY29kZVtpICsgMV0gPDwgMTYpID4+IDE2O1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4MDI6XG4gICAgICAgICAgICB4IC09IGNvZGVbaSsrXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweDEyOlxuICAgICAgICAgICAgeCArPSBjb2RlW2krK107XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50c1tqXS54ID0geDtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUG9pbnRzOyBqKyspIHtcbiAgICAgICAgc3dpdGNoIChwb2ludHNbal0uZmxhZ3MgJiAweDI0KSB7XG4gICAgICAgICAgY2FzZSAweDAwOlxuICAgICAgICAgICAgeSArPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweDA0OlxuICAgICAgICAgICAgeSAtPSBjb2RlW2krK107XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHgyNDpcbiAgICAgICAgICAgIHkgKz0gY29kZVtpKytdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHNbal0ueSA9IHk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydFBvaW50ID0gMDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mQ29udG91cnM7IGkrKykge1xuICAgICAgICB2YXIgZW5kUG9pbnQgPSBlbmRQdHNPZkNvbnRvdXJzW2ldO1xuICAgICAgICB2YXIgY29udG91ciA9IHBvaW50cy5zbGljZShzdGFydFBvaW50LCBlbmRQb2ludCArIDEpO1xuXG4gICAgICAgIGlmIChjb250b3VyWzBdLmZsYWdzICYgMSkge1xuICAgICAgICAgIGNvbnRvdXIucHVzaChjb250b3VyWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250b3VyW2NvbnRvdXIubGVuZ3RoIC0gMV0uZmxhZ3MgJiAxKSB7XG4gICAgICAgICAgY29udG91ci51bnNoaWZ0KGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHAgPSB7XG4gICAgICAgICAgICBmbGFnczogMSxcbiAgICAgICAgICAgIHg6IChjb250b3VyWzBdLnggKyBjb250b3VyW2NvbnRvdXIubGVuZ3RoIC0gMV0ueCkgLyAyLFxuICAgICAgICAgICAgeTogKGNvbnRvdXJbMF0ueSArIGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXS55KSAvIDJcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnRvdXIudW5zaGlmdChwKTtcbiAgICAgICAgICBjb250b3VyLnB1c2gocCk7XG4gICAgICAgIH1cblxuICAgICAgICBtb3ZlVG8oY29udG91clswXS54LCBjb250b3VyWzBdLnkpO1xuXG4gICAgICAgIGZvciAoaiA9IDEsIGpqID0gY29udG91ci5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgaWYgKGNvbnRvdXJbal0uZmxhZ3MgJiAxKSB7XG4gICAgICAgICAgICBsaW5lVG8oY29udG91cltqXS54LCBjb250b3VyW2pdLnkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29udG91cltqICsgMV0uZmxhZ3MgJiAxKSB7XG4gICAgICAgICAgICBxdWFkcmF0aWNDdXJ2ZVRvKGNvbnRvdXJbal0ueCwgY29udG91cltqXS55LCBjb250b3VyW2ogKyAxXS54LCBjb250b3VyW2ogKyAxXS55KTtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVhZHJhdGljQ3VydmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSwgKGNvbnRvdXJbal0ueCArIGNvbnRvdXJbaiArIDFdLngpIC8gMiwgKGNvbnRvdXJbal0ueSArIGNvbnRvdXJbaiArIDFdLnkpIC8gMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRQb2ludCA9IGVuZFBvaW50ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb21waWxlQ2hhclN0cmluZyhjaGFyU3RyaW5nQ29kZSwgY21kcywgZm9udCwgZ2x5cGhJZCkge1xuICAgIGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSB7XG4gICAgICBjbWRzLnB1c2goe1xuICAgICAgICBjbWQ6IFwibW92ZVRvXCIsXG4gICAgICAgIGFyZ3M6IFt4LCB5XVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVRvKHgsIHkpIHtcbiAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgIGNtZDogXCJsaW5lVG9cIixcbiAgICAgICAgYXJnczogW3gsIHldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiZXppZXJDdXJ2ZVRvKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7XG4gICAgICBjbWRzLnB1c2goe1xuICAgICAgICBjbWQ6IFwiYmV6aWVyQ3VydmVUb1wiLFxuICAgICAgICBhcmdzOiBbeDEsIHkxLCB4MiwgeTIsIHgsIHldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgeCA9IDAsXG4gICAgICAgIHkgPSAwO1xuICAgIHZhciBzdGVtcyA9IDA7XG5cbiAgICBmdW5jdGlvbiBwYXJzZShjb2RlKSB7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHdoaWxlIChpIDwgY29kZS5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHN0YWNrQ2xlYW4gPSBmYWxzZTtcbiAgICAgICAgdmFyIHYgPSBjb2RlW2krK107XG4gICAgICAgIHZhciB4YSwgeGIsIHlhLCB5YiwgeTEsIHkyLCB5Mywgbiwgc3VickNvZGU7XG5cbiAgICAgICAgc3dpdGNoICh2KSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7XG4gICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7XG4gICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgeSArPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuXG4gICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuXG4gICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIG4gPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN1YnJDb2RlID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGZvbnQuaXNDRkZDSURGb250KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZkSW5kZXggPSBmb250LmZkU2VsZWN0LmdldEZESW5kZXgoZ2x5cGhJZCk7XG5cbiAgICAgICAgICAgICAgaWYgKGZkSW5kZXggPj0gMCAmJiBmZEluZGV4IDwgZm9udC5mZEFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnREaWN0ID0gZm9udC5mZEFycmF5W2ZkSW5kZXhdO1xuICAgICAgICAgICAgICAgIGxldCBzdWJycztcblxuICAgICAgICAgICAgICAgIGlmIChmb250RGljdC5wcml2YXRlRGljdCAmJiBmb250RGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4KSB7XG4gICAgICAgICAgICAgICAgICBzdWJycyA9IGZvbnREaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3VicnMpIHtcbiAgICAgICAgICAgICAgICAgIG4gKz0gZ2V0U3Vicm91dGluZUJpYXMoc3VicnMpO1xuICAgICAgICAgICAgICAgICAgc3VickNvZGUgPSBzdWJyc1tuXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdWJyQ29kZSA9IGZvbnQuc3VicnNbbiArIGZvbnQuc3VicnNCaWFzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN1YnJDb2RlKSB7XG4gICAgICAgICAgICAgIHBhcnNlKHN1YnJDb2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHYgPSBjb2RlW2krK107XG5cbiAgICAgICAgICAgIHN3aXRjaCAodikge1xuICAgICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeTEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHksIHhiLCB5MSwgeCwgeTEpO1xuICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5MSwgeGIsIHksIHgsIHkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5MSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHkyID0geTEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeTEsIHhiLCB5MiwgeCwgeTIpO1xuICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeTMgPSB5MiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5MiwgeGIsIHkzLCB4LCB5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgIHZhciB4MCA9IHgsXG4gICAgICAgICAgICAgICAgICAgIHkwID0geTtcbiAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB4ID0geGI7XG4gICAgICAgICAgICAgICAgeSA9IHliO1xuXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHggLSB4MCkgPiBNYXRoLmFicyh5IC0geTApKSB7XG4gICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogMTIgJHt2fWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID49IDQpIHtcbiAgICAgICAgICAgICAgdmFyIGFjaGFyID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHZhciBiY2hhciA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICB5ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHggPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IFwic2F2ZVwiXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogXCJ0cmFuc2xhdGVcIixcbiAgICAgICAgICAgICAgICBhcmdzOiBbeCwgeV1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHZhciBjbWFwID0gbG9va3VwQ21hcChmb250LmNtYXAsIFN0cmluZy5mcm9tQ2hhckNvZGUoZm9udC5nbHlwaE5hbWVNYXBbX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nW2FjaGFyXV0pKTtcbiAgICAgICAgICAgICAgY29tcGlsZUNoYXJTdHJpbmcoZm9udC5nbHlwaHNbY21hcC5nbHlwaElkXSwgY21kcywgZm9udCwgY21hcC5nbHlwaElkKTtcbiAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IFwicmVzdG9yZVwiXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjbWFwID0gbG9va3VwQ21hcChmb250LmNtYXAsIFN0cmluZy5mcm9tQ2hhckNvZGUoZm9udC5nbHlwaE5hbWVNYXBbX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nW2JjaGFyXV0pKTtcbiAgICAgICAgICAgICAgY29tcGlsZUNoYXJTdHJpbmcoZm9udC5nbHlwaHNbY21hcC5nbHlwaElkXSwgY21kcywgZm9udCwgY21hcC5nbHlwaElkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgIGkgKz0gc3RlbXMgKyA3ID4+IDM7XG4gICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgaSArPSBzdGVtcyArIDcgPj4gMztcbiAgICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgeSArPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHggKz0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBtb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHggKz0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBtb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gNikge1xuICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB4YSA9IHg7XG4gICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiO1xuICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YSA9IHk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeSA9IHliO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgc3RhY2sucHVzaCgoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNik7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICBuID0gc3RhY2sucG9wKCkgKyBmb250LmdzdWJyc0JpYXM7XG4gICAgICAgICAgICBzdWJyQ29kZSA9IGZvbnQuZ3N1YnJzW25dO1xuXG4gICAgICAgICAgICBpZiAoc3VickNvZGUpIHtcbiAgICAgICAgICAgICAgcGFyc2Uoc3VickNvZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB4YSA9IHg7XG4gICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeSA9IHliICsgKHN0YWNrLmxlbmd0aCA9PT0gMSA/IHN0YWNrLnNoaWZ0KCkgOiAwKTtcbiAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWEgPSB5O1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YiArIChzdGFjay5sZW5ndGggPT09IDEgPyBzdGFjay5zaGlmdCgpIDogMCk7XG4gICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YSA9IHk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiICsgKHN0YWNrLmxlbmd0aCA9PT0gMSA/IHN0YWNrLnNoaWZ0KCkgOiAwKTtcbiAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgeGEgPSB4O1xuICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgPSB5YiArIChzdGFjay5sZW5ndGggPT09IDEgPyBzdGFjay5zaGlmdCgpIDogMCk7XG4gICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodiA8IDMyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogJHt2fWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodiA8IDI0Nykge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKHYgLSAxMzkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2IDwgMjUxKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goKHYgLSAyNDcpICogMjU2ICsgY29kZVtpKytdICsgMTA4KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiA8IDI1NSkge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKC0odiAtIDI1MSkgKiAyNTYgLSBjb2RlW2krK10gLSAxMDgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaCgoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2IHwgY29kZVtpICsgMl0gPDwgOCB8IGNvZGVbaSArIDNdKSAvIDY1NTM2KTtcbiAgICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFja0NsZWFuKSB7XG4gICAgICAgICAgc3RhY2subGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlKGNoYXJTdHJpbmdDb2RlKTtcbiAgfVxuXG4gIGNvbnN0IE5PT1AgPSBbXTtcblxuICBjbGFzcyBDb21waWxlZEZvbnQge1xuICAgIGNvbnN0cnVjdG9yKGZvbnRNYXRyaXgpIHtcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBDb21waWxlZEZvbnQpIHtcbiAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIENvbXBpbGVkRm9udC5cIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9udE1hdHJpeCA9IGZvbnRNYXRyaXg7XG4gICAgICB0aGlzLmNvbXBpbGVkR2x5cGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgZ2V0UGF0aEpzKHVuaWNvZGUpIHtcbiAgICAgIGNvbnN0IGNtYXAgPSBsb29rdXBDbWFwKHRoaXMuY21hcCwgdW5pY29kZSk7XG4gICAgICBsZXQgZm4gPSB0aGlzLmNvbXBpbGVkR2x5cGhzW2NtYXAuZ2x5cGhJZF07XG5cbiAgICAgIGlmICghZm4pIHtcbiAgICAgICAgZm4gPSB0aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWFwLmdseXBoSWQpO1xuICAgICAgICB0aGlzLmNvbXBpbGVkR2x5cGhzW2NtYXAuZ2x5cGhJZF0gPSBmbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtjbWFwLmNoYXJDb2RlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtjbWFwLmNoYXJDb2RlXSA9IGNtYXAuZ2x5cGhJZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cblxuICAgIGNvbXBpbGVHbHlwaChjb2RlLCBnbHlwaElkKSB7XG4gICAgICBpZiAoIWNvZGUgfHwgY29kZS5sZW5ndGggPT09IDAgfHwgY29kZVswXSA9PT0gMTQpIHtcbiAgICAgICAgcmV0dXJuIE5PT1A7XG4gICAgICB9XG5cbiAgICAgIGxldCBmb250TWF0cml4ID0gdGhpcy5mb250TWF0cml4O1xuXG4gICAgICBpZiAodGhpcy5pc0NGRkNJREZvbnQpIHtcbiAgICAgICAgY29uc3QgZmRJbmRleCA9IHRoaXMuZmRTZWxlY3QuZ2V0RkRJbmRleChnbHlwaElkKTtcblxuICAgICAgICBpZiAoZmRJbmRleCA+PSAwICYmIGZkSW5kZXggPCB0aGlzLmZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZm9udERpY3QgPSB0aGlzLmZkQXJyYXlbZmRJbmRleF07XG4gICAgICAgICAgZm9udE1hdHJpeCA9IGZvbnREaWN0LmdldEJ5TmFtZShcIkZvbnRNYXRyaXhcIikgfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNtZHMgPSBbXTtcbiAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgIGNtZDogXCJzYXZlXCJcbiAgICAgIH0pO1xuICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgY21kOiBcInRyYW5zZm9ybVwiLFxuICAgICAgICBhcmdzOiBmb250TWF0cml4LnNsaWNlKClcbiAgICAgIH0pO1xuICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgY21kOiBcInNjYWxlXCIsXG4gICAgICAgIGFyZ3M6IFtcInNpemVcIiwgXCItc2l6ZVwiXVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBpbGVHbHlwaEltcGwoY29kZSwgY21kcywgZ2x5cGhJZCk7XG4gICAgICBjbWRzLnB1c2goe1xuICAgICAgICBjbWQ6IFwicmVzdG9yZVwiXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjbWRzO1xuICAgIH1cblxuICAgIGNvbXBpbGVHbHlwaEltcGwoKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2hpbGRyZW4gY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHRoaXMuXCIpO1xuICAgIH1cblxuICAgIGhhc0J1aWx0UGF0aCh1bmljb2RlKSB7XG4gICAgICBjb25zdCBjbWFwID0gbG9va3VwQ21hcCh0aGlzLmNtYXAsIHVuaWNvZGUpO1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbY21hcC5nbHlwaElkXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtjbWFwLmNoYXJDb2RlXSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICB9XG5cbiAgY2xhc3MgVHJ1ZVR5cGVDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udCB7XG4gICAgY29uc3RydWN0b3IoZ2x5cGhzLCBjbWFwLCBmb250TWF0cml4KSB7XG4gICAgICBzdXBlcihmb250TWF0cml4IHx8IFswLjAwMDQ4OCwgMCwgMCwgMC4wMDA0ODgsIDAsIDBdKTtcbiAgICAgIHRoaXMuZ2x5cGhzID0gZ2x5cGhzO1xuICAgICAgdGhpcy5jbWFwID0gY21hcDtcbiAgICB9XG5cbiAgICBjb21waWxlR2x5cGhJbXBsKGNvZGUsIGNtZHMpIHtcbiAgICAgIGNvbXBpbGVHbHlmKGNvZGUsIGNtZHMsIHRoaXMpO1xuICAgIH1cblxuICB9XG5cbiAgY2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udCB7XG4gICAgY29uc3RydWN0b3IoY2ZmSW5mbywgY21hcCwgZm9udE1hdHJpeCwgZ2x5cGhOYW1lTWFwKSB7XG4gICAgICBzdXBlcihmb250TWF0cml4IHx8IFswLjAwMSwgMCwgMCwgMC4wMDEsIDAsIDBdKTtcbiAgICAgIHRoaXMuZ2x5cGhzID0gY2ZmSW5mby5nbHlwaHM7XG4gICAgICB0aGlzLmdzdWJycyA9IGNmZkluZm8uZ3N1YnJzIHx8IFtdO1xuICAgICAgdGhpcy5zdWJycyA9IGNmZkluZm8uc3VicnMgfHwgW107XG4gICAgICB0aGlzLmNtYXAgPSBjbWFwO1xuICAgICAgdGhpcy5nbHlwaE5hbWVNYXAgPSBnbHlwaE5hbWVNYXAgfHwgKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKTtcbiAgICAgIHRoaXMuZ3N1YnJzQmlhcyA9IGdldFN1YnJvdXRpbmVCaWFzKHRoaXMuZ3N1YnJzKTtcbiAgICAgIHRoaXMuc3VicnNCaWFzID0gZ2V0U3Vicm91dGluZUJpYXModGhpcy5zdWJycyk7XG4gICAgICB0aGlzLmlzQ0ZGQ0lERm9udCA9IGNmZkluZm8uaXNDRkZDSURGb250O1xuICAgICAgdGhpcy5mZFNlbGVjdCA9IGNmZkluZm8uZmRTZWxlY3Q7XG4gICAgICB0aGlzLmZkQXJyYXkgPSBjZmZJbmZvLmZkQXJyYXk7XG4gICAgfVxuXG4gICAgY29tcGlsZUdseXBoSW1wbChjb2RlLCBjbWRzLCBnbHlwaElkKSB7XG4gICAgICBjb21waWxlQ2hhclN0cmluZyhjb2RlLCBjbWRzLCB0aGlzLCBnbHlwaElkKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBmdW5jdGlvbiBGb250UmVuZGVyZXJGYWN0b3J5X2NyZWF0ZShmb250LCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGZvbnQuZGF0YSk7XG4gICAgICB2YXIgY21hcCwgZ2x5ZiwgbG9jYSwgY2ZmLCBpbmRleFRvTG9jRm9ybWF0LCB1bml0c1BlckVtO1xuICAgICAgdmFyIG51bVRhYmxlcyA9IGdldFVzaG9ydChkYXRhLCA0KTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSAxMjsgaSA8IG51bVRhYmxlczsgaSsrLCBwICs9IDE2KSB7XG4gICAgICAgIHZhciB0YWcgPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoZGF0YS5zdWJhcnJheShwLCBwICsgNCkpO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gZ2V0TG9uZyhkYXRhLCBwICsgOCk7XG4gICAgICAgIHZhciBsZW5ndGggPSBnZXRMb25nKGRhdGEsIHAgKyAxMik7XG5cbiAgICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgICBjYXNlIFwiY21hcFwiOlxuICAgICAgICAgICAgY21hcCA9IHBhcnNlQ21hcChkYXRhLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJnbHlmXCI6XG4gICAgICAgICAgICBnbHlmID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJsb2NhXCI6XG4gICAgICAgICAgICBsb2NhID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJoZWFkXCI6XG4gICAgICAgICAgICB1bml0c1BlckVtID0gZ2V0VXNob3J0KGRhdGEsIG9mZnNldCArIDE4KTtcbiAgICAgICAgICAgIGluZGV4VG9Mb2NGb3JtYXQgPSBnZXRVc2hvcnQoZGF0YSwgb2Zmc2V0ICsgNTApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiQ0ZGIFwiOlxuICAgICAgICAgICAgY2ZmID0gcGFyc2VDZmYoZGF0YSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgsIHNlYWNBbmFseXNpc0VuYWJsZWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGdseWYpIHtcbiAgICAgICAgdmFyIGZvbnRNYXRyaXggPSAhdW5pdHNQZXJFbSA/IGZvbnQuZm9udE1hdHJpeCA6IFsxIC8gdW5pdHNQZXJFbSwgMCwgMCwgMSAvIHVuaXRzUGVyRW0sIDAsIDBdO1xuICAgICAgICByZXR1cm4gbmV3IFRydWVUeXBlQ29tcGlsZWQocGFyc2VHbHlmVGFibGUoZ2x5ZiwgbG9jYSwgaW5kZXhUb0xvY0Zvcm1hdCksIGNtYXAsIGZvbnRNYXRyaXgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFR5cGUyQ29tcGlsZWQoY2ZmLCBjbWFwLCBmb250LmZvbnRNYXRyaXgsIGZvbnQuZ2x5cGhOYW1lTWFwKTtcbiAgICB9XG4gIH07XG59KCk7XG5cbmV4cG9ydHMuRm9udFJlbmRlcmVyRmFjdG9yeSA9IEZvbnRSZW5kZXJlckZhY3Rvcnk7XG5cbi8qKiovIH0pLFxuLyogMzcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVHlwZTFQYXJzZXIgPSB2b2lkIDA7XG5cbnZhciBfZW5jb2RpbmdzID0gX193X3BkZmpzX3JlcXVpcmVfXygzMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBISU5USU5HX0VOQUJMRUQgPSBmYWxzZTtcblxudmFyIFR5cGUxQ2hhclN0cmluZyA9IGZ1bmN0aW9uIFR5cGUxQ2hhclN0cmluZ0Nsb3N1cmUoKSB7XG4gIHZhciBDT01NQU5EX01BUCA9IHtcbiAgICBoc3RlbTogWzFdLFxuICAgIHZzdGVtOiBbM10sXG4gICAgdm1vdmV0bzogWzRdLFxuICAgIHJsaW5ldG86IFs1XSxcbiAgICBobGluZXRvOiBbNl0sXG4gICAgdmxpbmV0bzogWzddLFxuICAgIHJyY3VydmV0bzogWzhdLFxuICAgIGNhbGxzdWJyOiBbMTBdLFxuICAgIGZsZXg6IFsxMiwgMzVdLFxuICAgIGRyb3A6IFsxMiwgMThdLFxuICAgIGVuZGNoYXI6IFsxNF0sXG4gICAgcm1vdmV0bzogWzIxXSxcbiAgICBobW92ZXRvOiBbMjJdLFxuICAgIHZoY3VydmV0bzogWzMwXSxcbiAgICBodmN1cnZldG86IFszMV1cbiAgfTtcblxuICBmdW5jdGlvbiBUeXBlMUNoYXJTdHJpbmcoKSB7XG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5sc2IgPSAwO1xuICAgIHRoaXMuZmxleGluZyA9IGZhbHNlO1xuICAgIHRoaXMub3V0cHV0ID0gW107XG4gICAgdGhpcy5zdGFjayA9IFtdO1xuICB9XG5cbiAgVHlwZTFDaGFyU3RyaW5nLnByb3RvdHlwZSA9IHtcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBUeXBlMUNoYXJTdHJpbmdfY29udmVydChlbmNvZGVkLCBzdWJycywgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgdmFyIGNvdW50ID0gZW5jb2RlZC5sZW5ndGg7XG4gICAgICB2YXIgZXJyb3IgPSBmYWxzZTtcbiAgICAgIHZhciB3eCwgc2J4LCBzdWJyTnVtYmVyO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZW5jb2RlZFtpXTtcblxuICAgICAgICBpZiAodmFsdWUgPCAzMikge1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IDgpICsgZW5jb2RlZFsrK2ldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgaWYgKCFISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAuaHN0ZW0pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBpZiAoIUhJTlRJTkdfRU5BQkxFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC52c3RlbSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZsZXhpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZHkgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCgwLCBkeSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMSwgQ09NTUFORF9NQVAudm1vdmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC5ybGluZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLmhsaW5ldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMSwgQ09NTUFORF9NQVAudmxpbmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCg2LCBDT01NQU5EX01BUC5ycmN1cnZldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3Vick51bWJlciA9IHRoaXMuc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJyc1tzdWJyTnVtYmVyXSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5jb252ZXJ0KHN1YnJzW3N1YnJOdW1iZXJdLCBzdWJycywgc2VhY0FuYWx5c2lzRW5hYmxlZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7XG5cbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB3eCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHNieCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHRoaXMubHNiID0gc2J4O1xuICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd3g7XG4gICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCh3eCwgc2J4KTtcbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhtb3ZldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgdGhpcy5vdXRwdXQucHVzaChDT01NQU5EX01BUC5lbmRjaGFyWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZsZXhpbmcpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC5ybW92ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZsZXhpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMSwgQ09NTUFORF9NQVAuaG1vdmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoNCwgQ09NTUFORF9NQVAudmhjdXJ2ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCg0LCBDT01NQU5EX01BUC5odmN1cnZldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAwOlxuICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDE6XG4gICAgICAgICAgICAgIGlmICghSElOVElOR19FTkFCTEVEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLnZzdGVtKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMjpcbiAgICAgICAgICAgICAgaWYgKCFISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAuaHN0ZW0pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyA2OlxuICAgICAgICAgICAgICBpZiAoc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhYyA9IHRoaXMuc3RhY2suc3BsaWNlKC00LCA0KTtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMCwgQ09NTUFORF9NQVAuZW5kY2hhcik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDQsIENPTU1BTkRfTUFQLmVuZGNoYXIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgNzpcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHd4ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgdmFyIHNieSA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHNieCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHRoaXMubHNiID0gc2J4O1xuICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd3g7XG4gICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCh3eCwgc2J4LCBzYnkpO1xuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMywgQ09NTUFORF9NQVAucm1vdmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDEyOlxuICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIG51bTIgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICB2YXIgbnVtMSA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChudW0xIC8gbnVtMik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDE2OlxuICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3Vick51bWJlciA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHZhciBudW1BcmdzID0gdGhpcy5zdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICBpZiAoc3Vick51bWJlciA9PT0gMCAmJiBudW1BcmdzID09PSAzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZsZXhBcmdzID0gdGhpcy5zdGFjay5zcGxpY2UodGhpcy5zdGFjay5sZW5ndGggLSAxNywgMTcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChmbGV4QXJnc1syXSArIGZsZXhBcmdzWzBdLCBmbGV4QXJnc1szXSArIGZsZXhBcmdzWzFdLCBmbGV4QXJnc1s0XSwgZmxleEFyZ3NbNV0sIGZsZXhBcmdzWzZdLCBmbGV4QXJnc1s3XSwgZmxleEFyZ3NbOF0sIGZsZXhBcmdzWzldLCBmbGV4QXJnc1sxMF0sIGZsZXhBcmdzWzExXSwgZmxleEFyZ3NbMTJdLCBmbGV4QXJnc1sxM10sIGZsZXhBcmdzWzE0XSk7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEzLCBDT01NQU5EX01BUC5mbGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsZXhpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZmxleEFyZ3NbMTVdLCBmbGV4QXJnc1sxNl0pO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YnJOdW1iZXIgPT09IDEgJiYgbnVtQXJncyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxleGluZyA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxNzpcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMzM6XG4gICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5rbm93biB0eXBlIDEgY2hhcnN0cmluZyBjb21tYW5kIG9mIFwiJyArIHZhbHVlICsgJ1wiJyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMjQ2KSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSAtIDEzOTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8PSAyNTApIHtcbiAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSAtIDI0NykgKiAyNTYgKyBlbmNvZGVkWysraV0gKyAxMDg7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMjU0KSB7XG4gICAgICAgICAgdmFsdWUgPSAtKCh2YWx1ZSAtIDI1MSkgKiAyNTYpIC0gZW5jb2RlZFsrK2ldIC0gMTA4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDI0IHwgKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDE2IHwgKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDggfCAoZW5jb2RlZFsrK2ldICYgMHhmZikgPDwgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuXG4gICAgZXhlY3V0ZUNvbW1hbmQoaG93TWFueUFyZ3MsIGNvbW1hbmQsIGtlZXBTdGFjaykge1xuICAgICAgdmFyIHN0YWNrTGVuZ3RoID0gdGhpcy5zdGFjay5sZW5ndGg7XG5cbiAgICAgIGlmIChob3dNYW55QXJncyA+IHN0YWNrTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnQgPSBzdGFja0xlbmd0aCAtIGhvd01hbnlBcmdzO1xuXG4gICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBzdGFja0xlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuc3RhY2tbaV07XG5cbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5vdXRwdXQucHVzaCgyOCwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSA2NTUzNiAqIHZhbHVlIHwgMDtcbiAgICAgICAgICB0aGlzLm91dHB1dC5wdXNoKDI1NSwgdmFsdWUgPj4gMjQgJiAweGZmLCB2YWx1ZSA+PiAxNiAmIDB4ZmYsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3V0cHV0LnB1c2guYXBwbHkodGhpcy5vdXRwdXQsIGNvbW1hbmQpO1xuXG4gICAgICBpZiAoa2VlcFN0YWNrKSB7XG4gICAgICAgIHRoaXMuc3RhY2suc3BsaWNlKHN0YXJ0LCBob3dNYW55QXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YWNrLmxlbmd0aCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIFR5cGUxQ2hhclN0cmluZztcbn0oKTtcblxudmFyIFR5cGUxUGFyc2VyID0gZnVuY3Rpb24gVHlwZTFQYXJzZXJDbG9zdXJlKCkge1xuICB2YXIgRUVYRUNfRU5DUllQVF9LRVkgPSA1NTY2NTtcbiAgdmFyIENIQVJfU1RSU19FTkNSWVBUX0tFWSA9IDQzMzA7XG5cbiAgZnVuY3Rpb24gaXNIZXhEaWdpdChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgPj0gNDggJiYgY29kZSA8PSA1NyB8fCBjb2RlID49IDY1ICYmIGNvZGUgPD0gNzAgfHwgY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEwMjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY3J5cHQoZGF0YSwga2V5LCBkaXNjYXJkTnVtYmVyKSB7XG4gICAgaWYgKGRpc2NhcmROdW1iZXIgPj0gZGF0YS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICB9XG5cbiAgICB2YXIgciA9IGtleSB8IDAsXG4gICAgICAgIGMxID0gNTI4NDUsXG4gICAgICAgIGMyID0gMjI3MTksXG4gICAgICAgIGksXG4gICAgICAgIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZGlzY2FyZE51bWJlcjsgaSsrKSB7XG4gICAgICByID0gKGRhdGFbaV0gKyByKSAqIGMxICsgYzIgJiAoMSA8PCAxNikgLSAxO1xuICAgIH1cblxuICAgIHZhciBjb3VudCA9IGRhdGEubGVuZ3RoIC0gZGlzY2FyZE51bWJlcjtcbiAgICB2YXIgZGVjcnlwdGVkID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xuXG4gICAgZm9yIChpID0gZGlzY2FyZE51bWJlciwgaiA9IDA7IGogPCBjb3VudDsgaSsrLCBqKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbaV07XG4gICAgICBkZWNyeXB0ZWRbal0gPSB2YWx1ZSBeIHIgPj4gODtcbiAgICAgIHIgPSAodmFsdWUgKyByKSAqIGMxICsgYzIgJiAoMSA8PCAxNikgLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBkZWNyeXB0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNyeXB0QXNjaWkoZGF0YSwga2V5LCBkaXNjYXJkTnVtYmVyKSB7XG4gICAgdmFyIHIgPSBrZXkgfCAwLFxuICAgICAgICBjMSA9IDUyODQ1LFxuICAgICAgICBjMiA9IDIyNzE5O1xuICAgIHZhciBjb3VudCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBtYXliZUxlbmd0aCA9IGNvdW50ID4+PiAxO1xuICAgIHZhciBkZWNyeXB0ZWQgPSBuZXcgVWludDhBcnJheShtYXliZUxlbmd0aCk7XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIHZhciBkaWdpdDEgPSBkYXRhW2ldO1xuXG4gICAgICBpZiAoIWlzSGV4RGlnaXQoZGlnaXQxKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgICAgdmFyIGRpZ2l0MjtcblxuICAgICAgd2hpbGUgKGkgPCBjb3VudCAmJiAhaXNIZXhEaWdpdChkaWdpdDIgPSBkYXRhW2ldKSkge1xuICAgICAgICBpKys7XG4gICAgICB9XG5cbiAgICAgIGlmIChpIDwgY291bnQpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShkaWdpdDEsIGRpZ2l0MiksIDE2KTtcbiAgICAgICAgZGVjcnlwdGVkW2orK10gPSB2YWx1ZSBeIHIgPj4gODtcbiAgICAgICAgciA9ICh2YWx1ZSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY3J5cHRlZC5zbGljZShkaXNjYXJkTnVtYmVyLCBqKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3BlY2lhbChjKSB7XG4gICAgcmV0dXJuIGMgPT09IDB4MmYgfHwgYyA9PT0gMHg1YiB8fCBjID09PSAweDVkIHx8IGMgPT09IDB4N2IgfHwgYyA9PT0gMHg3ZCB8fCBjID09PSAweDI4IHx8IGMgPT09IDB4Mjk7XG4gIH1cblxuICBmdW5jdGlvbiBUeXBlMVBhcnNlcihzdHJlYW0sIGVuY3J5cHRlZCwgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgIGlmIChlbmNyeXB0ZWQpIHtcbiAgICAgIHZhciBkYXRhID0gc3RyZWFtLmdldEJ5dGVzKCk7XG4gICAgICB2YXIgaXNCaW5hcnkgPSAhKChpc0hleERpZ2l0KGRhdGFbMF0pIHx8ICgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGRhdGFbMF0pKSAmJiBpc0hleERpZ2l0KGRhdGFbMV0pICYmIGlzSGV4RGlnaXQoZGF0YVsyXSkgJiYgaXNIZXhEaWdpdChkYXRhWzNdKSAmJiBpc0hleERpZ2l0KGRhdGFbNF0pICYmIGlzSGV4RGlnaXQoZGF0YVs1XSkgJiYgaXNIZXhEaWdpdChkYXRhWzZdKSAmJiBpc0hleERpZ2l0KGRhdGFbN10pKTtcbiAgICAgIHN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmVhbShpc0JpbmFyeSA/IGRlY3J5cHQoZGF0YSwgRUVYRUNfRU5DUllQVF9LRVksIDQpIDogZGVjcnlwdEFzY2lpKGRhdGEsIEVFWEVDX0VOQ1JZUFRfS0VZLCA0KSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkID0gISFzZWFjQW5hbHlzaXNFbmFibGVkO1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMubmV4dENoYXIoKTtcbiAgfVxuXG4gIFR5cGUxUGFyc2VyLnByb3RvdHlwZSA9IHtcbiAgICByZWFkTnVtYmVyQXJyYXk6IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX3JlYWROdW1iZXJBcnJheSgpIHtcbiAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSBcIl1cIiB8fCB0b2tlbiA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5LnB1c2gocGFyc2VGbG9hdCh0b2tlbiB8fCAwKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9LFxuICAgIHJlYWROdW1iZXI6IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX3JlYWROdW1iZXIoKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdCh0b2tlbiB8fCAwKTtcbiAgICB9LFxuICAgIHJlYWRJbnQ6IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX3JlYWRJbnQoKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodG9rZW4gfHwgMCwgMTApIHwgMDtcbiAgICB9LFxuICAgIHJlYWRCb29sZWFuOiBmdW5jdGlvbiBUeXBlMVBhcnNlcl9yZWFkQm9vbGVhbigpIHtcbiAgICAgIHZhciB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgIHJldHVybiB0b2tlbiA9PT0gXCJ0cnVlXCIgPyAxIDogMDtcbiAgICB9LFxuICAgIG5leHRDaGFyOiBmdW5jdGlvbiBUeXBlMV9uZXh0Q2hhcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRDaGFyID0gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgIH0sXG4gICAgZ2V0VG9rZW46IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX2dldFRva2VuKCkge1xuICAgICAgdmFyIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgIHZhciBjaCA9IHRoaXMuY3VycmVudENoYXI7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmIChjaCA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgICAgaWYgKGNoID09PSAweDBhIHx8IGNoID09PSAweDBkKSB7XG4gICAgICAgICAgICBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDI1KSB7XG4gICAgICAgICAgY29tbWVudCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoISgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1NwZWNpYWwoY2gpKSB7XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdG9rZW4gPSBcIlwiO1xuXG4gICAgICBkbyB7XG4gICAgICAgIHRva2VuICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH0gd2hpbGUgKGNoID49IDAgJiYgISgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSAmJiAhaXNTcGVjaWFsKGNoKSk7XG5cbiAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9LFxuICAgIHJlYWRDaGFyU3RyaW5nczogZnVuY3Rpb24gVHlwZTFQYXJzZXJfcmVhZENoYXJTdHJpbmdzKGJ5dGVzLCBsZW5JVikge1xuICAgICAgaWYgKGxlbklWID09PSAtMSkge1xuICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWNyeXB0KGJ5dGVzLCBDSEFSX1NUUlNfRU5DUllQVF9LRVksIGxlbklWKTtcbiAgICB9LFxuICAgIGV4dHJhY3RGb250UHJvZ3JhbTogZnVuY3Rpb24gVHlwZTFQYXJzZXJfZXh0cmFjdEZvbnRQcm9ncmFtKHByb3BlcnRpZXMpIHtcbiAgICAgIHZhciBzdHJlYW0gPSB0aGlzLnN0cmVhbTtcbiAgICAgIHZhciBzdWJycyA9IFtdLFxuICAgICAgICAgIGNoYXJzdHJpbmdzID0gW107XG4gICAgICB2YXIgcHJpdmF0ZURhdGEgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcHJpdmF0ZURhdGEubGVuSVYgPSA0O1xuICAgICAgdmFyIHByb2dyYW0gPSB7XG4gICAgICAgIHN1YnJzOiBbXSxcbiAgICAgICAgY2hhcnN0cmluZ3M6IFtdLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcHJpdmF0ZURhdGFcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciB0b2tlbiwgbGVuZ3RoLCBkYXRhLCBsZW5JViwgZW5jb2RlZDtcblxuICAgICAgd2hpbGUgKCh0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKSkgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHRva2VuICE9PSBcIi9cIikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAgIGNhc2UgXCJDaGFyU3RyaW5nc1wiOlxuICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IG51bGwgfHwgdG9rZW4gPT09IFwiZW5kXCIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBnbHlwaCA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgZGF0YSA9IGxlbmd0aCA+IDAgPyBzdHJlYW0uZ2V0Qnl0ZXMobGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICAgICAgICBsZW5JViA9IHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YS5sZW5JVjtcbiAgICAgICAgICAgICAgZW5jb2RlZCA9IHRoaXMucmVhZENoYXJTdHJpbmdzKGRhdGEsIGxlbklWKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFwibm9hY2Nlc3NcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNoYXJzdHJpbmdzLnB1c2goe1xuICAgICAgICAgICAgICAgIGdseXBoLFxuICAgICAgICAgICAgICAgIGVuY29kZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIlN1YnJzXCI6XG4gICAgICAgICAgICB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuZ2V0VG9rZW4oKSA9PT0gXCJkdXBcIikge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICBkYXRhID0gbGVuZ3RoID4gMCA/IHN0cmVhbS5nZXRCeXRlcyhsZW5ndGgpIDogbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICAgICAgICAgIGxlbklWID0gcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO1xuICAgICAgICAgICAgICBlbmNvZGVkID0gdGhpcy5yZWFkQ2hhclN0cmluZ3MoZGF0YSwgbGVuSVYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gXCJub2FjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3VicnNbaW5kZXhdID0gZW5jb2RlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiQmx1ZVZhbHVlc1wiOlxuICAgICAgICAgIGNhc2UgXCJPdGhlckJsdWVzXCI6XG4gICAgICAgICAgY2FzZSBcIkZhbWlseUJsdWVzXCI6XG4gICAgICAgICAgY2FzZSBcIkZhbWlseU90aGVyQmx1ZXNcIjpcbiAgICAgICAgICAgIHZhciBibHVlQXJyYXkgPSB0aGlzLnJlYWROdW1iZXJBcnJheSgpO1xuXG4gICAgICAgICAgICBpZiAoYmx1ZUFycmF5Lmxlbmd0aCA+IDAgJiYgYmx1ZUFycmF5Lmxlbmd0aCAlIDIgPT09IDAgJiYgSElOVElOR19FTkFCTEVEKSB7XG4gICAgICAgICAgICAgIHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVt0b2tlbl0gPSBibHVlQXJyYXk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIlN0ZW1TbmFwSFwiOlxuICAgICAgICAgIGNhc2UgXCJTdGVtU25hcFZcIjpcbiAgICAgICAgICAgIHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVt0b2tlbl0gPSB0aGlzLnJlYWROdW1iZXJBcnJheSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiU3RkSFdcIjpcbiAgICAgICAgICBjYXNlIFwiU3RkVldcIjpcbiAgICAgICAgICAgIHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVt0b2tlbl0gPSB0aGlzLnJlYWROdW1iZXJBcnJheSgpWzBdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiQmx1ZVNoaWZ0XCI6XG4gICAgICAgICAgY2FzZSBcImxlbklWXCI6XG4gICAgICAgICAgY2FzZSBcIkJsdWVGdXp6XCI6XG4gICAgICAgICAgY2FzZSBcIkJsdWVTY2FsZVwiOlxuICAgICAgICAgIGNhc2UgXCJMYW5ndWFnZUdyb3VwXCI6XG4gICAgICAgICAgY2FzZSBcIkV4cGFuc2lvbkZhY3RvclwiOlxuICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRm9yY2VCb2xkXCI6XG4gICAgICAgICAgICBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbdG9rZW5dID0gdGhpcy5yZWFkQm9vbGVhbigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFyc3RyaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBnbHlwaCA9IGNoYXJzdHJpbmdzW2ldLmdseXBoO1xuICAgICAgICBlbmNvZGVkID0gY2hhcnN0cmluZ3NbaV0uZW5jb2RlZDtcbiAgICAgICAgdmFyIGNoYXJTdHJpbmcgPSBuZXcgVHlwZTFDaGFyU3RyaW5nKCk7XG4gICAgICAgIHZhciBlcnJvciA9IGNoYXJTdHJpbmcuY29udmVydChlbmNvZGVkLCBzdWJycywgdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKTtcbiAgICAgICAgdmFyIG91dHB1dCA9IGNoYXJTdHJpbmcub3V0cHV0O1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIG91dHB1dCA9IFsxNF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFyU3RyaW5nT2JqZWN0ID0ge1xuICAgICAgICAgIGdseXBoTmFtZTogZ2x5cGgsXG4gICAgICAgICAgY2hhcnN0cmluZzogb3V0cHV0LFxuICAgICAgICAgIHdpZHRoOiBjaGFyU3RyaW5nLndpZHRoLFxuICAgICAgICAgIGxzYjogY2hhclN0cmluZy5sc2IsXG4gICAgICAgICAgc2VhYzogY2hhclN0cmluZy5zZWFjXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdseXBoID09PSBcIi5ub3RkZWZcIikge1xuICAgICAgICAgIHByb2dyYW0uY2hhcnN0cmluZ3MudW5zaGlmdChjaGFyU3RyaW5nT2JqZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9ncmFtLmNoYXJzdHJpbmdzLnB1c2goY2hhclN0cmluZ09iamVjdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoZ2x5cGgpO1xuXG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEgJiYgcHJvcGVydGllcy53aWR0aHNbaW5kZXhdID09PSB1bmRlZmluZWQgJiYgaW5kZXggPj0gcHJvcGVydGllcy5maXJzdENoYXIgJiYgaW5kZXggPD0gcHJvcGVydGllcy5sYXN0Q2hhcikge1xuICAgICAgICAgICAgcHJvcGVydGllcy53aWR0aHNbaW5kZXhdID0gY2hhclN0cmluZy53aWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb2dyYW07XG4gICAgfSxcbiAgICBleHRyYWN0Rm9udEhlYWRlcjogZnVuY3Rpb24gVHlwZTFQYXJzZXJfZXh0cmFjdEZvbnRIZWFkZXIocHJvcGVydGllcykge1xuICAgICAgdmFyIHRva2VuO1xuXG4gICAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5nZXRUb2tlbigpKSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAodG9rZW4gIT09IFwiL1wiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgY2FzZSBcIkZvbnRNYXRyaXhcIjpcbiAgICAgICAgICAgIHZhciBtYXRyaXggPSB0aGlzLnJlYWROdW1iZXJBcnJheSgpO1xuICAgICAgICAgICAgcHJvcGVydGllcy5mb250TWF0cml4ID0gbWF0cml4O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRW5jb2RpbmdcIjpcbiAgICAgICAgICAgIHZhciBlbmNvZGluZ0FyZyA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgIHZhciBlbmNvZGluZztcblxuICAgICAgICAgICAgaWYgKCEvXlxcZCskLy50ZXN0KGVuY29kaW5nQXJnKSkge1xuICAgICAgICAgICAgICBlbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShlbmNvZGluZ0FyZyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbmNvZGluZyA9IFtdO1xuICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHBhcnNlSW50KGVuY29kaW5nQXJnLCAxMCkgfCAwO1xuICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPT0gXCJkdXBcIiAmJiB0b2tlbiAhPT0gXCJkZWZcIikge1xuICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBcImRlZlwiKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgdmFyIGdseXBoID0gdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgIGVuY29kaW5nW2luZGV4XSA9IGdseXBoO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRm9udEJCb3hcIjpcbiAgICAgICAgICAgIHZhciBmb250QkJveCA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IE1hdGgubWF4KGZvbnRCQm94WzNdLCBmb250QkJveFsxXSk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBNYXRoLm1pbihmb250QkJveFsxXSwgZm9udEJCb3hbM10pO1xuICAgICAgICAgICAgcHJvcGVydGllcy5hc2NlbnRTY2FsZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiBUeXBlMVBhcnNlcjtcbn0oKTtcblxuZXhwb3J0cy5UeXBlMVBhcnNlciA9IFR5cGUxUGFyc2VyO1xuXG4vKioqLyB9KSxcbi8qIDM4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldFRpbGluZ1BhdHRlcm5JUiA9IGdldFRpbGluZ1BhdHRlcm5JUjtcbmV4cG9ydHMuUGF0dGVybiA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jb2xvcnNwYWNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyMyk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBTaGFkaW5nVHlwZSA9IHtcbiAgRlVOQ1RJT05fQkFTRUQ6IDEsXG4gIEFYSUFMOiAyLFxuICBSQURJQUw6IDMsXG4gIEZSRUVfRk9STV9NRVNIOiA0LFxuICBMQVRUSUNFX0ZPUk1fTUVTSDogNSxcbiAgQ09PTlNfUEFUQ0hfTUVTSDogNixcbiAgVEVOU09SX1BBVENIX01FU0g6IDdcbn07XG5cbnZhciBQYXR0ZXJuID0gZnVuY3Rpb24gUGF0dGVybkNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIFBhdHRlcm4oKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcInNob3VsZCBub3QgY2FsbCBQYXR0ZXJuIGNvbnN0cnVjdG9yXCIpO1xuICB9XG5cbiAgUGF0dGVybi5wcm90b3R5cGUgPSB7XG4gICAgZ2V0UGF0dGVybjogZnVuY3Rpb24gUGF0dGVybl9nZXRQYXR0ZXJuKGN0eCkge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShgU2hvdWxkIG5vdCBjYWxsIFBhdHRlcm4uZ2V0U3R5bGU6ICR7Y3R4fWApO1xuICAgIH1cbiAgfTtcblxuICBQYXR0ZXJuLnBhcnNlU2hhZGluZyA9IGZ1bmN0aW9uIChzaGFkaW5nLCBtYXRyaXgsIHhyZWYsIHJlcywgaGFuZGxlciwgcGRmRnVuY3Rpb25GYWN0b3J5KSB7XG4gICAgdmFyIGRpY3QgPSAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHNoYWRpbmcpID8gc2hhZGluZy5kaWN0IDogc2hhZGluZztcbiAgICB2YXIgdHlwZSA9IGRpY3QuZ2V0KFwiU2hhZGluZ1R5cGVcIik7XG5cbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQVhJQUw6XG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuUkFESUFMOlxuICAgICAgICAgIHJldHVybiBuZXcgU2hhZGluZ3MuUmFkaWFsQXhpYWwoZGljdCwgbWF0cml4LCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5GUkVFX0ZPUk1fTUVTSDpcbiAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5MQVRUSUNFX0ZPUk1fTUVTSDpcbiAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5DT09OU19QQVRDSF9NRVNIOlxuICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLlRFTlNPUl9QQVRDSF9NRVNIOlxuICAgICAgICAgIHJldHVybiBuZXcgU2hhZGluZ3MuTWVzaChzaGFkaW5nLCBtYXRyaXgsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiBcIiArIHR5cGUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5zaGFkaW5nUGF0dGVyblxuICAgICAgfSk7XG4gICAgICAoMCwgX3V0aWwud2FybikoZXgpO1xuICAgICAgcmV0dXJuIG5ldyBTaGFkaW5ncy5EdW1teSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUGF0dGVybjtcbn0oKTtcblxuZXhwb3J0cy5QYXR0ZXJuID0gUGF0dGVybjtcbnZhciBTaGFkaW5ncyA9IHt9O1xuU2hhZGluZ3MuU01BTExfTlVNQkVSID0gMWUtNjtcblxuU2hhZGluZ3MuUmFkaWFsQXhpYWwgPSBmdW5jdGlvbiBSYWRpYWxBeGlhbENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIFJhZGlhbEF4aWFsKGRpY3QsIG1hdHJpeCwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpIHtcbiAgICB0aGlzLm1hdHJpeCA9IG1hdHJpeDtcbiAgICB0aGlzLmNvb3Jkc0FyciA9IGRpY3QuZ2V0QXJyYXkoXCJDb29yZHNcIik7XG4gICAgdGhpcy5zaGFkaW5nVHlwZSA9IGRpY3QuZ2V0KFwiU2hhZGluZ1R5cGVcIik7XG4gICAgdGhpcy50eXBlID0gXCJQYXR0ZXJuXCI7XG4gICAgdmFyIGNzID0gZGljdC5nZXQoXCJDb2xvclNwYWNlXCIsIFwiQ1NcIik7XG4gICAgY3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnBhcnNlKGNzLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgdGhpcy5jcyA9IGNzO1xuICAgIGNvbnN0IGJib3ggPSBkaWN0LmdldEFycmF5KFwiQkJveFwiKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGJib3gpICYmIGJib3gubGVuZ3RoID09PSA0KSB7XG4gICAgICB0aGlzLmJib3ggPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoYmJveCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmJveCA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHQwID0gMC4wLFxuICAgICAgICB0MSA9IDEuMDtcblxuICAgIGlmIChkaWN0LmhhcyhcIkRvbWFpblwiKSkge1xuICAgICAgdmFyIGRvbWFpbkFyciA9IGRpY3QuZ2V0QXJyYXkoXCJEb21haW5cIik7XG4gICAgICB0MCA9IGRvbWFpbkFyclswXTtcbiAgICAgIHQxID0gZG9tYWluQXJyWzFdO1xuICAgIH1cblxuICAgIHZhciBleHRlbmRTdGFydCA9IGZhbHNlLFxuICAgICAgICBleHRlbmRFbmQgPSBmYWxzZTtcblxuICAgIGlmIChkaWN0LmhhcyhcIkV4dGVuZFwiKSkge1xuICAgICAgdmFyIGV4dGVuZEFyciA9IGRpY3QuZ2V0QXJyYXkoXCJFeHRlbmRcIik7XG4gICAgICBleHRlbmRTdGFydCA9IGV4dGVuZEFyclswXTtcbiAgICAgIGV4dGVuZEVuZCA9IGV4dGVuZEFyclsxXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuUkFESUFMICYmICghZXh0ZW5kU3RhcnQgfHwgIWV4dGVuZEVuZCkpIHtcbiAgICAgIHZhciB4MSA9IHRoaXMuY29vcmRzQXJyWzBdO1xuICAgICAgdmFyIHkxID0gdGhpcy5jb29yZHNBcnJbMV07XG4gICAgICB2YXIgcjEgPSB0aGlzLmNvb3Jkc0FyclsyXTtcbiAgICAgIHZhciB4MiA9IHRoaXMuY29vcmRzQXJyWzNdO1xuICAgICAgdmFyIHkyID0gdGhpcy5jb29yZHNBcnJbNF07XG4gICAgICB2YXIgcjIgPSB0aGlzLmNvb3Jkc0Fycls1XTtcbiAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydCgoeDEgLSB4MikgKiAoeDEgLSB4MikgKyAoeTEgLSB5MikgKiAoeTEgLSB5MikpO1xuXG4gICAgICBpZiAocjEgPD0gcjIgKyBkaXN0YW5jZSAmJiByMiA8PSByMSArIGRpc3RhbmNlKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5leHRlbmRTdGFydCA9IGV4dGVuZFN0YXJ0O1xuICAgIHRoaXMuZXh0ZW5kRW5kID0gZXh0ZW5kRW5kO1xuICAgIHZhciBmbk9iaiA9IGRpY3QuZ2V0KFwiRnVuY3Rpb25cIik7XG4gICAgdmFyIGZuID0gcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZUZyb21BcnJheShmbk9iaik7XG4gICAgY29uc3QgTlVNQkVSX09GX1NBTVBMRVMgPSAxMDtcbiAgICBjb25zdCBzdGVwID0gKHQxIC0gdDApIC8gTlVNQkVSX09GX1NBTVBMRVM7XG4gICAgdmFyIGNvbG9yU3RvcHMgPSB0aGlzLmNvbG9yU3RvcHMgPSBbXTtcblxuICAgIGlmICh0MCA+PSB0MSB8fCBzdGVwIDw9IDApIHtcbiAgICAgICgwLCBfdXRpbC5pbmZvKShcIkJhZCBzaGFkaW5nIGRvbWFpbi5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gbmV3IEZsb2F0MzJBcnJheShjcy5udW1Db21wcyksXG4gICAgICAgIHJhdGlvID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcbiAgICB2YXIgcmdiQ29sb3I7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBOVU1CRVJfT0ZfU0FNUExFUzsgaSsrKSB7XG4gICAgICByYXRpb1swXSA9IHQwICsgaSAqIHN0ZXA7XG4gICAgICBmbihyYXRpbywgMCwgY29sb3IsIDApO1xuICAgICAgcmdiQ29sb3IgPSBjcy5nZXRSZ2IoY29sb3IsIDApO1xuXG4gICAgICB2YXIgY3NzQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IocmdiQ29sb3JbMF0sIHJnYkNvbG9yWzFdLCByZ2JDb2xvclsyXSk7XG5cbiAgICAgIGNvbG9yU3RvcHMucHVzaChbaSAvIE5VTUJFUl9PRl9TQU1QTEVTLCBjc3NDb2xvcl0pO1xuICAgIH1cblxuICAgIHZhciBiYWNrZ3JvdW5kID0gXCJ0cmFuc3BhcmVudFwiO1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiQmFja2dyb3VuZFwiKSkge1xuICAgICAgcmdiQ29sb3IgPSBjcy5nZXRSZ2IoZGljdC5nZXQoXCJCYWNrZ3JvdW5kXCIpLCAwKTtcbiAgICAgIGJhY2tncm91bmQgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IocmdiQ29sb3JbMF0sIHJnYkNvbG9yWzFdLCByZ2JDb2xvclsyXSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRlbmRTdGFydCkge1xuICAgICAgY29sb3JTdG9wcy51bnNoaWZ0KFswLCBiYWNrZ3JvdW5kXSk7XG4gICAgICBjb2xvclN0b3BzWzFdWzBdICs9IFNoYWRpbmdzLlNNQUxMX05VTUJFUjtcbiAgICB9XG5cbiAgICBpZiAoIWV4dGVuZEVuZCkge1xuICAgICAgY29sb3JTdG9wc1tjb2xvclN0b3BzLmxlbmd0aCAtIDFdWzBdIC09IFNoYWRpbmdzLlNNQUxMX05VTUJFUjtcbiAgICAgIGNvbG9yU3RvcHMucHVzaChbMSwgYmFja2dyb3VuZF0pO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3JTdG9wcyA9IGNvbG9yU3RvcHM7XG4gIH1cblxuICBSYWRpYWxBeGlhbC5wcm90b3R5cGUgPSB7XG4gICAgZ2V0SVI6IGZ1bmN0aW9uIFJhZGlhbEF4aWFsX2dldElSKCkge1xuICAgICAgdmFyIGNvb3Jkc0FyciA9IHRoaXMuY29vcmRzQXJyO1xuICAgICAgdmFyIHNoYWRpbmdUeXBlID0gdGhpcy5zaGFkaW5nVHlwZTtcbiAgICAgIHZhciB0eXBlLCBwMCwgcDEsIHIwLCByMTtcblxuICAgICAgaWYgKHNoYWRpbmdUeXBlID09PSBTaGFkaW5nVHlwZS5BWElBTCkge1xuICAgICAgICBwMCA9IFtjb29yZHNBcnJbMF0sIGNvb3Jkc0FyclsxXV07XG4gICAgICAgIHAxID0gW2Nvb3Jkc0FyclsyXSwgY29vcmRzQXJyWzNdXTtcbiAgICAgICAgcjAgPSBudWxsO1xuICAgICAgICByMSA9IG51bGw7XG4gICAgICAgIHR5cGUgPSBcImF4aWFsXCI7XG4gICAgICB9IGVsc2UgaWYgKHNoYWRpbmdUeXBlID09PSBTaGFkaW5nVHlwZS5SQURJQUwpIHtcbiAgICAgICAgcDAgPSBbY29vcmRzQXJyWzBdLCBjb29yZHNBcnJbMV1dO1xuICAgICAgICBwMSA9IFtjb29yZHNBcnJbM10sIGNvb3Jkc0Fycls0XV07XG4gICAgICAgIHIwID0gY29vcmRzQXJyWzJdO1xuICAgICAgICByMSA9IGNvb3Jkc0Fycls1XTtcbiAgICAgICAgdHlwZSA9IFwicmFkaWFsXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKGBnZXRQYXR0ZXJuIHR5cGUgdW5rbm93bjogJHtzaGFkaW5nVHlwZX1gKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xuXG4gICAgICBpZiAobWF0cml4KSB7XG4gICAgICAgIHAwID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShwMCwgbWF0cml4KTtcbiAgICAgICAgcDEgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKHAxLCBtYXRyaXgpO1xuXG4gICAgICAgIGlmIChzaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuUkFESUFMKSB7XG4gICAgICAgICAgdmFyIHNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShtYXRyaXgpO1xuXG4gICAgICAgICAgcjAgKj0gc2NhbGVbMF07XG4gICAgICAgICAgcjEgKj0gc2NhbGVbMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtcIlJhZGlhbEF4aWFsXCIsIHR5cGUsIHRoaXMuYmJveCwgdGhpcy5jb2xvclN0b3BzLCBwMCwgcDEsIHIwLCByMV07XG4gICAgfVxuICB9O1xuICByZXR1cm4gUmFkaWFsQXhpYWw7XG59KCk7XG5cblNoYWRpbmdzLk1lc2ggPSBmdW5jdGlvbiBNZXNoQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcihzdHJlYW0sIGNvbnRleHQpIHtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuYnVmZmVyID0gMDtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgdmFyIG51bUNvbXBzID0gY29udGV4dC5udW1Db21wcztcbiAgICB0aGlzLnRtcENvbXBzQnVmID0gbmV3IEZsb2F0MzJBcnJheShudW1Db21wcyk7XG4gICAgdmFyIGNzTnVtQ29tcHMgPSBjb250ZXh0LmNvbG9yU3BhY2UubnVtQ29tcHM7XG4gICAgdGhpcy50bXBDc0NvbXBzQnVmID0gY29udGV4dC5jb2xvckZuID8gbmV3IEZsb2F0MzJBcnJheShjc051bUNvbXBzKSA6IHRoaXMudG1wQ29tcHNCdWY7XG4gIH1cblxuICBNZXNoU3RyZWFtUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICBnZXQgaGFzRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnN0cmVhbS5lbmQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLnBvcyA8IHRoaXMuc3RyZWFtLmVuZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYnVmZmVyTGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5leHRCeXRlID0gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuXG4gICAgICBpZiAobmV4dEJ5dGUgPCAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5idWZmZXIgPSBuZXh0Qnl0ZTtcbiAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gODtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICByZWFkQml0czogZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcl9yZWFkQml0cyhuKSB7XG4gICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICB2YXIgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG5cbiAgICAgIGlmIChuID09PSAzMikge1xuICAgICAgICBpZiAoYnVmZmVyTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuICh0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgMjQgfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgMTYgfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgOCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSkgPj4+IDA7XG4gICAgICAgIH1cblxuICAgICAgICBidWZmZXIgPSBidWZmZXIgPDwgMjQgfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgMTYgfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgOCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgdmFyIG5leHRCeXRlID0gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IG5leHRCeXRlICYgKDEgPDwgYnVmZmVyTGVuZ3RoKSAtIDE7XG4gICAgICAgIHJldHVybiAoYnVmZmVyIDw8IDggLSBidWZmZXJMZW5ndGggfCAobmV4dEJ5dGUgJiAweGZmKSA+PiBidWZmZXJMZW5ndGgpID4+PiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAobiA9PT0gOCAmJiBidWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGJ1ZmZlckxlbmd0aCA8IG4pIHtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyIDw8IDggfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgIGJ1ZmZlckxlbmd0aCArPSA4O1xuICAgICAgfVxuXG4gICAgICBidWZmZXJMZW5ndGggLT0gbjtcbiAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoO1xuICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXIgJiAoMSA8PCBidWZmZXJMZW5ndGgpIC0gMTtcbiAgICAgIHJldHVybiBidWZmZXIgPj4gYnVmZmVyTGVuZ3RoO1xuICAgIH0sXG4gICAgYWxpZ246IGZ1bmN0aW9uIE1lc2hTdHJlYW1SZWFkZXJfYWxpZ24oKSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IDA7XG4gICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgfSxcbiAgICByZWFkRmxhZzogZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcl9yZWFkRmxhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyk7XG4gICAgfSxcbiAgICByZWFkQ29vcmRpbmF0ZTogZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcl9yZWFkQ29vcmRpbmF0ZSgpIHtcbiAgICAgIHZhciBiaXRzUGVyQ29vcmRpbmF0ZSA9IHRoaXMuY29udGV4dC5iaXRzUGVyQ29vcmRpbmF0ZTtcbiAgICAgIHZhciB4aSA9IHRoaXMucmVhZEJpdHMoYml0c1BlckNvb3JkaW5hdGUpO1xuICAgICAgdmFyIHlpID0gdGhpcy5yZWFkQml0cyhiaXRzUGVyQ29vcmRpbmF0ZSk7XG4gICAgICB2YXIgZGVjb2RlID0gdGhpcy5jb250ZXh0LmRlY29kZTtcbiAgICAgIHZhciBzY2FsZSA9IGJpdHNQZXJDb29yZGluYXRlIDwgMzIgPyAxIC8gKCgxIDw8IGJpdHNQZXJDb29yZGluYXRlKSAtIDEpIDogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDtcbiAgICAgIHJldHVybiBbeGkgKiBzY2FsZSAqIChkZWNvZGVbMV0gLSBkZWNvZGVbMF0pICsgZGVjb2RlWzBdLCB5aSAqIHNjYWxlICogKGRlY29kZVszXSAtIGRlY29kZVsyXSkgKyBkZWNvZGVbMl1dO1xuICAgIH0sXG4gICAgcmVhZENvbXBvbmVudHM6IGZ1bmN0aW9uIE1lc2hTdHJlYW1SZWFkZXJfcmVhZENvbXBvbmVudHMoKSB7XG4gICAgICB2YXIgbnVtQ29tcHMgPSB0aGlzLmNvbnRleHQubnVtQ29tcHM7XG4gICAgICB2YXIgYml0c1BlckNvbXBvbmVudCA9IHRoaXMuY29udGV4dC5iaXRzUGVyQ29tcG9uZW50O1xuICAgICAgdmFyIHNjYWxlID0gYml0c1BlckNvbXBvbmVudCA8IDMyID8gMSAvICgoMSA8PCBiaXRzUGVyQ29tcG9uZW50KSAtIDEpIDogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDtcbiAgICAgIHZhciBkZWNvZGUgPSB0aGlzLmNvbnRleHQuZGVjb2RlO1xuICAgICAgdmFyIGNvbXBvbmVudHMgPSB0aGlzLnRtcENvbXBzQnVmO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaiA9IDQ7IGkgPCBudW1Db21wczsgaSsrLCBqICs9IDIpIHtcbiAgICAgICAgdmFyIGNpID0gdGhpcy5yZWFkQml0cyhiaXRzUGVyQ29tcG9uZW50KTtcbiAgICAgICAgY29tcG9uZW50c1tpXSA9IGNpICogc2NhbGUgKiAoZGVjb2RlW2ogKyAxXSAtIGRlY29kZVtqXSkgKyBkZWNvZGVbal07XG4gICAgICB9XG5cbiAgICAgIHZhciBjb2xvciA9IHRoaXMudG1wQ3NDb21wc0J1ZjtcblxuICAgICAgaWYgKHRoaXMuY29udGV4dC5jb2xvckZuKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jb2xvckZuKGNvbXBvbmVudHMsIDAsIGNvbG9yLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihjb2xvciwgMCk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGRlY29kZVR5cGU0U2hhZGluZyhtZXNoLCByZWFkZXIpIHtcbiAgICB2YXIgY29vcmRzID0gbWVzaC5jb29yZHM7XG4gICAgdmFyIGNvbG9ycyA9IG1lc2guY29sb3JzO1xuICAgIHZhciBvcGVyYXRvcnMgPSBbXTtcbiAgICB2YXIgcHMgPSBbXTtcbiAgICB2YXIgdmVydGljZXNMZWZ0ID0gMDtcblxuICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgdmFyIGYgPSByZWFkZXIucmVhZEZsYWcoKTtcbiAgICAgIHZhciBjb29yZCA9IHJlYWRlci5yZWFkQ29vcmRpbmF0ZSgpO1xuICAgICAgdmFyIGNvbG9yID0gcmVhZGVyLnJlYWRDb21wb25lbnRzKCk7XG5cbiAgICAgIGlmICh2ZXJ0aWNlc0xlZnQgPT09IDApIHtcbiAgICAgICAgaWYgKCEoMCA8PSBmICYmIGYgPD0gMikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIHR5cGU0IGZsYWdcIik7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGYpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB2ZXJ0aWNlc0xlZnQgPSAzO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBwcy5wdXNoKHBzW3BzLmxlbmd0aCAtIDJdLCBwc1twcy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICB2ZXJ0aWNlc0xlZnQgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBwcy5wdXNoKHBzW3BzLmxlbmd0aCAtIDNdLCBwc1twcy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICB2ZXJ0aWNlc0xlZnQgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBvcGVyYXRvcnMucHVzaChmKTtcbiAgICAgIH1cblxuICAgICAgcHMucHVzaChjb29yZHMubGVuZ3RoKTtcbiAgICAgIGNvb3Jkcy5wdXNoKGNvb3JkKTtcbiAgICAgIGNvbG9ycy5wdXNoKGNvbG9yKTtcbiAgICAgIHZlcnRpY2VzTGVmdC0tO1xuICAgICAgcmVhZGVyLmFsaWduKCk7XG4gICAgfVxuXG4gICAgbWVzaC5maWd1cmVzLnB1c2goe1xuICAgICAgdHlwZTogXCJ0cmlhbmdsZXNcIixcbiAgICAgIGNvb3JkczogbmV3IEludDMyQXJyYXkocHMpLFxuICAgICAgY29sb3JzOiBuZXcgSW50MzJBcnJheShwcylcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZVR5cGU1U2hhZGluZyhtZXNoLCByZWFkZXIsIHZlcnRpY2VzUGVyUm93KSB7XG4gICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzO1xuICAgIHZhciBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICB2YXIgcHMgPSBbXTtcblxuICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgdmFyIGNvb3JkID0gcmVhZGVyLnJlYWRDb29yZGluYXRlKCk7XG4gICAgICB2YXIgY29sb3IgPSByZWFkZXIucmVhZENvbXBvbmVudHMoKTtcbiAgICAgIHBzLnB1c2goY29vcmRzLmxlbmd0aCk7XG4gICAgICBjb29yZHMucHVzaChjb29yZCk7XG4gICAgICBjb2xvcnMucHVzaChjb2xvcik7XG4gICAgfVxuXG4gICAgbWVzaC5maWd1cmVzLnB1c2goe1xuICAgICAgdHlwZTogXCJsYXR0aWNlXCIsXG4gICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkocHMpLFxuICAgICAgdmVydGljZXNQZXJSb3dcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCA9IDM7XG4gIHZhciBNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCA9IDIwO1xuICB2YXIgVFJJQU5HTEVfREVOU0lUWSA9IDIwO1xuXG4gIHZhciBnZXRCID0gZnVuY3Rpb24gZ2V0QkNsb3N1cmUoKSB7XG4gICAgZnVuY3Rpb24gYnVpbGRCKGNvdW50KSB7XG4gICAgICB2YXIgbHV0ID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGNvdW50OyBpKyspIHtcbiAgICAgICAgdmFyIHQgPSBpIC8gY291bnQsXG4gICAgICAgICAgICB0XyA9IDEgLSB0O1xuICAgICAgICBsdXQucHVzaChuZXcgRmxvYXQzMkFycmF5KFt0XyAqIHRfICogdF8sIDMgKiB0ICogdF8gKiB0XywgMyAqIHQgKiB0ICogdF8sIHQgKiB0ICogdF0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGx1dDtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGUgPSBbXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZ2V0Qihjb3VudCkge1xuICAgICAgaWYgKCFjYWNoZVtjb3VudF0pIHtcbiAgICAgICAgY2FjaGVbY291bnRdID0gYnVpbGRCKGNvdW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNhY2hlW2NvdW50XTtcbiAgICB9O1xuICB9KCk7XG5cbiAgZnVuY3Rpb24gYnVpbGRGaWd1cmVGcm9tUGF0Y2gobWVzaCwgaW5kZXgpIHtcbiAgICB2YXIgZmlndXJlID0gbWVzaC5maWd1cmVzW2luZGV4XTtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KShmaWd1cmUudHlwZSA9PT0gXCJwYXRjaFwiLCBcIlVuZXhwZWN0ZWQgcGF0Y2ggbWVzaCBmaWd1cmVcIik7XG4gICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzLFxuICAgICAgICBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICB2YXIgcGkgPSBmaWd1cmUuY29vcmRzO1xuICAgIHZhciBjaSA9IGZpZ3VyZS5jb2xvcnM7XG4gICAgdmFyIGZpZ3VyZU1pblggPSBNYXRoLm1pbihjb29yZHNbcGlbMF1dWzBdLCBjb29yZHNbcGlbM11dWzBdLCBjb29yZHNbcGlbMTJdXVswXSwgY29vcmRzW3BpWzE1XV1bMF0pO1xuICAgIHZhciBmaWd1cmVNaW5ZID0gTWF0aC5taW4oY29vcmRzW3BpWzBdXVsxXSwgY29vcmRzW3BpWzNdXVsxXSwgY29vcmRzW3BpWzEyXV1bMV0sIGNvb3Jkc1twaVsxNV1dWzFdKTtcbiAgICB2YXIgZmlndXJlTWF4WCA9IE1hdGgubWF4KGNvb3Jkc1twaVswXV1bMF0sIGNvb3Jkc1twaVszXV1bMF0sIGNvb3Jkc1twaVsxMl1dWzBdLCBjb29yZHNbcGlbMTVdXVswXSk7XG4gICAgdmFyIGZpZ3VyZU1heFkgPSBNYXRoLm1heChjb29yZHNbcGlbMF1dWzFdLCBjb29yZHNbcGlbM11dWzFdLCBjb29yZHNbcGlbMTJdXVsxXSwgY29vcmRzW3BpWzE1XV1bMV0pO1xuICAgIHZhciBzcGxpdFhCeSA9IE1hdGguY2VpbCgoZmlndXJlTWF4WCAtIGZpZ3VyZU1pblgpICogVFJJQU5HTEVfREVOU0lUWSAvIChtZXNoLmJvdW5kc1syXSAtIG1lc2guYm91bmRzWzBdKSk7XG4gICAgc3BsaXRYQnkgPSBNYXRoLm1heChNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCwgTWF0aC5taW4oTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIHNwbGl0WEJ5KSk7XG4gICAgdmFyIHNwbGl0WUJ5ID0gTWF0aC5jZWlsKChmaWd1cmVNYXhZIC0gZmlndXJlTWluWSkgKiBUUklBTkdMRV9ERU5TSVRZIC8gKG1lc2guYm91bmRzWzNdIC0gbWVzaC5ib3VuZHNbMV0pKTtcbiAgICBzcGxpdFlCeSA9IE1hdGgubWF4KE1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULCBNYXRoLm1pbihNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCwgc3BsaXRZQnkpKTtcbiAgICB2YXIgdmVydGljZXNQZXJSb3cgPSBzcGxpdFhCeSArIDE7XG4gICAgdmFyIGZpZ3VyZUNvb3JkcyA9IG5ldyBJbnQzMkFycmF5KChzcGxpdFlCeSArIDEpICogdmVydGljZXNQZXJSb3cpO1xuICAgIHZhciBmaWd1cmVDb2xvcnMgPSBuZXcgSW50MzJBcnJheSgoc3BsaXRZQnkgKyAxKSAqIHZlcnRpY2VzUGVyUm93KTtcbiAgICB2YXIgayA9IDA7XG4gICAgdmFyIGNsID0gbmV3IFVpbnQ4QXJyYXkoMyksXG4gICAgICAgIGNyID0gbmV3IFVpbnQ4QXJyYXkoMyk7XG4gICAgdmFyIGMwID0gY29sb3JzW2NpWzBdXSxcbiAgICAgICAgYzEgPSBjb2xvcnNbY2lbMV1dLFxuICAgICAgICBjMiA9IGNvbG9yc1tjaVsyXV0sXG4gICAgICAgIGMzID0gY29sb3JzW2NpWzNdXTtcbiAgICB2YXIgYlJvdyA9IGdldEIoc3BsaXRZQnkpLFxuICAgICAgICBiQ29sID0gZ2V0QihzcGxpdFhCeSk7XG5cbiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPD0gc3BsaXRZQnk7IHJvdysrKSB7XG4gICAgICBjbFswXSA9IChjMFswXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjMlswXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7XG4gICAgICBjbFsxXSA9IChjMFsxXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjMlsxXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7XG4gICAgICBjbFsyXSA9IChjMFsyXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjMlsyXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7XG4gICAgICBjclswXSA9IChjMVswXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjM1swXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7XG4gICAgICBjclsxXSA9IChjMVsxXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjM1sxXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7XG4gICAgICBjclsyXSA9IChjMVsyXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjM1syXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7XG5cbiAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8PSBzcGxpdFhCeTsgY29sKyssIGsrKykge1xuICAgICAgICBpZiAoKHJvdyA9PT0gMCB8fCByb3cgPT09IHNwbGl0WUJ5KSAmJiAoY29sID09PSAwIHx8IGNvbCA9PT0gc3BsaXRYQnkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeCA9IDAsXG4gICAgICAgICAgICB5ID0gMDtcbiAgICAgICAgdmFyIHEgPSAwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDM7IGkrKykge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDM7IGorKywgcSsrKSB7XG4gICAgICAgICAgICB2YXIgbSA9IGJSb3dbcm93XVtpXSAqIGJDb2xbY29sXVtqXTtcbiAgICAgICAgICAgIHggKz0gY29vcmRzW3BpW3FdXVswXSAqIG07XG4gICAgICAgICAgICB5ICs9IGNvb3Jkc1twaVtxXV1bMV0gKiBtO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpZ3VyZUNvb3Jkc1trXSA9IGNvb3Jkcy5sZW5ndGg7XG4gICAgICAgIGNvb3Jkcy5wdXNoKFt4LCB5XSk7XG4gICAgICAgIGZpZ3VyZUNvbG9yc1trXSA9IGNvbG9ycy5sZW5ndGg7XG4gICAgICAgIHZhciBuZXdDb2xvciA9IG5ldyBVaW50OEFycmF5KDMpO1xuICAgICAgICBuZXdDb2xvclswXSA9IChjbFswXSAqIChzcGxpdFhCeSAtIGNvbCkgKyBjclswXSAqIGNvbCkgLyBzcGxpdFhCeSB8IDA7XG4gICAgICAgIG5ld0NvbG9yWzFdID0gKGNsWzFdICogKHNwbGl0WEJ5IC0gY29sKSArIGNyWzFdICogY29sKSAvIHNwbGl0WEJ5IHwgMDtcbiAgICAgICAgbmV3Q29sb3JbMl0gPSAoY2xbMl0gKiAoc3BsaXRYQnkgLSBjb2wpICsgY3JbMl0gKiBjb2wpIC8gc3BsaXRYQnkgfCAwO1xuICAgICAgICBjb2xvcnMucHVzaChuZXdDb2xvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmlndXJlQ29vcmRzWzBdID0gcGlbMF07XG4gICAgZmlndXJlQ29sb3JzWzBdID0gY2lbMF07XG4gICAgZmlndXJlQ29vcmRzW3NwbGl0WEJ5XSA9IHBpWzNdO1xuICAgIGZpZ3VyZUNvbG9yc1tzcGxpdFhCeV0gPSBjaVsxXTtcbiAgICBmaWd1cmVDb29yZHNbdmVydGljZXNQZXJSb3cgKiBzcGxpdFlCeV0gPSBwaVsxMl07XG4gICAgZmlndXJlQ29sb3JzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnldID0gY2lbMl07XG4gICAgZmlndXJlQ29vcmRzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnkgKyBzcGxpdFhCeV0gPSBwaVsxNV07XG4gICAgZmlndXJlQ29sb3JzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnkgKyBzcGxpdFhCeV0gPSBjaVszXTtcbiAgICBtZXNoLmZpZ3VyZXNbaW5kZXhdID0ge1xuICAgICAgdHlwZTogXCJsYXR0aWNlXCIsXG4gICAgICBjb29yZHM6IGZpZ3VyZUNvb3JkcyxcbiAgICAgIGNvbG9yczogZmlndXJlQ29sb3JzLFxuICAgICAgdmVydGljZXNQZXJSb3dcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlVHlwZTZTaGFkaW5nKG1lc2gsIHJlYWRlcikge1xuICAgIHZhciBjb29yZHMgPSBtZXNoLmNvb3JkcztcbiAgICB2YXIgY29sb3JzID0gbWVzaC5jb2xvcnM7XG4gICAgdmFyIHBzID0gbmV3IEludDMyQXJyYXkoMTYpO1xuICAgIHZhciBjcyA9IG5ldyBJbnQzMkFycmF5KDQpO1xuXG4gICAgd2hpbGUgKHJlYWRlci5oYXNEYXRhKSB7XG4gICAgICB2YXIgZiA9IHJlYWRlci5yZWFkRmxhZygpO1xuXG4gICAgICBpZiAoISgwIDw9IGYgJiYgZiA8PSAzKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIHR5cGU2IGZsYWdcIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBpLCBpaTtcbiAgICAgIHZhciBwaSA9IGNvb3Jkcy5sZW5ndGg7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gZiAhPT0gMCA/IDggOiAxMjsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29vcmRzLnB1c2gocmVhZGVyLnJlYWRDb29yZGluYXRlKCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2kgPSBjb2xvcnMubGVuZ3RoO1xuXG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IGYgIT09IDAgPyAyIDogNDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29sb3JzLnB1c2gocmVhZGVyLnJlYWRDb21wb25lbnRzKCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDtcblxuICAgICAgc3dpdGNoIChmKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBwc1sxMl0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgNTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbOF0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbMTFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzRdID0gcGkgKyAxO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA4O1xuICAgICAgICAgIHBzWzBdID0gcGk7XG4gICAgICAgICAgcHNbMV0gPSBwaSArIDExO1xuICAgICAgICAgIHBzWzJdID0gcGkgKyAxMDtcbiAgICAgICAgICBwc1szXSA9IHBpICsgOTtcbiAgICAgICAgICBjc1syXSA9IGNpICsgMTtcbiAgICAgICAgICBjc1szXSA9IGNpICsgMjtcbiAgICAgICAgICBjc1swXSA9IGNpO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAzO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0bXAxID0gcHNbMTJdO1xuICAgICAgICAgIHRtcDIgPSBwc1sxM107XG4gICAgICAgICAgdG1wMyA9IHBzWzE0XTtcbiAgICAgICAgICB0bXA0ID0gcHNbMTVdO1xuICAgICAgICAgIHBzWzEyXSA9IHRtcDQ7XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbOF0gPSB0bXAzO1xuICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICBwc1s0XSA9IHRtcDI7XG4gICAgICAgICAgcHNbN10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMF0gPSB0bXAxO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgIHBzWzNdID0gcGkgKyA1O1xuICAgICAgICAgIHRtcDEgPSBjc1syXTtcbiAgICAgICAgICB0bXAyID0gY3NbM107XG4gICAgICAgICAgY3NbMl0gPSB0bXAyO1xuICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgY3NbMF0gPSB0bXAxO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0bXAxID0gcHNbMTVdO1xuICAgICAgICAgIHRtcDIgPSBwc1sxMV07XG4gICAgICAgICAgcHNbMTJdID0gcHNbM107XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbOF0gPSBwc1s3XTtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzBdID0gdG1wMTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICB0bXAxID0gY3NbM107XG4gICAgICAgICAgY3NbMl0gPSBjc1sxXTtcbiAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgIGNzWzBdID0gdG1wMTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcHNbMTJdID0gcHNbMF07XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbOF0gPSBwc1sxXTtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSBwc1syXTtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICBwc1swXSA9IHBzWzNdO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgIHBzWzNdID0gcGkgKyA1O1xuICAgICAgICAgIGNzWzJdID0gY3NbMF07XG4gICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICBjc1swXSA9IGNzWzFdO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwc1s1XSA9IGNvb3Jkcy5sZW5ndGg7XG4gICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzBdXVswXSAtIGNvb3Jkc1twc1sxNV1dWzBdICsgNiAqIChjb29yZHNbcHNbNF1dWzBdICsgY29vcmRzW3BzWzFdXVswXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzBdICsgY29vcmRzW3BzWzNdXVswXSkgKyAzICogKGNvb3Jkc1twc1sxM11dWzBdICsgY29vcmRzW3BzWzddXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzBdXVsxXSAtIGNvb3Jkc1twc1sxNV1dWzFdICsgNiAqIChjb29yZHNbcHNbNF1dWzFdICsgY29vcmRzW3BzWzFdXVsxXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzFdICsgY29vcmRzW3BzWzNdXVsxXSkgKyAzICogKGNvb3Jkc1twc1sxM11dWzFdICsgY29vcmRzW3BzWzddXVsxXSkpIC8gOV0pO1xuICAgICAgcHNbNl0gPSBjb29yZHMubGVuZ3RoO1xuICAgICAgY29vcmRzLnB1c2goWygtNCAqIGNvb3Jkc1twc1szXV1bMF0gLSBjb29yZHNbcHNbMTJdXVswXSArIDYgKiAoY29vcmRzW3BzWzJdXVswXSArIGNvb3Jkc1twc1s3XV1bMF0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzBdICsgY29vcmRzW3BzWzE1XV1bMF0pICsgMyAqIChjb29yZHNbcHNbNF1dWzBdICsgY29vcmRzW3BzWzE0XV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1szXV1bMV0gLSBjb29yZHNbcHNbMTJdXVsxXSArIDYgKiAoY29vcmRzW3BzWzJdXVsxXSArIGNvb3Jkc1twc1s3XV1bMV0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzFdICsgY29vcmRzW3BzWzE1XV1bMV0pICsgMyAqIChjb29yZHNbcHNbNF1dWzFdICsgY29vcmRzW3BzWzE0XV1bMV0pKSAvIDldKTtcbiAgICAgIHBzWzldID0gY29vcmRzLmxlbmd0aDtcbiAgICAgIGNvb3Jkcy5wdXNoKFsoLTQgKiBjb29yZHNbcHNbMTJdXVswXSAtIGNvb3Jkc1twc1szXV1bMF0gKyA2ICogKGNvb3Jkc1twc1s4XV1bMF0gKyBjb29yZHNbcHNbMTNdXVswXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMF0gKyBjb29yZHNbcHNbMTVdXVswXSkgKyAzICogKGNvb3Jkc1twc1sxMV1dWzBdICsgY29vcmRzW3BzWzFdXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzEyXV1bMV0gLSBjb29yZHNbcHNbM11dWzFdICsgNiAqIChjb29yZHNbcHNbOF1dWzFdICsgY29vcmRzW3BzWzEzXV1bMV0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzFdICsgY29vcmRzW3BzWzE1XV1bMV0pICsgMyAqIChjb29yZHNbcHNbMTFdXVsxXSArIGNvb3Jkc1twc1sxXV1bMV0pKSAvIDldKTtcbiAgICAgIHBzWzEwXSA9IGNvb3Jkcy5sZW5ndGg7XG4gICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzE1XV1bMF0gLSBjb29yZHNbcHNbMF1dWzBdICsgNiAqIChjb29yZHNbcHNbMTFdXVswXSArIGNvb3Jkc1twc1sxNF1dWzBdKSAtIDIgKiAoY29vcmRzW3BzWzEyXV1bMF0gKyBjb29yZHNbcHNbM11dWzBdKSArIDMgKiAoY29vcmRzW3BzWzJdXVswXSArIGNvb3Jkc1twc1s4XV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1sxNV1dWzFdIC0gY29vcmRzW3BzWzBdXVsxXSArIDYgKiAoY29vcmRzW3BzWzExXV1bMV0gKyBjb29yZHNbcHNbMTRdXVsxXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzFdICsgY29vcmRzW3BzWzNdXVsxXSkgKyAzICogKGNvb3Jkc1twc1syXV1bMV0gKyBjb29yZHNbcHNbOF1dWzFdKSkgLyA5XSk7XG4gICAgICBtZXNoLmZpZ3VyZXMucHVzaCh7XG4gICAgICAgIHR5cGU6IFwicGF0Y2hcIixcbiAgICAgICAgY29vcmRzOiBuZXcgSW50MzJBcnJheShwcyksXG4gICAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkoY3MpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVUeXBlN1NoYWRpbmcobWVzaCwgcmVhZGVyKSB7XG4gICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzO1xuICAgIHZhciBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICB2YXIgcHMgPSBuZXcgSW50MzJBcnJheSgxNik7XG4gICAgdmFyIGNzID0gbmV3IEludDMyQXJyYXkoNCk7XG5cbiAgICB3aGlsZSAocmVhZGVyLmhhc0RhdGEpIHtcbiAgICAgIHZhciBmID0gcmVhZGVyLnJlYWRGbGFnKCk7XG5cbiAgICAgIGlmICghKDAgPD0gZiAmJiBmIDw9IDMpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gdHlwZTcgZmxhZ1wiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGksIGlpO1xuICAgICAgdmFyIHBpID0gY29vcmRzLmxlbmd0aDtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBmICE9PSAwID8gMTIgOiAxNjsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29vcmRzLnB1c2gocmVhZGVyLnJlYWRDb29yZGluYXRlKCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2kgPSBjb2xvcnMubGVuZ3RoO1xuXG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IGYgIT09IDAgPyAyIDogNDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29sb3JzLnB1c2gocmVhZGVyLnJlYWRDb21wb25lbnRzKCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDtcblxuICAgICAgc3dpdGNoIChmKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBwc1sxMl0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgNTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbOF0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbOV0gPSBwaSArIDEzO1xuICAgICAgICAgIHBzWzEwXSA9IHBpICsgMTQ7XG4gICAgICAgICAgcHNbMTFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzRdID0gcGkgKyAxO1xuICAgICAgICAgIHBzWzVdID0gcGkgKyAxMjtcbiAgICAgICAgICBwc1s2XSA9IHBpICsgMTU7XG4gICAgICAgICAgcHNbN10gPSBwaSArIDg7XG4gICAgICAgICAgcHNbMF0gPSBwaTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgMTE7XG4gICAgICAgICAgcHNbMl0gPSBwaSArIDEwO1xuICAgICAgICAgIHBzWzNdID0gcGkgKyA5O1xuICAgICAgICAgIGNzWzJdID0gY2kgKyAxO1xuICAgICAgICAgIGNzWzNdID0gY2kgKyAyO1xuICAgICAgICAgIGNzWzBdID0gY2k7XG4gICAgICAgICAgY3NbMV0gPSBjaSArIDM7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHRtcDEgPSBwc1sxMl07XG4gICAgICAgICAgdG1wMiA9IHBzWzEzXTtcbiAgICAgICAgICB0bXAzID0gcHNbMTRdO1xuICAgICAgICAgIHRtcDQgPSBwc1sxNV07XG4gICAgICAgICAgcHNbMTJdID0gdG1wNDtcbiAgICAgICAgICBwc1sxM10gPSBwaSArIDA7XG4gICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgIHBzWzE1XSA9IHBpICsgMjtcbiAgICAgICAgICBwc1s4XSA9IHRtcDM7XG4gICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgcHNbMTBdID0gcGkgKyAxMDtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgIHBzWzVdID0gcGkgKyA4O1xuICAgICAgICAgIHBzWzZdID0gcGkgKyAxMTtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICBwc1swXSA9IHRtcDE7XG4gICAgICAgICAgcHNbMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgdG1wMSA9IGNzWzJdO1xuICAgICAgICAgIHRtcDIgPSBjc1szXTtcbiAgICAgICAgICBjc1syXSA9IHRtcDI7XG4gICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICBjc1swXSA9IHRtcDE7XG4gICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRtcDEgPSBwc1sxNV07XG4gICAgICAgICAgdG1wMiA9IHBzWzExXTtcbiAgICAgICAgICBwc1sxMl0gPSBwc1szXTtcbiAgICAgICAgICBwc1sxM10gPSBwaSArIDA7XG4gICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgIHBzWzE1XSA9IHBpICsgMjtcbiAgICAgICAgICBwc1s4XSA9IHBzWzddO1xuICAgICAgICAgIHBzWzldID0gcGkgKyA5O1xuICAgICAgICAgIHBzWzEwXSA9IHBpICsgMTA7XG4gICAgICAgICAgcHNbMTFdID0gcGkgKyAzO1xuICAgICAgICAgIHBzWzRdID0gdG1wMjtcbiAgICAgICAgICBwc1s1XSA9IHBpICsgODtcbiAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7XG4gICAgICAgICAgcHNbN10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMF0gPSB0bXAxO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgIHBzWzNdID0gcGkgKyA1O1xuICAgICAgICAgIHRtcDEgPSBjc1szXTtcbiAgICAgICAgICBjc1syXSA9IGNzWzFdO1xuICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgY3NbMF0gPSB0bXAxO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBwc1sxMl0gPSBwc1swXTtcbiAgICAgICAgICBwc1sxM10gPSBwaSArIDA7XG4gICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgIHBzWzE1XSA9IHBpICsgMjtcbiAgICAgICAgICBwc1s4XSA9IHBzWzFdO1xuICAgICAgICAgIHBzWzldID0gcGkgKyA5O1xuICAgICAgICAgIHBzWzEwXSA9IHBpICsgMTA7XG4gICAgICAgICAgcHNbMTFdID0gcGkgKyAzO1xuICAgICAgICAgIHBzWzRdID0gcHNbMl07XG4gICAgICAgICAgcHNbNV0gPSBwaSArIDg7XG4gICAgICAgICAgcHNbNl0gPSBwaSArIDExO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzBdID0gcHNbM107XG4gICAgICAgICAgcHNbMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgY3NbMl0gPSBjc1swXTtcbiAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgIGNzWzBdID0gY3NbMV07XG4gICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG1lc2guZmlndXJlcy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJwYXRjaFwiLFxuICAgICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgICAgY29sb3JzOiBuZXcgSW50MzJBcnJheShjcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUJvdW5kcyhtZXNoKSB7XG4gICAgdmFyIG1pblggPSBtZXNoLmNvb3Jkc1swXVswXSxcbiAgICAgICAgbWluWSA9IG1lc2guY29vcmRzWzBdWzFdLFxuICAgICAgICBtYXhYID0gbWluWCxcbiAgICAgICAgbWF4WSA9IG1pblk7XG5cbiAgICBmb3IgKHZhciBpID0gMSwgaWkgPSBtZXNoLmNvb3Jkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgeCA9IG1lc2guY29vcmRzW2ldWzBdLFxuICAgICAgICAgIHkgPSBtZXNoLmNvb3Jkc1tpXVsxXTtcbiAgICAgIG1pblggPSBtaW5YID4geCA/IHggOiBtaW5YO1xuICAgICAgbWluWSA9IG1pblkgPiB5ID8geSA6IG1pblk7XG4gICAgICBtYXhYID0gbWF4WCA8IHggPyB4IDogbWF4WDtcbiAgICAgIG1heFkgPSBtYXhZIDwgeSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIG1lc2guYm91bmRzID0gW21pblgsIG1pblksIG1heFgsIG1heFldO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFja0RhdGEobWVzaCkge1xuICAgIHZhciBpLCBpaSwgaiwgamo7XG4gICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzO1xuICAgIHZhciBjb29yZHNQYWNrZWQgPSBuZXcgRmxvYXQzMkFycmF5KGNvb3Jkcy5sZW5ndGggKiAyKTtcblxuICAgIGZvciAoaSA9IDAsIGogPSAwLCBpaSA9IGNvb3Jkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgeHkgPSBjb29yZHNbaV07XG4gICAgICBjb29yZHNQYWNrZWRbaisrXSA9IHh5WzBdO1xuICAgICAgY29vcmRzUGFja2VkW2orK10gPSB4eVsxXTtcbiAgICB9XG5cbiAgICBtZXNoLmNvb3JkcyA9IGNvb3Jkc1BhY2tlZDtcbiAgICB2YXIgY29sb3JzID0gbWVzaC5jb2xvcnM7XG4gICAgdmFyIGNvbG9yc1BhY2tlZCA9IG5ldyBVaW50OEFycmF5KGNvbG9ycy5sZW5ndGggKiAzKTtcblxuICAgIGZvciAoaSA9IDAsIGogPSAwLCBpaSA9IGNvbG9ycy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgYyA9IGNvbG9yc1tpXTtcbiAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1swXTtcbiAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1sxXTtcbiAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1syXTtcbiAgICB9XG5cbiAgICBtZXNoLmNvbG9ycyA9IGNvbG9yc1BhY2tlZDtcbiAgICB2YXIgZmlndXJlcyA9IG1lc2guZmlndXJlcztcblxuICAgIGZvciAoaSA9IDAsIGlpID0gZmlndXJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZmlndXJlID0gZmlndXJlc1tpXSxcbiAgICAgICAgICBwcyA9IGZpZ3VyZS5jb29yZHMsXG4gICAgICAgICAgY3MgPSBmaWd1cmUuY29sb3JzO1xuXG4gICAgICBmb3IgKGogPSAwLCBqaiA9IHBzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgcHNbal0gKj0gMjtcbiAgICAgICAgY3Nbal0gKj0gMztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBNZXNoKHN0cmVhbSwgbWF0cml4LCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSkge1xuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShzdHJlYW0pKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtXCIpO1xuICAgIH1cblxuICAgIHZhciBkaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgdGhpcy5tYXRyaXggPSBtYXRyaXg7XG4gICAgdGhpcy5zaGFkaW5nVHlwZSA9IGRpY3QuZ2V0KFwiU2hhZGluZ1R5cGVcIik7XG4gICAgdGhpcy50eXBlID0gXCJQYXR0ZXJuXCI7XG4gICAgY29uc3QgYmJveCA9IGRpY3QuZ2V0QXJyYXkoXCJCQm94XCIpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYmJveCkgJiYgYmJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHRoaXMuYmJveCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChiYm94KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYm94ID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgY3MgPSBkaWN0LmdldChcIkNvbG9yU3BhY2VcIiwgXCJDU1wiKTtcbiAgICBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoY3MsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICB0aGlzLmNzID0gY3M7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gZGljdC5oYXMoXCJCYWNrZ3JvdW5kXCIpID8gY3MuZ2V0UmdiKGRpY3QuZ2V0KFwiQmFja2dyb3VuZFwiKSwgMCkgOiBudWxsO1xuICAgIHZhciBmbk9iaiA9IGRpY3QuZ2V0KFwiRnVuY3Rpb25cIik7XG4gICAgdmFyIGZuID0gZm5PYmogPyBwZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlRnJvbUFycmF5KGZuT2JqKSA6IG51bGw7XG4gICAgdGhpcy5jb29yZHMgPSBbXTtcbiAgICB0aGlzLmNvbG9ycyA9IFtdO1xuICAgIHRoaXMuZmlndXJlcyA9IFtdO1xuICAgIHZhciBkZWNvZGVDb250ZXh0ID0ge1xuICAgICAgYml0c1BlckNvb3JkaW5hdGU6IGRpY3QuZ2V0KFwiQml0c1BlckNvb3JkaW5hdGVcIiksXG4gICAgICBiaXRzUGVyQ29tcG9uZW50OiBkaWN0LmdldChcIkJpdHNQZXJDb21wb25lbnRcIiksXG4gICAgICBiaXRzUGVyRmxhZzogZGljdC5nZXQoXCJCaXRzUGVyRmxhZ1wiKSxcbiAgICAgIGRlY29kZTogZGljdC5nZXRBcnJheShcIkRlY29kZVwiKSxcbiAgICAgIGNvbG9yRm46IGZuLFxuICAgICAgY29sb3JTcGFjZTogY3MsXG4gICAgICBudW1Db21wczogZm4gPyAxIDogY3MubnVtQ29tcHNcbiAgICB9O1xuICAgIHZhciByZWFkZXIgPSBuZXcgTWVzaFN0cmVhbVJlYWRlcihzdHJlYW0sIGRlY29kZUNvbnRleHQpO1xuICAgIHZhciBwYXRjaE1lc2ggPSBmYWxzZTtcblxuICAgIHN3aXRjaCAodGhpcy5zaGFkaW5nVHlwZSkge1xuICAgICAgY2FzZSBTaGFkaW5nVHlwZS5GUkVFX0ZPUk1fTUVTSDpcbiAgICAgICAgZGVjb2RlVHlwZTRTaGFkaW5nKHRoaXMsIHJlYWRlcik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNoYWRpbmdUeXBlLkxBVFRJQ0VfRk9STV9NRVNIOlxuICAgICAgICB2YXIgdmVydGljZXNQZXJSb3cgPSBkaWN0LmdldChcIlZlcnRpY2VzUGVyUm93XCIpIHwgMDtcblxuICAgICAgICBpZiAodmVydGljZXNQZXJSb3cgPCAyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBWZXJ0aWNlc1BlclJvd1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlY29kZVR5cGU1U2hhZGluZyh0aGlzLCByZWFkZXIsIHZlcnRpY2VzUGVyUm93KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQ09PTlNfUEFUQ0hfTUVTSDpcbiAgICAgICAgZGVjb2RlVHlwZTZTaGFkaW5nKHRoaXMsIHJlYWRlcik7XG4gICAgICAgIHBhdGNoTWVzaCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNoYWRpbmdUeXBlLlRFTlNPUl9QQVRDSF9NRVNIOlxuICAgICAgICBkZWNvZGVUeXBlN1NoYWRpbmcodGhpcywgcmVhZGVyKTtcbiAgICAgICAgcGF0Y2hNZXNoID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocGF0Y2hNZXNoKSB7XG4gICAgICB1cGRhdGVCb3VuZHModGhpcyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuZmlndXJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGJ1aWxkRmlndXJlRnJvbVBhdGNoKHRoaXMsIGkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUJvdW5kcyh0aGlzKTtcbiAgICBwYWNrRGF0YSh0aGlzKTtcbiAgfVxuXG4gIE1lc2gucHJvdG90eXBlID0ge1xuICAgIGdldElSOiBmdW5jdGlvbiBNZXNoX2dldElSKCkge1xuICAgICAgcmV0dXJuIFtcIk1lc2hcIiwgdGhpcy5zaGFkaW5nVHlwZSwgdGhpcy5jb29yZHMsIHRoaXMuY29sb3JzLCB0aGlzLmZpZ3VyZXMsIHRoaXMuYm91bmRzLCB0aGlzLm1hdHJpeCwgdGhpcy5iYm94LCB0aGlzLmJhY2tncm91bmRdO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIE1lc2g7XG59KCk7XG5cblNoYWRpbmdzLkR1bW15ID0gZnVuY3Rpb24gRHVtbXlDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBEdW1teSgpIHtcbiAgICB0aGlzLnR5cGUgPSBcIlBhdHRlcm5cIjtcbiAgfVxuXG4gIER1bW15LnByb3RvdHlwZSA9IHtcbiAgICBnZXRJUjogZnVuY3Rpb24gRHVtbXlfZ2V0SVIoKSB7XG4gICAgICByZXR1cm4gW1wiRHVtbXlcIl07XG4gICAgfVxuICB9O1xuICByZXR1cm4gRHVtbXk7XG59KCk7XG5cbmZ1bmN0aW9uIGdldFRpbGluZ1BhdHRlcm5JUihvcGVyYXRvckxpc3QsIGRpY3QsIGFyZ3MpIHtcbiAgY29uc3QgbWF0cml4ID0gZGljdC5nZXRBcnJheShcIk1hdHJpeFwiKTtcblxuICBjb25zdCBiYm94ID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KGRpY3QuZ2V0QXJyYXkoXCJCQm94XCIpKTtcblxuICBjb25zdCB4c3RlcCA9IGRpY3QuZ2V0KFwiWFN0ZXBcIik7XG4gIGNvbnN0IHlzdGVwID0gZGljdC5nZXQoXCJZU3RlcFwiKTtcbiAgY29uc3QgcGFpbnRUeXBlID0gZGljdC5nZXQoXCJQYWludFR5cGVcIik7XG4gIGNvbnN0IHRpbGluZ1R5cGUgPSBkaWN0LmdldChcIlRpbGluZ1R5cGVcIik7XG5cbiAgaWYgKGJib3hbMl0gLSBiYm94WzBdID09PSAwIHx8IGJib3hbM10gLSBiYm94WzFdID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvQkJveCBhcnJheTogWyR7YmJveH1dLmApO1xuICB9XG5cbiAgcmV0dXJuIFtcIlRpbGluZ1BhdHRlcm5cIiwgYXJncywgb3BlcmF0b3JMaXN0LCBtYXRyaXgsIGJib3gsIHhzdGVwLCB5c3RlcCwgcGFpbnRUeXBlLCB0aWxpbmdUeXBlXTtcbn1cblxuLyoqKi8gfSksXG4vKiAzOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaWRpID0gYmlkaTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIGJhc2VUeXBlcyA9IFtcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIlNcIiwgXCJCXCIsIFwiU1wiLCBcIldTXCIsIFwiQlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCXCIsIFwiQlwiLCBcIkJcIiwgXCJTXCIsIFwiV1NcIiwgXCJPTlwiLCBcIk9OXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkVUXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIkVTXCIsIFwiQ1NcIiwgXCJFU1wiLCBcIkNTXCIsIFwiQ1NcIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkNTXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJDU1wiLCBcIk9OXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkVUXCIsIFwiRVRcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiQk5cIiwgXCJPTlwiLCBcIk9OXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkVOXCIsIFwiRU5cIiwgXCJPTlwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJFTlwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJPTlwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJPTlwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCJdO1xudmFyIGFyYWJpY1R5cGVzID0gW1wiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiT05cIiwgXCJPTlwiLCBcIkFMXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkFMXCIsIFwiQ1NcIiwgXCJBTFwiLCBcIk9OXCIsIFwiT05cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJBTFwiLCBcIkFMXCIsIFwiXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJFVFwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJOU01cIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiQU5cIiwgXCJPTlwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIkFMXCIsIFwiQUxcIiwgXCJOU01cIiwgXCJOU01cIiwgXCJPTlwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIkFMXCIsIFwiQUxcIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiXTtcblxuZnVuY3Rpb24gaXNPZGQoaSkge1xuICByZXR1cm4gKGkgJiAxKSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gaXNFdmVuKGkpIHtcbiAgcmV0dXJuIChpICYgMSkgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGZpbmRVbmVxdWFsKGFyciwgc3RhcnQsIHZhbHVlKSB7XG4gIGZvciAodmFyIGogPSBzdGFydCwgamogPSBhcnIubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgIGlmIChhcnJbal0gIT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gajtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gajtcbn1cblxuZnVuY3Rpb24gc2V0VmFsdWVzKGFyciwgc3RhcnQsIGVuZCwgdmFsdWUpIHtcbiAgZm9yICh2YXIgaiA9IHN0YXJ0OyBqIDwgZW5kOyArK2opIHtcbiAgICBhcnJbal0gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXZlcnNlVmFsdWVzKGFyciwgc3RhcnQsIGVuZCkge1xuICBmb3IgKHZhciBpID0gc3RhcnQsIGogPSBlbmQgLSAxOyBpIDwgajsgKytpLCAtLWopIHtcbiAgICB2YXIgdGVtcCA9IGFycltpXTtcbiAgICBhcnJbaV0gPSBhcnJbal07XG4gICAgYXJyW2pdID0gdGVtcDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCaWRpVGV4dChzdHIsIGlzTFRSLCB2ZXJ0aWNhbCA9IGZhbHNlKSB7XG4gIGxldCBkaXIgPSBcImx0clwiO1xuXG4gIGlmICh2ZXJ0aWNhbCkge1xuICAgIGRpciA9IFwidHRiXCI7XG4gIH0gZWxzZSBpZiAoIWlzTFRSKSB7XG4gICAgZGlyID0gXCJydGxcIjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RyLFxuICAgIGRpclxuICB9O1xufVxuXG52YXIgY2hhcnMgPSBbXTtcbnZhciB0eXBlcyA9IFtdO1xuXG5mdW5jdGlvbiBiaWRpKHN0ciwgc3RhcnRMZXZlbCwgdmVydGljYWwpIHtcbiAgdmFyIGlzTFRSID0gdHJ1ZTtcbiAgdmFyIHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7XG5cbiAgaWYgKHN0ckxlbmd0aCA9PT0gMCB8fCB2ZXJ0aWNhbCkge1xuICAgIHJldHVybiBjcmVhdGVCaWRpVGV4dChzdHIsIGlzTFRSLCB2ZXJ0aWNhbCk7XG4gIH1cblxuICBjaGFycy5sZW5ndGggPSBzdHJMZW5ndGg7XG4gIHR5cGVzLmxlbmd0aCA9IHN0ckxlbmd0aDtcbiAgdmFyIG51bUJpZGkgPSAwO1xuICB2YXIgaSwgaWk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgY2hhcnNbaV0gPSBzdHIuY2hhckF0KGkpO1xuICAgIHZhciBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIHZhciBjaGFyVHlwZSA9IFwiTFwiO1xuXG4gICAgaWYgKGNoYXJDb2RlIDw9IDB4MDBmZikge1xuICAgICAgY2hhclR5cGUgPSBiYXNlVHlwZXNbY2hhckNvZGVdO1xuICAgIH0gZWxzZSBpZiAoMHgwNTkwIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IDB4MDVmNCkge1xuICAgICAgY2hhclR5cGUgPSBcIlJcIjtcbiAgICB9IGVsc2UgaWYgKDB4MDYwMCA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSAweDA2ZmYpIHtcbiAgICAgIGNoYXJUeXBlID0gYXJhYmljVHlwZXNbY2hhckNvZGUgJiAweGZmXTtcblxuICAgICAgaWYgKCFjaGFyVHlwZSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJCaWRpOiBpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyIFwiICsgY2hhckNvZGUudG9TdHJpbmcoMTYpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKDB4MDcwMCA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSAweDA4YWMpIHtcbiAgICAgIGNoYXJUeXBlID0gXCJBTFwiO1xuICAgIH1cblxuICAgIGlmIChjaGFyVHlwZSA9PT0gXCJSXCIgfHwgY2hhclR5cGUgPT09IFwiQUxcIiB8fCBjaGFyVHlwZSA9PT0gXCJBTlwiKSB7XG4gICAgICBudW1CaWRpKys7XG4gICAgfVxuXG4gICAgdHlwZXNbaV0gPSBjaGFyVHlwZTtcbiAgfVxuXG4gIGlmIChudW1CaWRpID09PSAwKSB7XG4gICAgaXNMVFIgPSB0cnVlO1xuICAgIHJldHVybiBjcmVhdGVCaWRpVGV4dChzdHIsIGlzTFRSKTtcbiAgfVxuXG4gIGlmIChzdGFydExldmVsID09PSAtMSkge1xuICAgIGlmIChudW1CaWRpIC8gc3RyTGVuZ3RoIDwgMC4zKSB7XG4gICAgICBpc0xUUiA9IHRydWU7XG4gICAgICBzdGFydExldmVsID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNMVFIgPSBmYWxzZTtcbiAgICAgIHN0YXJ0TGV2ZWwgPSAxO1xuICAgIH1cbiAgfVxuXG4gIHZhciBsZXZlbHMgPSBbXTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBsZXZlbHNbaV0gPSBzdGFydExldmVsO1xuICB9XG5cbiAgdmFyIGUgPSBpc09kZChzdGFydExldmVsKSA/IFwiUlwiIDogXCJMXCI7XG4gIHZhciBzb3IgPSBlO1xuICB2YXIgZW9yID0gc29yO1xuICB2YXIgbGFzdFR5cGUgPSBzb3I7XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHR5cGVzW2ldID09PSBcIk5TTVwiKSB7XG4gICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0VHlwZSA9IHR5cGVzW2ldO1xuICAgIH1cbiAgfVxuXG4gIGxhc3RUeXBlID0gc29yO1xuICB2YXIgdDtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICB0ID0gdHlwZXNbaV07XG5cbiAgICBpZiAodCA9PT0gXCJFTlwiKSB7XG4gICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlID09PSBcIkFMXCIgPyBcIkFOXCIgOiBcIkVOXCI7XG4gICAgfSBlbHNlIGlmICh0ID09PSBcIlJcIiB8fCB0ID09PSBcIkxcIiB8fCB0ID09PSBcIkFMXCIpIHtcbiAgICAgIGxhc3RUeXBlID0gdDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICB0ID0gdHlwZXNbaV07XG5cbiAgICBpZiAodCA9PT0gXCJBTFwiKSB7XG4gICAgICB0eXBlc1tpXSA9IFwiUlwiO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDE7IGkgPCBzdHJMZW5ndGggLSAxOyArK2kpIHtcbiAgICBpZiAodHlwZXNbaV0gPT09IFwiRVNcIiAmJiB0eXBlc1tpIC0gMV0gPT09IFwiRU5cIiAmJiB0eXBlc1tpICsgMV0gPT09IFwiRU5cIikge1xuICAgICAgdHlwZXNbaV0gPSBcIkVOXCI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVzW2ldID09PSBcIkNTXCIgJiYgKHR5cGVzW2kgLSAxXSA9PT0gXCJFTlwiIHx8IHR5cGVzW2kgLSAxXSA9PT0gXCJBTlwiKSAmJiB0eXBlc1tpICsgMV0gPT09IHR5cGVzW2kgLSAxXSkge1xuICAgICAgdHlwZXNbaV0gPSB0eXBlc1tpIC0gMV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHR5cGVzW2ldID09PSBcIkVOXCIpIHtcbiAgICAgIHZhciBqO1xuXG4gICAgICBmb3IgKGogPSBpIC0gMTsgaiA+PSAwOyAtLWopIHtcbiAgICAgICAgaWYgKHR5cGVzW2pdICE9PSBcIkVUXCIpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHR5cGVzW2pdID0gXCJFTlwiO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSBpICsgMTsgaiA8IHN0ckxlbmd0aDsgKytqKSB7XG4gICAgICAgIGlmICh0eXBlc1tqXSAhPT0gXCJFVFwiKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlc1tqXSA9IFwiRU5cIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICB0ID0gdHlwZXNbaV07XG5cbiAgICBpZiAodCA9PT0gXCJXU1wiIHx8IHQgPT09IFwiRVNcIiB8fCB0ID09PSBcIkVUXCIgfHwgdCA9PT0gXCJDU1wiKSB7XG4gICAgICB0eXBlc1tpXSA9IFwiT05cIjtcbiAgICB9XG4gIH1cblxuICBsYXN0VHlwZSA9IHNvcjtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICB0ID0gdHlwZXNbaV07XG5cbiAgICBpZiAodCA9PT0gXCJFTlwiKSB7XG4gICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlID09PSBcIkxcIiA/IFwiTFwiIDogXCJFTlwiO1xuICAgIH0gZWxzZSBpZiAodCA9PT0gXCJSXCIgfHwgdCA9PT0gXCJMXCIpIHtcbiAgICAgIGxhc3RUeXBlID0gdDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodHlwZXNbaV0gPT09IFwiT05cIikge1xuICAgICAgdmFyIGVuZCA9IGZpbmRVbmVxdWFsKHR5cGVzLCBpICsgMSwgXCJPTlwiKTtcbiAgICAgIHZhciBiZWZvcmUgPSBzb3I7XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBiZWZvcmUgPSB0eXBlc1tpIC0gMV07XG4gICAgICB9XG5cbiAgICAgIHZhciBhZnRlciA9IGVvcjtcblxuICAgICAgaWYgKGVuZCArIDEgPCBzdHJMZW5ndGgpIHtcbiAgICAgICAgYWZ0ZXIgPSB0eXBlc1tlbmQgKyAxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJlZm9yZSAhPT0gXCJMXCIpIHtcbiAgICAgICAgYmVmb3JlID0gXCJSXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChhZnRlciAhPT0gXCJMXCIpIHtcbiAgICAgICAgYWZ0ZXIgPSBcIlJcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGJlZm9yZSA9PT0gYWZ0ZXIpIHtcbiAgICAgICAgc2V0VmFsdWVzKHR5cGVzLCBpLCBlbmQsIGJlZm9yZSk7XG4gICAgICB9XG5cbiAgICAgIGkgPSBlbmQgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIGlmICh0eXBlc1tpXSA9PT0gXCJPTlwiKSB7XG4gICAgICB0eXBlc1tpXSA9IGU7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgdCA9IHR5cGVzW2ldO1xuXG4gICAgaWYgKGlzRXZlbihsZXZlbHNbaV0pKSB7XG4gICAgICBpZiAodCA9PT0gXCJSXCIpIHtcbiAgICAgICAgbGV2ZWxzW2ldICs9IDE7XG4gICAgICB9IGVsc2UgaWYgKHQgPT09IFwiQU5cIiB8fCB0ID09PSBcIkVOXCIpIHtcbiAgICAgICAgbGV2ZWxzW2ldICs9IDI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0ID09PSBcIkxcIiB8fCB0ID09PSBcIkFOXCIgfHwgdCA9PT0gXCJFTlwiKSB7XG4gICAgICAgIGxldmVsc1tpXSArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBoaWdoZXN0TGV2ZWwgPSAtMTtcbiAgdmFyIGxvd2VzdE9kZExldmVsID0gOTk7XG4gIHZhciBsZXZlbDtcblxuICBmb3IgKGkgPSAwLCBpaSA9IGxldmVscy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgbGV2ZWwgPSBsZXZlbHNbaV07XG5cbiAgICBpZiAoaGlnaGVzdExldmVsIDwgbGV2ZWwpIHtcbiAgICAgIGhpZ2hlc3RMZXZlbCA9IGxldmVsO1xuICAgIH1cblxuICAgIGlmIChsb3dlc3RPZGRMZXZlbCA+IGxldmVsICYmIGlzT2RkKGxldmVsKSkge1xuICAgICAgbG93ZXN0T2RkTGV2ZWwgPSBsZXZlbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldmVsID0gaGlnaGVzdExldmVsOyBsZXZlbCA+PSBsb3dlc3RPZGRMZXZlbDsgLS1sZXZlbCkge1xuICAgIHZhciBzdGFydCA9IC0xO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBsZXZlbHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgaWYgKGxldmVsc1tpXSA8IGxldmVsKSB7XG4gICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgcmV2ZXJzZVZhbHVlcyhjaGFycywgc3RhcnQsIGkpO1xuICAgICAgICAgIHN0YXJ0ID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgcmV2ZXJzZVZhbHVlcyhjaGFycywgc3RhcnQsIGxldmVscy5sZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDAsIGlpID0gY2hhcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgIHZhciBjaCA9IGNoYXJzW2ldO1xuXG4gICAgaWYgKGNoID09PSBcIjxcIiB8fCBjaCA9PT0gXCI+XCIpIHtcbiAgICAgIGNoYXJzW2ldID0gXCJcIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlQmlkaVRleHQoY2hhcnMuam9pbihcIlwiKSwgaXNMVFIpO1xufVxuXG4vKioqLyB9KSxcbi8qIDQwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldE1ldHJpY3MgPSB2b2lkIDA7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBnZXRNZXRyaWNzID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgdC5Db3VyaWVyID0gNjAwO1xuICB0W1wiQ291cmllci1Cb2xkXCJdID0gNjAwO1xuICB0W1wiQ291cmllci1Cb2xkT2JsaXF1ZVwiXSA9IDYwMDtcbiAgdFtcIkNvdXJpZXItT2JsaXF1ZVwiXSA9IDYwMDtcbiAgdC5IZWx2ZXRpY2EgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNzg7XG4gICAgdC5leGNsYW0gPSAyNzg7XG4gICAgdC5xdW90ZWRibCA9IDM1NTtcbiAgICB0Lm51bWJlcnNpZ24gPSA1NTY7XG4gICAgdC5kb2xsYXIgPSA1NTY7XG4gICAgdC5wZXJjZW50ID0gODg5O1xuICAgIHQuYW1wZXJzYW5kID0gNjY3O1xuICAgIHQucXVvdGVyaWdodCA9IDIyMjtcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDM4OTtcbiAgICB0LnBsdXMgPSA1ODQ7XG4gICAgdC5jb21tYSA9IDI3ODtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI3ODtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDU1NjtcbiAgICB0Lm9uZSA9IDU1NjtcbiAgICB0LnR3byA9IDU1NjtcbiAgICB0LnRocmVlID0gNTU2O1xuICAgIHQuZm91ciA9IDU1NjtcbiAgICB0LmZpdmUgPSA1NTY7XG4gICAgdC5zaXggPSA1NTY7XG4gICAgdC5zZXZlbiA9IDU1NjtcbiAgICB0LmVpZ2h0ID0gNTU2O1xuICAgIHQubmluZSA9IDU1NjtcbiAgICB0LmNvbG9uID0gMjc4O1xuICAgIHQuc2VtaWNvbG9uID0gMjc4O1xuICAgIHQubGVzcyA9IDU4NDtcbiAgICB0LmVxdWFsID0gNTg0O1xuICAgIHQuZ3JlYXRlciA9IDU4NDtcbiAgICB0LnF1ZXN0aW9uID0gNTU2O1xuICAgIHQuYXQgPSAxMDE1O1xuICAgIHQuQSA9IDY2NztcbiAgICB0LkIgPSA2Njc7XG4gICAgdC5DID0gNzIyO1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2Njc7XG4gICAgdC5GID0gNjExO1xuICAgIHQuRyA9IDc3ODtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMjc4O1xuICAgIHQuSiA9IDUwMDtcbiAgICB0LksgPSA2Njc7XG4gICAgdC5MID0gNTU2O1xuICAgIHQuTSA9IDgzMztcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzc4O1xuICAgIHQuUCA9IDY2NztcbiAgICB0LlEgPSA3Nzg7XG4gICAgdC5SID0gNzIyO1xuICAgIHQuUyA9IDY2NztcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDY2NztcbiAgICB0LlcgPSA5NDQ7XG4gICAgdC5YID0gNjY3O1xuICAgIHQuWSA9IDY2NztcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDI3ODtcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDI3ODtcbiAgICB0LmFzY2lpY2lyY3VtID0gNDY5O1xuICAgIHQudW5kZXJzY29yZSA9IDU1NjtcbiAgICB0LnF1b3RlbGVmdCA9IDIyMjtcbiAgICB0LmEgPSA1NTY7XG4gICAgdC5iID0gNTU2O1xuICAgIHQuYyA9IDUwMDtcbiAgICB0LmQgPSA1NTY7XG4gICAgdC5lID0gNTU2O1xuICAgIHQuZiA9IDI3ODtcbiAgICB0LmcgPSA1NTY7XG4gICAgdC5oID0gNTU2O1xuICAgIHQuaSA9IDIyMjtcbiAgICB0LmogPSAyMjI7XG4gICAgdC5rID0gNTAwO1xuICAgIHQubCA9IDIyMjtcbiAgICB0Lm0gPSA4MzM7XG4gICAgdC5uID0gNTU2O1xuICAgIHQubyA9IDU1NjtcbiAgICB0LnAgPSA1NTY7XG4gICAgdC5xID0gNTU2O1xuICAgIHQuciA9IDMzMztcbiAgICB0LnMgPSA1MDA7XG4gICAgdC50ID0gMjc4O1xuICAgIHQudSA9IDU1NjtcbiAgICB0LnYgPSA1MDA7XG4gICAgdC53ID0gNzIyO1xuICAgIHQueCA9IDUwMDtcbiAgICB0LnkgPSA1MDA7XG4gICAgdC56ID0gNTAwO1xuICAgIHQuYnJhY2VsZWZ0ID0gMzM0O1xuICAgIHQuYmFyID0gMjYwO1xuICAgIHQuYnJhY2VyaWdodCA9IDMzNDtcbiAgICB0LmFzY2lpdGlsZGUgPSA1ODQ7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDU1NjtcbiAgICB0LnN0ZXJsaW5nID0gNTU2O1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1NTY7XG4gICAgdC5mbG9yaW4gPSA1NTY7XG4gICAgdC5zZWN0aW9uID0gNTU2O1xuICAgIHQuY3VycmVuY3kgPSA1NTY7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDE5MTtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDMzMztcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1NTY7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDUwMDtcbiAgICB0LmZsID0gNTAwO1xuICAgIHQuZW5kYXNoID0gNTU2O1xuICAgIHQuZGFnZ2VyID0gNTU2O1xuICAgIHQuZGFnZ2VyZGJsID0gNTU2O1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNzg7XG4gICAgdC5wYXJhZ3JhcGggPSA1Mzc7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDIyMjtcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDMzMztcbiAgICB0LnF1b3RlZGJscmlnaHQgPSAzMzM7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDU1NjtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDYxMTtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDEwMDA7XG4gICAgdC5vcmRmZW1pbmluZSA9IDM3MDtcbiAgICB0LkxzbGFzaCA9IDU1NjtcbiAgICB0Lk9zbGFzaCA9IDc3ODtcbiAgICB0Lk9FID0gMTAwMDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDM2NTtcbiAgICB0LmFlID0gODg5O1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyMjI7XG4gICAgdC5vc2xhc2ggPSA2MTE7XG4gICAgdC5vZSA9IDk0NDtcbiAgICB0Lmdlcm1hbmRibHMgPSA2MTE7XG4gICAgdC5JZGllcmVzaXMgPSAyNzg7XG4gICAgdC5lYWN1dGUgPSA1NTY7XG4gICAgdC5hYnJldmUgPSA1NTY7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuZWNhcm9uID0gNTU2O1xuICAgIHQuWWRpZXJlc2lzID0gNjY3O1xuICAgIHQuZGl2aWRlID0gNTg0O1xuICAgIHQuWWFjdXRlID0gNjY3O1xuICAgIHQuQWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hYWN1dGUgPSA1NTY7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDUwMDtcbiAgICB0LnNjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTU2O1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDU1NjtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzM3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDUwMDtcbiAgICB0LmFyaW5nID0gNTU2O1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjIyO1xuICAgIHQuYWdyYXZlID0gNTU2O1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQ2FjdXRlID0gNzIyO1xuICAgIHQuYXRpbGRlID0gNTU2O1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDUwMDtcbiAgICB0LnNjZWRpbGxhID0gNTAwO1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ3MTtcbiAgICB0LlJjYXJvbiA9IDcyMjtcbiAgICB0Lkdjb21tYWFjY2VudCA9IDc3ODtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuYWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5BbWFjcm9uID0gNjY3O1xuICAgIHQucmNhcm9uID0gMzMzO1xuICAgIHQuY2NlZGlsbGEgPSA1MDA7XG4gICAgdC5aZG90YWNjZW50ID0gNjExO1xuICAgIHQuVGhvcm4gPSA2Njc7XG4gICAgdC5PbWFjcm9uID0gNzc4O1xuICAgIHQuUmFjdXRlID0gNzIyO1xuICAgIHQuU2FjdXRlID0gNjY3O1xuICAgIHQuZGNhcm9uID0gNjQzO1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNTU2O1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMzMztcbiAgICB0Lk9ncmF2ZSA9IDc3ODtcbiAgICB0LkFncmF2ZSA9IDY2NztcbiAgICB0LkFicmV2ZSA9IDY2NztcbiAgICB0Lm11bHRpcGx5ID0gNTg0O1xuICAgIHQudWFjdXRlID0gNTU2O1xuICAgIHQuVGNhcm9uID0gNjExO1xuICAgIHQucGFydGlhbGRpZmYgPSA0NzY7XG4gICAgdC55ZGllcmVzaXMgPSA1MDA7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTU2O1xuICAgIHQuZWRpZXJlc2lzID0gNTU2O1xuICAgIHQuY2FjdXRlID0gNTAwO1xuICAgIHQubmFjdXRlID0gNTU2O1xuICAgIHQudW1hY3JvbiA9IDU1NjtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDI3ODtcbiAgICB0LnBsdXNtaW51cyA9IDU4NDtcbiAgICB0LmJyb2tlbmJhciA9IDI2MDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3Mzc7XG4gICAgdC5HYnJldmUgPSA3Nzg7XG4gICAgdC5JZG90YWNjZW50ID0gMjc4O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gMzMzO1xuICAgIHQub21hY3JvbiA9IDU1NjtcbiAgICB0LlphY3V0ZSA9IDYxMTtcbiAgICB0LlpjYXJvbiA9IDYxMTtcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNzIyO1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjIyO1xuICAgIHQudGNhcm9uID0gMzE3O1xuICAgIHQuZW9nb25layA9IDU1NjtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA2Njc7XG4gICAgdC5BZGllcmVzaXMgPSA2Njc7XG4gICAgdC5lZ3JhdmUgPSA1NTY7XG4gICAgdC56YWN1dGUgPSA1MDA7XG4gICAgdC5pb2dvbmVrID0gMjIyO1xuICAgIHQuT2FjdXRlID0gNzc4O1xuICAgIHQub2FjdXRlID0gNTU2O1xuICAgIHQuYW1hY3JvbiA9IDU1NjtcbiAgICB0LnNhY3V0ZSA9IDUwMDtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4O1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDU1NjtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzMzO1xuICAgIHQuT2RpZXJlc2lzID0gNzc4O1xuICAgIHQubXUgPSA1NTY7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDU1NjtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA4MzQ7XG4gICAgdC5TY2VkaWxsYSA9IDY2NztcbiAgICB0LmxjYXJvbiA9IDI5OTtcbiAgICB0Lktjb21tYWFjY2VudCA9IDY2NztcbiAgICB0LkxhY3V0ZSA9IDU1NjtcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNTU2O1xuICAgIHQuSWdyYXZlID0gMjc4O1xuICAgIHQuSW1hY3JvbiA9IDI3ODtcbiAgICB0LkxjYXJvbiA9IDU1NjtcbiAgICB0Lm9uZWhhbGYgPSA4MzQ7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0Lm50aWxkZSA9IDU1NjtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNTU2O1xuICAgIHQuZ2JyZXZlID0gNTU2O1xuICAgIHQub25lcXVhcnRlciA9IDgzNDtcbiAgICB0LlNjYXJvbiA9IDY2NztcbiAgICB0LlNjb21tYWFjY2VudCA9IDY2NztcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3Nzg7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1NTY7XG4gICAgdC5DY2Fyb24gPSA3MjI7XG4gICAgdC51Z3JhdmUgPSA1NTY7XG4gICAgdC5yYWRpY2FsID0gNDUzO1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTU2O1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuQXRpbGRlID0gNjY3O1xuICAgIHQuQW9nb25layA9IDY2NztcbiAgICB0LkFyaW5nID0gNjY3O1xuICAgIHQuT3RpbGRlID0gNzc4O1xuICAgIHQuemRvdGFjY2VudCA9IDUwMDtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAyNzg7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5taW51cyA9IDU4NDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQubmNhcm9uID0gNTU2O1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDU4NDtcbiAgICB0Lm9kaWVyZXNpcyA9IDU1NjtcbiAgICB0LnVkaWVyZXNpcyA9IDU1NjtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuZXRoID0gNTU2O1xuICAgIHQuemNhcm9uID0gNTAwO1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQub25lc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDU1NjtcbiAgfSk7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZFwiXSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgdC5zcGFjZSA9IDI3ODtcbiAgICB0LmV4Y2xhbSA9IDMzMztcbiAgICB0LnF1b3RlZGJsID0gNDc0O1xuICAgIHQubnVtYmVyc2lnbiA9IDU1NjtcbiAgICB0LmRvbGxhciA9IDU1NjtcbiAgICB0LnBlcmNlbnQgPSA4ODk7XG4gICAgdC5hbXBlcnNhbmQgPSA3MjI7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMjc4O1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gMzg5O1xuICAgIHQucGx1cyA9IDU4NDtcbiAgICB0LmNvbW1hID0gMjc4O1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjc4O1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTU2O1xuICAgIHQub25lID0gNTU2O1xuICAgIHQudHdvID0gNTU2O1xuICAgIHQudGhyZWUgPSA1NTY7XG4gICAgdC5mb3VyID0gNTU2O1xuICAgIHQuZml2ZSA9IDU1NjtcbiAgICB0LnNpeCA9IDU1NjtcbiAgICB0LnNldmVuID0gNTU2O1xuICAgIHQuZWlnaHQgPSA1NTY7XG4gICAgdC5uaW5lID0gNTU2O1xuICAgIHQuY29sb24gPSAzMzM7XG4gICAgdC5zZW1pY29sb24gPSAzMzM7XG4gICAgdC5sZXNzID0gNTg0O1xuICAgIHQuZXF1YWwgPSA1ODQ7XG4gICAgdC5ncmVhdGVyID0gNTg0O1xuICAgIHQucXVlc3Rpb24gPSA2MTE7XG4gICAgdC5hdCA9IDk3NTtcbiAgICB0LkEgPSA3MjI7XG4gICAgdC5CID0gNzIyO1xuICAgIHQuQyA9IDcyMjtcbiAgICB0LkQgPSA3MjI7XG4gICAgdC5FID0gNjY3O1xuICAgIHQuRiA9IDYxMTtcbiAgICB0LkcgPSA3Nzg7XG4gICAgdC5IID0gNzIyO1xuICAgIHQuSSA9IDI3ODtcbiAgICB0LkogPSA1NTY7XG4gICAgdC5LID0gNzIyO1xuICAgIHQuTCA9IDYxMTtcbiAgICB0Lk0gPSA4MzM7XG4gICAgdC5OID0gNzIyO1xuICAgIHQuTyA9IDc3ODtcbiAgICB0LlAgPSA2Njc7XG4gICAgdC5RID0gNzc4O1xuICAgIHQuUiA9IDcyMjtcbiAgICB0LlMgPSA2Njc7XG4gICAgdC5UID0gNjExO1xuICAgIHQuVSA9IDcyMjtcbiAgICB0LlYgPSA2Njc7XG4gICAgdC5XID0gOTQ0O1xuICAgIHQuWCA9IDY2NztcbiAgICB0LlkgPSA2Njc7XG4gICAgdC5aID0gNjExO1xuICAgIHQuYnJhY2tldGxlZnQgPSAzMzM7XG4gICAgdC5iYWNrc2xhc2ggPSAyNzg7XG4gICAgdC5icmFja2V0cmlnaHQgPSAzMzM7XG4gICAgdC5hc2NpaWNpcmN1bSA9IDU4NDtcbiAgICB0LnVuZGVyc2NvcmUgPSA1NTY7XG4gICAgdC5xdW90ZWxlZnQgPSAyNzg7XG4gICAgdC5hID0gNTU2O1xuICAgIHQuYiA9IDYxMTtcbiAgICB0LmMgPSA1NTY7XG4gICAgdC5kID0gNjExO1xuICAgIHQuZSA9IDU1NjtcbiAgICB0LmYgPSAzMzM7XG4gICAgdC5nID0gNjExO1xuICAgIHQuaCA9IDYxMTtcbiAgICB0LmkgPSAyNzg7XG4gICAgdC5qID0gMjc4O1xuICAgIHQuayA9IDU1NjtcbiAgICB0LmwgPSAyNzg7XG4gICAgdC5tID0gODg5O1xuICAgIHQubiA9IDYxMTtcbiAgICB0Lm8gPSA2MTE7XG4gICAgdC5wID0gNjExO1xuICAgIHQucSA9IDYxMTtcbiAgICB0LnIgPSAzODk7XG4gICAgdC5zID0gNTU2O1xuICAgIHQudCA9IDMzMztcbiAgICB0LnUgPSA2MTE7XG4gICAgdC52ID0gNTU2O1xuICAgIHQudyA9IDc3ODtcbiAgICB0LnggPSA1NTY7XG4gICAgdC55ID0gNTU2O1xuICAgIHQueiA9IDUwMDtcbiAgICB0LmJyYWNlbGVmdCA9IDM4OTtcbiAgICB0LmJhciA9IDI4MDtcbiAgICB0LmJyYWNlcmlnaHQgPSAzODk7XG4gICAgdC5hc2NpaXRpbGRlID0gNTg0O1xuICAgIHQuZXhjbGFtZG93biA9IDMzMztcbiAgICB0LmNlbnQgPSA1NTY7XG4gICAgdC5zdGVybGluZyA9IDU1NjtcbiAgICB0LmZyYWN0aW9uID0gMTY3O1xuICAgIHQueWVuID0gNTU2O1xuICAgIHQuZmxvcmluID0gNTU2O1xuICAgIHQuc2VjdGlvbiA9IDU1NjtcbiAgICB0LmN1cnJlbmN5ID0gNTU2O1xuICAgIHQucXVvdGVzaW5nbGUgPSAyMzg7XG4gICAgdC5xdW90ZWRibGxlZnQgPSA1MDA7XG4gICAgdC5ndWlsbGVtb3RsZWZ0ID0gNTU2O1xuICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMztcbiAgICB0Lmd1aWxzaW5nbHJpZ2h0ID0gMzMzO1xuICAgIHQuZmkgPSA2MTE7XG4gICAgdC5mbCA9IDYxMTtcbiAgICB0LmVuZGFzaCA9IDU1NjtcbiAgICB0LmRhZ2dlciA9IDU1NjtcbiAgICB0LmRhZ2dlcmRibCA9IDU1NjtcbiAgICB0LnBlcmlvZGNlbnRlcmVkID0gMjc4O1xuICAgIHQucGFyYWdyYXBoID0gNTU2O1xuICAgIHQuYnVsbGV0ID0gMzUwO1xuICAgIHQucXVvdGVzaW5nbGJhc2UgPSAyNzg7XG4gICAgdC5xdW90ZWRibGJhc2UgPSA1MDA7XG4gICAgdC5xdW90ZWRibHJpZ2h0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90cmlnaHQgPSA1NTY7XG4gICAgdC5lbGxpcHNpcyA9IDEwMDA7XG4gICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7XG4gICAgdC5xdWVzdGlvbmRvd24gPSA2MTE7XG4gICAgdC5ncmF2ZSA9IDMzMztcbiAgICB0LmFjdXRlID0gMzMzO1xuICAgIHQuY2lyY3VtZmxleCA9IDMzMztcbiAgICB0LnRpbGRlID0gMzMzO1xuICAgIHQubWFjcm9uID0gMzMzO1xuICAgIHQuYnJldmUgPSAzMzM7XG4gICAgdC5kb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5kaWVyZXNpcyA9IDMzMztcbiAgICB0LnJpbmcgPSAzMzM7XG4gICAgdC5jZWRpbGxhID0gMzMzO1xuICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzO1xuICAgIHQub2dvbmVrID0gMzMzO1xuICAgIHQuY2Fyb24gPSAzMzM7XG4gICAgdC5lbWRhc2ggPSAxMDAwO1xuICAgIHQuQUUgPSAxMDAwO1xuICAgIHQub3JkZmVtaW5pbmUgPSAzNzA7XG4gICAgdC5Mc2xhc2ggPSA2MTE7XG4gICAgdC5Pc2xhc2ggPSA3Nzg7XG4gICAgdC5PRSA9IDEwMDA7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzNjU7XG4gICAgdC5hZSA9IDg4OTtcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNjExO1xuICAgIHQub2UgPSA5NDQ7XG4gICAgdC5nZXJtYW5kYmxzID0gNjExO1xuICAgIHQuSWRpZXJlc2lzID0gMjc4O1xuICAgIHQuZWFjdXRlID0gNTU2O1xuICAgIHQuYWJyZXZlID0gNTU2O1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDYxMTtcbiAgICB0LmVjYXJvbiA9IDU1NjtcbiAgICB0LllkaWVyZXNpcyA9IDY2NztcbiAgICB0LmRpdmlkZSA9IDU4NDtcbiAgICB0LllhY3V0ZSA9IDY2NztcbiAgICB0LkFjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQuYWFjdXRlID0gNTU2O1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA1NTY7XG4gICAgdC5zY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5lY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDU1NjtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA2MTE7XG4gICAgdC5FZGllcmVzaXMgPSA2Njc7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDczNztcbiAgICB0LkVtYWNyb24gPSA2Njc7XG4gICAgdC5jY2Fyb24gPSA1NTY7XG4gICAgdC5hcmluZyA9IDU1NjtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDU1NjtcbiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkNhY3V0ZSA9IDcyMjtcbiAgICB0LmF0aWxkZSA9IDU1NjtcbiAgICB0LkVkb3RhY2NlbnQgPSA2Njc7XG4gICAgdC5zY2Fyb24gPSA1NTY7XG4gICAgdC5zY2VkaWxsYSA9IDU1NjtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0OTQ7XG4gICAgdC5SY2Fyb24gPSA3MjI7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3Nzg7XG4gICAgdC51Y2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuQW1hY3JvbiA9IDcyMjtcbiAgICB0LnJjYXJvbiA9IDM4OTtcbiAgICB0LmNjZWRpbGxhID0gNTU2O1xuICAgIHQuWmRvdGFjY2VudCA9IDYxMTtcbiAgICB0LlRob3JuID0gNjY3O1xuICAgIHQuT21hY3JvbiA9IDc3ODtcbiAgICB0LlJhY3V0ZSA9IDcyMjtcbiAgICB0LlNhY3V0ZSA9IDY2NztcbiAgICB0LmRjYXJvbiA9IDc0MztcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDYxMTtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5PZ3JhdmUgPSA3Nzg7XG4gICAgdC5BZ3JhdmUgPSA3MjI7XG4gICAgdC5BYnJldmUgPSA3MjI7XG4gICAgdC5tdWx0aXBseSA9IDU4NDtcbiAgICB0LnVhY3V0ZSA9IDYxMTtcbiAgICB0LlRjYXJvbiA9IDYxMTtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDk0O1xuICAgIHQueWRpZXJlc2lzID0gNTU2O1xuICAgIHQuTmFjdXRlID0gNzIyO1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDY2NztcbiAgICB0LmFkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmVkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmNhY3V0ZSA9IDU1NjtcbiAgICB0Lm5hY3V0ZSA9IDYxMTtcbiAgICB0LnVtYWNyb24gPSA2MTE7XG4gICAgdC5OY2Fyb24gPSA3MjI7XG4gICAgdC5JYWN1dGUgPSAyNzg7XG4gICAgdC5wbHVzbWludXMgPSA1ODQ7XG4gICAgdC5icm9rZW5iYXIgPSAyODA7XG4gICAgdC5yZWdpc3RlcmVkID0gNzM3O1xuICAgIHQuR2JyZXZlID0gNzc4O1xuICAgIHQuSWRvdGFjY2VudCA9IDI3ODtcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDY2NztcbiAgICB0LnJhY3V0ZSA9IDM4OTtcbiAgICB0Lm9tYWNyb24gPSA2MTE7XG4gICAgdC5aYWN1dGUgPSA2MTE7XG4gICAgdC5aY2Fyb24gPSA2MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDcyMjtcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDM4OTtcbiAgICB0LmVvZ29uZWsgPSA1NTY7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNzIyO1xuICAgIHQuQWRpZXJlc2lzID0gNzIyO1xuICAgIHQuZWdyYXZlID0gNTU2O1xuICAgIHQuemFjdXRlID0gNTAwO1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDc3ODtcbiAgICB0Lm9hY3V0ZSA9IDYxMTtcbiAgICB0LmFtYWNyb24gPSA1NTY7XG4gICAgdC5zYWN1dGUgPSA1NTY7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDc3ODtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA2MTE7XG4gICAgdC50d29zdXBlcmlvciA9IDMzMztcbiAgICB0Lk9kaWVyZXNpcyA9IDc3ODtcbiAgICB0Lm11ID0gNjExO1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDYxMTtcbiAgICB0LkVvZ29uZWsgPSA2Njc7XG4gICAgdC5kY3JvYXQgPSA2MTE7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gODM0O1xuICAgIHQuU2NlZGlsbGEgPSA2Njc7XG4gICAgdC5sY2Fyb24gPSA0MDA7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MYWN1dGUgPSA2MTE7XG4gICAgdC50cmFkZW1hcmsgPSAxMDAwO1xuICAgIHQuZWRvdGFjY2VudCA9IDU1NjtcbiAgICB0LklncmF2ZSA9IDI3ODtcbiAgICB0LkltYWNyb24gPSAyNzg7XG4gICAgdC5MY2Fyb24gPSA2MTE7XG4gICAgdC5vbmVoYWxmID0gODM0O1xuICAgIHQubGVzc2VxdWFsID0gNTQ5O1xuICAgIHQub2NpcmN1bWZsZXggPSA2MTE7XG4gICAgdC5udGlsZGUgPSA2MTE7XG4gICAgdC5VaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuRWFjdXRlID0gNjY3O1xuICAgIHQuZW1hY3JvbiA9IDU1NjtcbiAgICB0LmdicmV2ZSA9IDYxMTtcbiAgICB0Lm9uZXF1YXJ0ZXIgPSA4MzQ7XG4gICAgdC5TY2Fyb24gPSA2Njc7XG4gICAgdC5TY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5PaHVuZ2FydW1sYXV0ID0gNzc4O1xuICAgIHQuZGVncmVlID0gNDAwO1xuICAgIHQub2dyYXZlID0gNjExO1xuICAgIHQuQ2Nhcm9uID0gNzIyO1xuICAgIHQudWdyYXZlID0gNjExO1xuICAgIHQucmFkaWNhbCA9IDU0OTtcbiAgICB0LkRjYXJvbiA9IDcyMjtcbiAgICB0LnJjb21tYWFjY2VudCA9IDM4OTtcbiAgICB0Lk50aWxkZSA9IDcyMjtcbiAgICB0Lm90aWxkZSA9IDYxMTtcbiAgICB0LlJjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0Lkxjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkF0aWxkZSA9IDcyMjtcbiAgICB0LkFvZ29uZWsgPSA3MjI7XG4gICAgdC5BcmluZyA9IDcyMjtcbiAgICB0Lk90aWxkZSA9IDc3ODtcbiAgICB0Lnpkb3RhY2NlbnQgPSA1MDA7XG4gICAgdC5FY2Fyb24gPSA2Njc7XG4gICAgdC5Jb2dvbmVrID0gMjc4O1xuICAgIHQua2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQubWludXMgPSA1ODQ7XG4gICAgdC5JY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0Lm5jYXJvbiA9IDYxMTtcbiAgICB0LnRjb21tYWFjY2VudCA9IDMzMztcbiAgICB0LmxvZ2ljYWxub3QgPSA1ODQ7XG4gICAgdC5vZGllcmVzaXMgPSA2MTE7XG4gICAgdC51ZGllcmVzaXMgPSA2MTE7XG4gICAgdC5ub3RlcXVhbCA9IDU0OTtcbiAgICB0Lmdjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LmV0aCA9IDYxMTtcbiAgICB0LnpjYXJvbiA9IDUwMDtcbiAgICB0Lm5jb21tYWFjY2VudCA9IDYxMTtcbiAgICB0Lm9uZXN1cGVyaW9yID0gMzMzO1xuICAgIHQuaW1hY3JvbiA9IDI3ODtcbiAgICB0LkV1cm8gPSA1NTY7XG4gIH0pO1xuICB0W1wiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjc4O1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQucXVvdGVkYmwgPSA0NzQ7XG4gICAgdC5udW1iZXJzaWduID0gNTU2O1xuICAgIHQuZG9sbGFyID0gNTU2O1xuICAgIHQucGVyY2VudCA9IDg4OTtcbiAgICB0LmFtcGVyc2FuZCA9IDcyMjtcbiAgICB0LnF1b3RlcmlnaHQgPSAyNzg7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2sgPSAzODk7XG4gICAgdC5wbHVzID0gNTg0O1xuICAgIHQuY29tbWEgPSAyNzg7XG4gICAgdC5oeXBoZW4gPSAzMzM7XG4gICAgdC5wZXJpb2QgPSAyNzg7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1NTY7XG4gICAgdC5vbmUgPSA1NTY7XG4gICAgdC50d28gPSA1NTY7XG4gICAgdC50aHJlZSA9IDU1NjtcbiAgICB0LmZvdXIgPSA1NTY7XG4gICAgdC5maXZlID0gNTU2O1xuICAgIHQuc2l4ID0gNTU2O1xuICAgIHQuc2V2ZW4gPSA1NTY7XG4gICAgdC5laWdodCA9IDU1NjtcbiAgICB0Lm5pbmUgPSA1NTY7XG4gICAgdC5jb2xvbiA9IDMzMztcbiAgICB0LnNlbWljb2xvbiA9IDMzMztcbiAgICB0Lmxlc3MgPSA1ODQ7XG4gICAgdC5lcXVhbCA9IDU4NDtcbiAgICB0LmdyZWF0ZXIgPSA1ODQ7XG4gICAgdC5xdWVzdGlvbiA9IDYxMTtcbiAgICB0LmF0ID0gOTc1O1xuICAgIHQuQSA9IDcyMjtcbiAgICB0LkIgPSA3MjI7XG4gICAgdC5DID0gNzIyO1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2Njc7XG4gICAgdC5GID0gNjExO1xuICAgIHQuRyA9IDc3ODtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMjc4O1xuICAgIHQuSiA9IDU1NjtcbiAgICB0LksgPSA3MjI7XG4gICAgdC5MID0gNjExO1xuICAgIHQuTSA9IDgzMztcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzc4O1xuICAgIHQuUCA9IDY2NztcbiAgICB0LlEgPSA3Nzg7XG4gICAgdC5SID0gNzIyO1xuICAgIHQuUyA9IDY2NztcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDY2NztcbiAgICB0LlcgPSA5NDQ7XG4gICAgdC5YID0gNjY3O1xuICAgIHQuWSA9IDY2NztcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LmFzY2lpY2lyY3VtID0gNTg0O1xuICAgIHQudW5kZXJzY29yZSA9IDU1NjtcbiAgICB0LnF1b3RlbGVmdCA9IDI3ODtcbiAgICB0LmEgPSA1NTY7XG4gICAgdC5iID0gNjExO1xuICAgIHQuYyA9IDU1NjtcbiAgICB0LmQgPSA2MTE7XG4gICAgdC5lID0gNTU2O1xuICAgIHQuZiA9IDMzMztcbiAgICB0LmcgPSA2MTE7XG4gICAgdC5oID0gNjExO1xuICAgIHQuaSA9IDI3ODtcbiAgICB0LmogPSAyNzg7XG4gICAgdC5rID0gNTU2O1xuICAgIHQubCA9IDI3ODtcbiAgICB0Lm0gPSA4ODk7XG4gICAgdC5uID0gNjExO1xuICAgIHQubyA9IDYxMTtcbiAgICB0LnAgPSA2MTE7XG4gICAgdC5xID0gNjExO1xuICAgIHQuciA9IDM4OTtcbiAgICB0LnMgPSA1NTY7XG4gICAgdC50ID0gMzMzO1xuICAgIHQudSA9IDYxMTtcbiAgICB0LnYgPSA1NTY7XG4gICAgdC53ID0gNzc4O1xuICAgIHQueCA9IDU1NjtcbiAgICB0LnkgPSA1NTY7XG4gICAgdC56ID0gNTAwO1xuICAgIHQuYnJhY2VsZWZ0ID0gMzg5O1xuICAgIHQuYmFyID0gMjgwO1xuICAgIHQuYnJhY2VyaWdodCA9IDM4OTtcbiAgICB0LmFzY2lpdGlsZGUgPSA1ODQ7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDU1NjtcbiAgICB0LnN0ZXJsaW5nID0gNTU2O1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1NTY7XG4gICAgdC5mbG9yaW4gPSA1NTY7XG4gICAgdC5zZWN0aW9uID0gNTU2O1xuICAgIHQuY3VycmVuY3kgPSA1NTY7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDIzODtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1NTY7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDYxMTtcbiAgICB0LmZsID0gNjExO1xuICAgIHQuZW5kYXNoID0gNTU2O1xuICAgIHQuZGFnZ2VyID0gNTU2O1xuICAgIHQuZGFnZ2VyZGJsID0gNTU2O1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNzg7XG4gICAgdC5wYXJhZ3JhcGggPSA1NTY7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDI3ODtcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDUwMDtcbiAgICB0LnF1b3RlZGJscmlnaHQgPSA1MDA7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDU1NjtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDYxMTtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDEwMDA7XG4gICAgdC5vcmRmZW1pbmluZSA9IDM3MDtcbiAgICB0LkxzbGFzaCA9IDYxMTtcbiAgICB0Lk9zbGFzaCA9IDc3ODtcbiAgICB0Lk9FID0gMTAwMDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDM2NTtcbiAgICB0LmFlID0gODg5O1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyNzg7XG4gICAgdC5vc2xhc2ggPSA2MTE7XG4gICAgdC5vZSA9IDk0NDtcbiAgICB0Lmdlcm1hbmRibHMgPSA2MTE7XG4gICAgdC5JZGllcmVzaXMgPSAyNzg7XG4gICAgdC5lYWN1dGUgPSA1NTY7XG4gICAgdC5hYnJldmUgPSA1NTY7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNjExO1xuICAgIHQuZWNhcm9uID0gNTU2O1xuICAgIHQuWWRpZXJlc2lzID0gNjY3O1xuICAgIHQuZGl2aWRlID0gNTg0O1xuICAgIHQuWWFjdXRlID0gNjY3O1xuICAgIHQuQWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC5hYWN1dGUgPSA1NTY7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDU1NjtcbiAgICB0LnNjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTU2O1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDYxMTtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzM3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDU1NjtcbiAgICB0LmFyaW5nID0gNTU2O1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjc4O1xuICAgIHQuYWdyYXZlID0gNTU2O1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQ2FjdXRlID0gNzIyO1xuICAgIHQuYXRpbGRlID0gNTU2O1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDU1NjtcbiAgICB0LnNjZWRpbGxhID0gNTU2O1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ5NDtcbiAgICB0LlJjYXJvbiA9IDcyMjtcbiAgICB0Lkdjb21tYWFjY2VudCA9IDc3ODtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNjExO1xuICAgIHQuYWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5BbWFjcm9uID0gNzIyO1xuICAgIHQucmNhcm9uID0gMzg5O1xuICAgIHQuY2NlZGlsbGEgPSA1NTY7XG4gICAgdC5aZG90YWNjZW50ID0gNjExO1xuICAgIHQuVGhvcm4gPSA2Njc7XG4gICAgdC5PbWFjcm9uID0gNzc4O1xuICAgIHQuUmFjdXRlID0gNzIyO1xuICAgIHQuU2FjdXRlID0gNjY3O1xuICAgIHQuZGNhcm9uID0gNzQzO1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNjExO1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMzMztcbiAgICB0Lk9ncmF2ZSA9IDc3ODtcbiAgICB0LkFncmF2ZSA9IDcyMjtcbiAgICB0LkFicmV2ZSA9IDcyMjtcbiAgICB0Lm11bHRpcGx5ID0gNTg0O1xuICAgIHQudWFjdXRlID0gNjExO1xuICAgIHQuVGNhcm9uID0gNjExO1xuICAgIHQucGFydGlhbGRpZmYgPSA0OTQ7XG4gICAgdC55ZGllcmVzaXMgPSA1NTY7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTU2O1xuICAgIHQuZWRpZXJlc2lzID0gNTU2O1xuICAgIHQuY2FjdXRlID0gNTU2O1xuICAgIHQubmFjdXRlID0gNjExO1xuICAgIHQudW1hY3JvbiA9IDYxMTtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDI3ODtcbiAgICB0LnBsdXNtaW51cyA9IDU4NDtcbiAgICB0LmJyb2tlbmJhciA9IDI4MDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3Mzc7XG4gICAgdC5HYnJldmUgPSA3Nzg7XG4gICAgdC5JZG90YWNjZW50ID0gMjc4O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gMzg5O1xuICAgIHQub21hY3JvbiA9IDYxMTtcbiAgICB0LlphY3V0ZSA9IDYxMTtcbiAgICB0LlpjYXJvbiA9IDYxMTtcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNzIyO1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQudGNhcm9uID0gMzg5O1xuICAgIHQuZW9nb25layA9IDU1NjtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA3MjI7XG4gICAgdC5BZGllcmVzaXMgPSA3MjI7XG4gICAgdC5lZ3JhdmUgPSA1NTY7XG4gICAgdC56YWN1dGUgPSA1MDA7XG4gICAgdC5pb2dvbmVrID0gMjc4O1xuICAgIHQuT2FjdXRlID0gNzc4O1xuICAgIHQub2FjdXRlID0gNjExO1xuICAgIHQuYW1hY3JvbiA9IDU1NjtcbiAgICB0LnNhY3V0ZSA9IDU1NjtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4O1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDYxMTtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzMzO1xuICAgIHQuT2RpZXJlc2lzID0gNzc4O1xuICAgIHQubXUgPSA2MTE7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNjExO1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDYxMTtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA4MzQ7XG4gICAgdC5TY2VkaWxsYSA9IDY2NztcbiAgICB0LmxjYXJvbiA9IDQwMDtcbiAgICB0Lktjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LkxhY3V0ZSA9IDYxMTtcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNTU2O1xuICAgIHQuSWdyYXZlID0gMjc4O1xuICAgIHQuSW1hY3JvbiA9IDI3ODtcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA4MzQ7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDYxMTtcbiAgICB0Lm50aWxkZSA9IDYxMTtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNTU2O1xuICAgIHQuZ2JyZXZlID0gNjExO1xuICAgIHQub25lcXVhcnRlciA9IDgzNDtcbiAgICB0LlNjYXJvbiA9IDY2NztcbiAgICB0LlNjb21tYWFjY2VudCA9IDY2NztcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3Nzg7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA2MTE7XG4gICAgdC5DY2Fyb24gPSA3MjI7XG4gICAgdC51Z3JhdmUgPSA2MTE7XG4gICAgdC5yYWRpY2FsID0gNTQ5O1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNjExO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQXRpbGRlID0gNzIyO1xuICAgIHQuQW9nb25layA9IDcyMjtcbiAgICB0LkFyaW5nID0gNzIyO1xuICAgIHQuT3RpbGRlID0gNzc4O1xuICAgIHQuemRvdGFjY2VudCA9IDUwMDtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAyNzg7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5taW51cyA9IDU4NDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQubmNhcm9uID0gNjExO1xuICAgIHQudGNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQubG9naWNhbG5vdCA9IDU4NDtcbiAgICB0Lm9kaWVyZXNpcyA9IDYxMTtcbiAgICB0LnVkaWVyZXNpcyA9IDYxMTtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuZXRoID0gNjExO1xuICAgIHQuemNhcm9uID0gNTAwO1xuICAgIHQubmNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQub25lc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDU1NjtcbiAgfSk7XG4gIHRbXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiXSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgdC5zcGFjZSA9IDI3ODtcbiAgICB0LmV4Y2xhbSA9IDI3ODtcbiAgICB0LnF1b3RlZGJsID0gMzU1O1xuICAgIHQubnVtYmVyc2lnbiA9IDU1NjtcbiAgICB0LmRvbGxhciA9IDU1NjtcbiAgICB0LnBlcmNlbnQgPSA4ODk7XG4gICAgdC5hbXBlcnNhbmQgPSA2Njc7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMjIyO1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gMzg5O1xuICAgIHQucGx1cyA9IDU4NDtcbiAgICB0LmNvbW1hID0gMjc4O1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjc4O1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTU2O1xuICAgIHQub25lID0gNTU2O1xuICAgIHQudHdvID0gNTU2O1xuICAgIHQudGhyZWUgPSA1NTY7XG4gICAgdC5mb3VyID0gNTU2O1xuICAgIHQuZml2ZSA9IDU1NjtcbiAgICB0LnNpeCA9IDU1NjtcbiAgICB0LnNldmVuID0gNTU2O1xuICAgIHQuZWlnaHQgPSA1NTY7XG4gICAgdC5uaW5lID0gNTU2O1xuICAgIHQuY29sb24gPSAyNzg7XG4gICAgdC5zZW1pY29sb24gPSAyNzg7XG4gICAgdC5sZXNzID0gNTg0O1xuICAgIHQuZXF1YWwgPSA1ODQ7XG4gICAgdC5ncmVhdGVyID0gNTg0O1xuICAgIHQucXVlc3Rpb24gPSA1NTY7XG4gICAgdC5hdCA9IDEwMTU7XG4gICAgdC5BID0gNjY3O1xuICAgIHQuQiA9IDY2NztcbiAgICB0LkMgPSA3MjI7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDY2NztcbiAgICB0LkYgPSA2MTE7XG4gICAgdC5HID0gNzc4O1xuICAgIHQuSCA9IDcyMjtcbiAgICB0LkkgPSAyNzg7XG4gICAgdC5KID0gNTAwO1xuICAgIHQuSyA9IDY2NztcbiAgICB0LkwgPSA1NTY7XG4gICAgdC5NID0gODMzO1xuICAgIHQuTiA9IDcyMjtcbiAgICB0Lk8gPSA3Nzg7XG4gICAgdC5QID0gNjY3O1xuICAgIHQuUSA9IDc3ODtcbiAgICB0LlIgPSA3MjI7XG4gICAgdC5TID0gNjY3O1xuICAgIHQuVCA9IDYxMTtcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNjY3O1xuICAgIHQuVyA9IDk0NDtcbiAgICB0LlggPSA2Njc7XG4gICAgdC5ZID0gNjY3O1xuICAgIHQuWiA9IDYxMTtcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMjc4O1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMjc4O1xuICAgIHQuYXNjaWljaXJjdW0gPSA0Njk7XG4gICAgdC51bmRlcnNjb3JlID0gNTU2O1xuICAgIHQucXVvdGVsZWZ0ID0gMjIyO1xuICAgIHQuYSA9IDU1NjtcbiAgICB0LmIgPSA1NTY7XG4gICAgdC5jID0gNTAwO1xuICAgIHQuZCA9IDU1NjtcbiAgICB0LmUgPSA1NTY7XG4gICAgdC5mID0gMjc4O1xuICAgIHQuZyA9IDU1NjtcbiAgICB0LmggPSA1NTY7XG4gICAgdC5pID0gMjIyO1xuICAgIHQuaiA9IDIyMjtcbiAgICB0LmsgPSA1MDA7XG4gICAgdC5sID0gMjIyO1xuICAgIHQubSA9IDgzMztcbiAgICB0Lm4gPSA1NTY7XG4gICAgdC5vID0gNTU2O1xuICAgIHQucCA9IDU1NjtcbiAgICB0LnEgPSA1NTY7XG4gICAgdC5yID0gMzMzO1xuICAgIHQucyA9IDUwMDtcbiAgICB0LnQgPSAyNzg7XG4gICAgdC51ID0gNTU2O1xuICAgIHQudiA9IDUwMDtcbiAgICB0LncgPSA3MjI7XG4gICAgdC54ID0gNTAwO1xuICAgIHQueSA9IDUwMDtcbiAgICB0LnogPSA1MDA7XG4gICAgdC5icmFjZWxlZnQgPSAzMzQ7XG4gICAgdC5iYXIgPSAyNjA7XG4gICAgdC5icmFjZXJpZ2h0ID0gMzM0O1xuICAgIHQuYXNjaWl0aWxkZSA9IDU4NDtcbiAgICB0LmV4Y2xhbWRvd24gPSAzMzM7XG4gICAgdC5jZW50ID0gNTU2O1xuICAgIHQuc3RlcmxpbmcgPSA1NTY7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDU1NjtcbiAgICB0LmZsb3JpbiA9IDU1NjtcbiAgICB0LnNlY3Rpb24gPSA1NTY7XG4gICAgdC5jdXJyZW5jeSA9IDU1NjtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMTkxO1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDU1NjtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTAwO1xuICAgIHQuZmwgPSA1MDA7XG4gICAgdC5lbmRhc2ggPSA1NTY7XG4gICAgdC5kYWdnZXIgPSA1NTY7XG4gICAgdC5kYWdnZXJkYmwgPSA1NTY7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI3ODtcbiAgICB0LnBhcmFncmFwaCA9IDUzNztcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMjIyO1xuICAgIHQucXVvdGVkYmxiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDMzMztcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTU2O1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNjExO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gMTAwMDtcbiAgICB0LkFFID0gMTAwMDtcbiAgICB0Lm9yZGZlbWluaW5lID0gMzcwO1xuICAgIHQuTHNsYXNoID0gNTU2O1xuICAgIHQuT3NsYXNoID0gNzc4O1xuICAgIHQuT0UgPSAxMDAwO1xuICAgIHQub3JkbWFzY3VsaW5lID0gMzY1O1xuICAgIHQuYWUgPSA4ODk7XG4gICAgdC5kb3RsZXNzaSA9IDI3ODtcbiAgICB0LmxzbGFzaCA9IDIyMjtcbiAgICB0Lm9zbGFzaCA9IDYxMTtcbiAgICB0Lm9lID0gOTQ0O1xuICAgIHQuZ2VybWFuZGJscyA9IDYxMTtcbiAgICB0LklkaWVyZXNpcyA9IDI3ODtcbiAgICB0LmVhY3V0ZSA9IDU1NjtcbiAgICB0LmFicmV2ZSA9IDU1NjtcbiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1NTY7XG4gICAgdC5lY2Fyb24gPSA1NTY7XG4gICAgdC5ZZGllcmVzaXMgPSA2Njc7XG4gICAgdC5kaXZpZGUgPSA1ODQ7XG4gICAgdC5ZYWN1dGUgPSA2Njc7XG4gICAgdC5BY2lyY3VtZmxleCA9IDY2NztcbiAgICB0LmFhY3V0ZSA9IDU1NjtcbiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQueWFjdXRlID0gNTAwO1xuICAgIHQuc2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5VcmluZyA9IDcyMjtcbiAgICB0LlVkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmFvZ29uZWsgPSA1NTY7XG4gICAgdC5VYWN1dGUgPSA3MjI7XG4gICAgdC51b2dvbmVrID0gNTU2O1xuICAgIHQuRWRpZXJlc2lzID0gNjY3O1xuICAgIHQuRGNyb2F0ID0gNzIyO1xuICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7XG4gICAgdC5jb3B5cmlnaHQgPSA3Mzc7XG4gICAgdC5FbWFjcm9uID0gNjY3O1xuICAgIHQuY2Nhcm9uID0gNTAwO1xuICAgIHQuYXJpbmcgPSA1NTY7XG4gICAgdC5OY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5sYWN1dGUgPSAyMjI7XG4gICAgdC5hZ3JhdmUgPSA1NTY7XG4gICAgdC5UY29tbWFhY2NlbnQgPSA2MTE7XG4gICAgdC5DYWN1dGUgPSA3MjI7XG4gICAgdC5hdGlsZGUgPSA1NTY7XG4gICAgdC5FZG90YWNjZW50ID0gNjY3O1xuICAgIHQuc2Nhcm9uID0gNTAwO1xuICAgIHQuc2NlZGlsbGEgPSA1MDA7XG4gICAgdC5pYWN1dGUgPSAyNzg7XG4gICAgdC5sb3plbmdlID0gNDcxO1xuICAgIHQuUmNhcm9uID0gNzIyO1xuICAgIHQuR2NvbW1hYWNjZW50ID0gNzc4O1xuICAgIHQudWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5hY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LkFtYWNyb24gPSA2Njc7XG4gICAgdC5yY2Fyb24gPSAzMzM7XG4gICAgdC5jY2VkaWxsYSA9IDUwMDtcbiAgICB0Llpkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5UaG9ybiA9IDY2NztcbiAgICB0Lk9tYWNyb24gPSA3Nzg7XG4gICAgdC5SYWN1dGUgPSA3MjI7XG4gICAgdC5TYWN1dGUgPSA2Njc7XG4gICAgdC5kY2Fyb24gPSA2NDM7XG4gICAgdC5VbWFjcm9uID0gNzIyO1xuICAgIHQudXJpbmcgPSA1NTY7XG4gICAgdC50aHJlZXN1cGVyaW9yID0gMzMzO1xuICAgIHQuT2dyYXZlID0gNzc4O1xuICAgIHQuQWdyYXZlID0gNjY3O1xuICAgIHQuQWJyZXZlID0gNjY3O1xuICAgIHQubXVsdGlwbHkgPSA1ODQ7XG4gICAgdC51YWN1dGUgPSA1NTY7XG4gICAgdC5UY2Fyb24gPSA2MTE7XG4gICAgdC5wYXJ0aWFsZGlmZiA9IDQ3NjtcbiAgICB0LnlkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lk5hY3V0ZSA9IDcyMjtcbiAgICB0LmljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQuRWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hZGllcmVzaXMgPSA1NTY7XG4gICAgdC5lZGllcmVzaXMgPSA1NTY7XG4gICAgdC5jYWN1dGUgPSA1MDA7XG4gICAgdC5uYWN1dGUgPSA1NTY7XG4gICAgdC51bWFjcm9uID0gNTU2O1xuICAgIHQuTmNhcm9uID0gNzIyO1xuICAgIHQuSWFjdXRlID0gMjc4O1xuICAgIHQucGx1c21pbnVzID0gNTg0O1xuICAgIHQuYnJva2VuYmFyID0gMjYwO1xuICAgIHQucmVnaXN0ZXJlZCA9IDczNztcbiAgICB0LkdicmV2ZSA9IDc3ODtcbiAgICB0Lklkb3RhY2NlbnQgPSAyNzg7XG4gICAgdC5zdW1tYXRpb24gPSA2MDA7XG4gICAgdC5FZ3JhdmUgPSA2Njc7XG4gICAgdC5yYWN1dGUgPSAzMzM7XG4gICAgdC5vbWFjcm9uID0gNTU2O1xuICAgIHQuWmFjdXRlID0gNjExO1xuICAgIHQuWmNhcm9uID0gNjExO1xuICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5O1xuICAgIHQuRXRoID0gNzIyO1xuICAgIHQuQ2NlZGlsbGEgPSA3MjI7XG4gICAgdC5sY29tbWFhY2NlbnQgPSAyMjI7XG4gICAgdC50Y2Fyb24gPSAzMTc7XG4gICAgdC5lb2dvbmVrID0gNTU2O1xuICAgIHQuVW9nb25layA9IDcyMjtcbiAgICB0LkFhY3V0ZSA9IDY2NztcbiAgICB0LkFkaWVyZXNpcyA9IDY2NztcbiAgICB0LmVncmF2ZSA9IDU1NjtcbiAgICB0LnphY3V0ZSA9IDUwMDtcbiAgICB0LmlvZ29uZWsgPSAyMjI7XG4gICAgdC5PYWN1dGUgPSA3Nzg7XG4gICAgdC5vYWN1dGUgPSA1NTY7XG4gICAgdC5hbWFjcm9uID0gNTU2O1xuICAgIHQuc2FjdXRlID0gNTAwO1xuICAgIHQuaWRpZXJlc2lzID0gMjc4O1xuICAgIHQuT2NpcmN1bWZsZXggPSA3Nzg7XG4gICAgdC5VZ3JhdmUgPSA3MjI7XG4gICAgdC5EZWx0YSA9IDYxMjtcbiAgICB0LnRob3JuID0gNTU2O1xuICAgIHQudHdvc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5PZGllcmVzaXMgPSA3Nzg7XG4gICAgdC5tdSA9IDU1NjtcbiAgICB0LmlncmF2ZSA9IDI3ODtcbiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA1NTY7XG4gICAgdC5Fb2dvbmVrID0gNjY3O1xuICAgIHQuZGNyb2F0ID0gNTU2O1xuICAgIHQudGhyZWVxdWFydGVycyA9IDgzNDtcbiAgICB0LlNjZWRpbGxhID0gNjY3O1xuICAgIHQubGNhcm9uID0gMjk5O1xuICAgIHQuS2NvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuTGFjdXRlID0gNTU2O1xuICAgIHQudHJhZGVtYXJrID0gMTAwMDtcbiAgICB0LmVkb3RhY2NlbnQgPSA1NTY7XG4gICAgdC5JZ3JhdmUgPSAyNzg7XG4gICAgdC5JbWFjcm9uID0gMjc4O1xuICAgIHQuTGNhcm9uID0gNTU2O1xuICAgIHQub25laGFsZiA9IDgzNDtcbiAgICB0Lmxlc3NlcXVhbCA9IDU0OTtcbiAgICB0Lm9jaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQubnRpbGRlID0gNTU2O1xuICAgIHQuVWh1bmdhcnVtbGF1dCA9IDcyMjtcbiAgICB0LkVhY3V0ZSA9IDY2NztcbiAgICB0LmVtYWNyb24gPSA1NTY7XG4gICAgdC5nYnJldmUgPSA1NTY7XG4gICAgdC5vbmVxdWFydGVyID0gODM0O1xuICAgIHQuU2Nhcm9uID0gNjY3O1xuICAgIHQuU2NvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuT2h1bmdhcnVtbGF1dCA9IDc3ODtcbiAgICB0LmRlZ3JlZSA9IDQwMDtcbiAgICB0Lm9ncmF2ZSA9IDU1NjtcbiAgICB0LkNjYXJvbiA9IDcyMjtcbiAgICB0LnVncmF2ZSA9IDU1NjtcbiAgICB0LnJhZGljYWwgPSA0NTM7XG4gICAgdC5EY2Fyb24gPSA3MjI7XG4gICAgdC5yY29tbWFhY2NlbnQgPSAzMzM7XG4gICAgdC5OdGlsZGUgPSA3MjI7XG4gICAgdC5vdGlsZGUgPSA1NTY7XG4gICAgdC5SY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5BdGlsZGUgPSA2Njc7XG4gICAgdC5Bb2dvbmVrID0gNjY3O1xuICAgIHQuQXJpbmcgPSA2Njc7XG4gICAgdC5PdGlsZGUgPSA3Nzg7XG4gICAgdC56ZG90YWNjZW50ID0gNTAwO1xuICAgIHQuRWNhcm9uID0gNjY3O1xuICAgIHQuSW9nb25layA9IDI3ODtcbiAgICB0Lmtjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0Lm1pbnVzID0gNTg0O1xuICAgIHQuSWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5uY2Fyb24gPSA1NTY7XG4gICAgdC50Y29tbWFhY2NlbnQgPSAyNzg7XG4gICAgdC5sb2dpY2Fsbm90ID0gNTg0O1xuICAgIHQub2RpZXJlc2lzID0gNTU2O1xuICAgIHQudWRpZXJlc2lzID0gNTU2O1xuICAgIHQubm90ZXF1YWwgPSA1NDk7XG4gICAgdC5nY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5ldGggPSA1NTY7XG4gICAgdC56Y2Fyb24gPSA1MDA7XG4gICAgdC5uY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5vbmVzdXBlcmlvciA9IDMzMztcbiAgICB0LmltYWNyb24gPSAyNzg7XG4gICAgdC5FdXJvID0gNTU2O1xuICB9KTtcbiAgdC5TeW1ib2wgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNTA7XG4gICAgdC5leGNsYW0gPSAzMzM7XG4gICAgdC51bml2ZXJzYWwgPSA3MTM7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZXhpc3RlbnRpYWwgPSA1NDk7XG4gICAgdC5wZXJjZW50ID0gODMzO1xuICAgIHQuYW1wZXJzYW5kID0gNzc4O1xuICAgIHQuc3VjaHRoYXQgPSA0Mzk7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2ttYXRoID0gNTAwO1xuICAgIHQucGx1cyA9IDU0OTtcbiAgICB0LmNvbW1hID0gMjUwO1xuICAgIHQubWludXMgPSA1NDk7XG4gICAgdC5wZXJpb2QgPSAyNTA7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1MDA7XG4gICAgdC5vbmUgPSA1MDA7XG4gICAgdC50d28gPSA1MDA7XG4gICAgdC50aHJlZSA9IDUwMDtcbiAgICB0LmZvdXIgPSA1MDA7XG4gICAgdC5maXZlID0gNTAwO1xuICAgIHQuc2l4ID0gNTAwO1xuICAgIHQuc2V2ZW4gPSA1MDA7XG4gICAgdC5laWdodCA9IDUwMDtcbiAgICB0Lm5pbmUgPSA1MDA7XG4gICAgdC5jb2xvbiA9IDI3ODtcbiAgICB0LnNlbWljb2xvbiA9IDI3ODtcbiAgICB0Lmxlc3MgPSA1NDk7XG4gICAgdC5lcXVhbCA9IDU0OTtcbiAgICB0LmdyZWF0ZXIgPSA1NDk7XG4gICAgdC5xdWVzdGlvbiA9IDQ0NDtcbiAgICB0LmNvbmdydWVudCA9IDU0OTtcbiAgICB0LkFscGhhID0gNzIyO1xuICAgIHQuQmV0YSA9IDY2NztcbiAgICB0LkNoaSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQuRXBzaWxvbiA9IDYxMTtcbiAgICB0LlBoaSA9IDc2MztcbiAgICB0LkdhbW1hID0gNjAzO1xuICAgIHQuRXRhID0gNzIyO1xuICAgIHQuSW90YSA9IDMzMztcbiAgICB0LnRoZXRhMSA9IDYzMTtcbiAgICB0LkthcHBhID0gNzIyO1xuICAgIHQuTGFtYmRhID0gNjg2O1xuICAgIHQuTXUgPSA4ODk7XG4gICAgdC5OdSA9IDcyMjtcbiAgICB0Lk9taWNyb24gPSA3MjI7XG4gICAgdC5QaSA9IDc2ODtcbiAgICB0LlRoZXRhID0gNzQxO1xuICAgIHQuUmhvID0gNTU2O1xuICAgIHQuU2lnbWEgPSA1OTI7XG4gICAgdC5UYXUgPSA2MTE7XG4gICAgdC5VcHNpbG9uID0gNjkwO1xuICAgIHQuc2lnbWExID0gNDM5O1xuICAgIHQuT21lZ2EgPSA3Njg7XG4gICAgdC5YaSA9IDY0NTtcbiAgICB0LlBzaSA9IDc5NTtcbiAgICB0LlpldGEgPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LnRoZXJlZm9yZSA9IDg2MztcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LnBlcnBlbmRpY3VsYXIgPSA2NTg7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucmFkaWNhbGV4ID0gNTAwO1xuICAgIHQuYWxwaGEgPSA2MzE7XG4gICAgdC5iZXRhID0gNTQ5O1xuICAgIHQuY2hpID0gNTQ5O1xuICAgIHQuZGVsdGEgPSA0OTQ7XG4gICAgdC5lcHNpbG9uID0gNDM5O1xuICAgIHQucGhpID0gNTIxO1xuICAgIHQuZ2FtbWEgPSA0MTE7XG4gICAgdC5ldGEgPSA2MDM7XG4gICAgdC5pb3RhID0gMzI5O1xuICAgIHQucGhpMSA9IDYwMztcbiAgICB0LmthcHBhID0gNTQ5O1xuICAgIHQubGFtYmRhID0gNTQ5O1xuICAgIHQubXUgPSA1NzY7XG4gICAgdC5udSA9IDUyMTtcbiAgICB0Lm9taWNyb24gPSA1NDk7XG4gICAgdC5waSA9IDU0OTtcbiAgICB0LnRoZXRhID0gNTIxO1xuICAgIHQucmhvID0gNTQ5O1xuICAgIHQuc2lnbWEgPSA2MDM7XG4gICAgdC50YXUgPSA0Mzk7XG4gICAgdC51cHNpbG9uID0gNTc2O1xuICAgIHQub21lZ2ExID0gNzEzO1xuICAgIHQub21lZ2EgPSA2ODY7XG4gICAgdC54aSA9IDQ5MztcbiAgICB0LnBzaSA9IDY4NjtcbiAgICB0LnpldGEgPSA0OTQ7XG4gICAgdC5icmFjZWxlZnQgPSA0ODA7XG4gICAgdC5iYXIgPSAyMDA7XG4gICAgdC5icmFjZXJpZ2h0ID0gNDgwO1xuICAgIHQuc2ltaWxhciA9IDU0OTtcbiAgICB0LkV1cm8gPSA3NTA7XG4gICAgdC5VcHNpbG9uMSA9IDYyMDtcbiAgICB0Lm1pbnV0ZSA9IDI0NztcbiAgICB0Lmxlc3NlcXVhbCA9IDU0OTtcbiAgICB0LmZyYWN0aW9uID0gMTY3O1xuICAgIHQuaW5maW5pdHkgPSA3MTM7XG4gICAgdC5mbG9yaW4gPSA1MDA7XG4gICAgdC5jbHViID0gNzUzO1xuICAgIHQuZGlhbW9uZCA9IDc1MztcbiAgICB0LmhlYXJ0ID0gNzUzO1xuICAgIHQuc3BhZGUgPSA3NTM7XG4gICAgdC5hcnJvd2JvdGggPSAxMDQyO1xuICAgIHQuYXJyb3dsZWZ0ID0gOTg3O1xuICAgIHQuYXJyb3d1cCA9IDYwMztcbiAgICB0LmFycm93cmlnaHQgPSA5ODc7XG4gICAgdC5hcnJvd2Rvd24gPSA2MDM7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5wbHVzbWludXMgPSA1NDk7XG4gICAgdC5zZWNvbmQgPSA0MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5tdWx0aXBseSA9IDU0OTtcbiAgICB0LnByb3BvcnRpb25hbCA9IDcxMztcbiAgICB0LnBhcnRpYWxkaWZmID0gNDk0O1xuICAgIHQuYnVsbGV0ID0gNDYwO1xuICAgIHQuZGl2aWRlID0gNTQ5O1xuICAgIHQubm90ZXF1YWwgPSA1NDk7XG4gICAgdC5lcXVpdmFsZW5jZSA9IDU0OTtcbiAgICB0LmFwcHJveGVxdWFsID0gNTQ5O1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQuYXJyb3d2ZXJ0ZXggPSA2MDM7XG4gICAgdC5hcnJvd2hvcml6ZXggPSAxMDAwO1xuICAgIHQuY2FycmlhZ2VyZXR1cm4gPSA2NTg7XG4gICAgdC5hbGVwaCA9IDgyMztcbiAgICB0LklmcmFrdHVyID0gNjg2O1xuICAgIHQuUmZyYWt0dXIgPSA3OTU7XG4gICAgdC53ZWllcnN0cmFzcyA9IDk4NztcbiAgICB0LmNpcmNsZW11bHRpcGx5ID0gNzY4O1xuICAgIHQuY2lyY2xlcGx1cyA9IDc2ODtcbiAgICB0LmVtcHR5c2V0ID0gODIzO1xuICAgIHQuaW50ZXJzZWN0aW9uID0gNzY4O1xuICAgIHQudW5pb24gPSA3Njg7XG4gICAgdC5wcm9wZXJzdXBlcnNldCA9IDcxMztcbiAgICB0LnJlZmxleHN1cGVyc2V0ID0gNzEzO1xuICAgIHQubm90c3Vic2V0ID0gNzEzO1xuICAgIHQucHJvcGVyc3Vic2V0ID0gNzEzO1xuICAgIHQucmVmbGV4c3Vic2V0ID0gNzEzO1xuICAgIHQuZWxlbWVudCA9IDcxMztcbiAgICB0Lm5vdGVsZW1lbnQgPSA3MTM7XG4gICAgdC5hbmdsZSA9IDc2ODtcbiAgICB0LmdyYWRpZW50ID0gNzEzO1xuICAgIHQucmVnaXN0ZXJzZXJpZiA9IDc5MDtcbiAgICB0LmNvcHlyaWdodHNlcmlmID0gNzkwO1xuICAgIHQudHJhZGVtYXJrc2VyaWYgPSA4OTA7XG4gICAgdC5wcm9kdWN0ID0gODIzO1xuICAgIHQucmFkaWNhbCA9IDU0OTtcbiAgICB0LmRvdG1hdGggPSAyNTA7XG4gICAgdC5sb2dpY2Fsbm90ID0gNzEzO1xuICAgIHQubG9naWNhbGFuZCA9IDYwMztcbiAgICB0LmxvZ2ljYWxvciA9IDYwMztcbiAgICB0LmFycm93ZGJsYm90aCA9IDEwNDI7XG4gICAgdC5hcnJvd2RibGxlZnQgPSA5ODc7XG4gICAgdC5hcnJvd2RibHVwID0gNjAzO1xuICAgIHQuYXJyb3dkYmxyaWdodCA9IDk4NztcbiAgICB0LmFycm93ZGJsZG93biA9IDYwMztcbiAgICB0LmxvemVuZ2UgPSA0OTQ7XG4gICAgdC5hbmdsZWxlZnQgPSAzMjk7XG4gICAgdC5yZWdpc3RlcnNhbnMgPSA3OTA7XG4gICAgdC5jb3B5cmlnaHRzYW5zID0gNzkwO1xuICAgIHQudHJhZGVtYXJrc2FucyA9IDc4NjtcbiAgICB0LnN1bW1hdGlvbiA9IDcxMztcbiAgICB0LnBhcmVubGVmdHRwID0gMzg0O1xuICAgIHQucGFyZW5sZWZ0ZXggPSAzODQ7XG4gICAgdC5wYXJlbmxlZnRidCA9IDM4NDtcbiAgICB0LmJyYWNrZXRsZWZ0dHAgPSAzODQ7XG4gICAgdC5icmFja2V0bGVmdGV4ID0gMzg0O1xuICAgIHQuYnJhY2tldGxlZnRidCA9IDM4NDtcbiAgICB0LmJyYWNlbGVmdHRwID0gNDk0O1xuICAgIHQuYnJhY2VsZWZ0bWlkID0gNDk0O1xuICAgIHQuYnJhY2VsZWZ0YnQgPSA0OTQ7XG4gICAgdC5icmFjZWV4ID0gNDk0O1xuICAgIHQuYW5nbGVyaWdodCA9IDMyOTtcbiAgICB0LmludGVncmFsID0gMjc0O1xuICAgIHQuaW50ZWdyYWx0cCA9IDY4NjtcbiAgICB0LmludGVncmFsZXggPSA2ODY7XG4gICAgdC5pbnRlZ3JhbGJ0ID0gNjg2O1xuICAgIHQucGFyZW5yaWdodHRwID0gMzg0O1xuICAgIHQucGFyZW5yaWdodGV4ID0gMzg0O1xuICAgIHQucGFyZW5yaWdodGJ0ID0gMzg0O1xuICAgIHQuYnJhY2tldHJpZ2h0dHAgPSAzODQ7XG4gICAgdC5icmFja2V0cmlnaHRleCA9IDM4NDtcbiAgICB0LmJyYWNrZXRyaWdodGJ0ID0gMzg0O1xuICAgIHQuYnJhY2VyaWdodHRwID0gNDk0O1xuICAgIHQuYnJhY2VyaWdodG1pZCA9IDQ5NDtcbiAgICB0LmJyYWNlcmlnaHRidCA9IDQ5NDtcbiAgICB0LmFwcGxlID0gNzkwO1xuICB9KTtcbiAgdFtcIlRpbWVzLVJvbWFuXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjUwO1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQucXVvdGVkYmwgPSA0MDg7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZG9sbGFyID0gNTAwO1xuICAgIHQucGVyY2VudCA9IDgzMztcbiAgICB0LmFtcGVyc2FuZCA9IDc3ODtcbiAgICB0LnF1b3RlcmlnaHQgPSAzMzM7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2sgPSA1MDA7XG4gICAgdC5wbHVzID0gNTY0O1xuICAgIHQuY29tbWEgPSAyNTA7XG4gICAgdC5oeXBoZW4gPSAzMzM7XG4gICAgdC5wZXJpb2QgPSAyNTA7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1MDA7XG4gICAgdC5vbmUgPSA1MDA7XG4gICAgdC50d28gPSA1MDA7XG4gICAgdC50aHJlZSA9IDUwMDtcbiAgICB0LmZvdXIgPSA1MDA7XG4gICAgdC5maXZlID0gNTAwO1xuICAgIHQuc2l4ID0gNTAwO1xuICAgIHQuc2V2ZW4gPSA1MDA7XG4gICAgdC5laWdodCA9IDUwMDtcbiAgICB0Lm5pbmUgPSA1MDA7XG4gICAgdC5jb2xvbiA9IDI3ODtcbiAgICB0LnNlbWljb2xvbiA9IDI3ODtcbiAgICB0Lmxlc3MgPSA1NjQ7XG4gICAgdC5lcXVhbCA9IDU2NDtcbiAgICB0LmdyZWF0ZXIgPSA1NjQ7XG4gICAgdC5xdWVzdGlvbiA9IDQ0NDtcbiAgICB0LmF0ID0gOTIxO1xuICAgIHQuQSA9IDcyMjtcbiAgICB0LkIgPSA2Njc7XG4gICAgdC5DID0gNjY3O1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2MTE7XG4gICAgdC5GID0gNTU2O1xuICAgIHQuRyA9IDcyMjtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMzMzO1xuICAgIHQuSiA9IDM4OTtcbiAgICB0LksgPSA3MjI7XG4gICAgdC5MID0gNjExO1xuICAgIHQuTSA9IDg4OTtcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzIyO1xuICAgIHQuUCA9IDU1NjtcbiAgICB0LlEgPSA3MjI7XG4gICAgdC5SID0gNjY3O1xuICAgIHQuUyA9IDU1NjtcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDcyMjtcbiAgICB0LlcgPSA5NDQ7XG4gICAgdC5YID0gNzIyO1xuICAgIHQuWSA9IDcyMjtcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LmFzY2lpY2lyY3VtID0gNDY5O1xuICAgIHQudW5kZXJzY29yZSA9IDUwMDtcbiAgICB0LnF1b3RlbGVmdCA9IDMzMztcbiAgICB0LmEgPSA0NDQ7XG4gICAgdC5iID0gNTAwO1xuICAgIHQuYyA9IDQ0NDtcbiAgICB0LmQgPSA1MDA7XG4gICAgdC5lID0gNDQ0O1xuICAgIHQuZiA9IDMzMztcbiAgICB0LmcgPSA1MDA7XG4gICAgdC5oID0gNTAwO1xuICAgIHQuaSA9IDI3ODtcbiAgICB0LmogPSAyNzg7XG4gICAgdC5rID0gNTAwO1xuICAgIHQubCA9IDI3ODtcbiAgICB0Lm0gPSA3Nzg7XG4gICAgdC5uID0gNTAwO1xuICAgIHQubyA9IDUwMDtcbiAgICB0LnAgPSA1MDA7XG4gICAgdC5xID0gNTAwO1xuICAgIHQuciA9IDMzMztcbiAgICB0LnMgPSAzODk7XG4gICAgdC50ID0gMjc4O1xuICAgIHQudSA9IDUwMDtcbiAgICB0LnYgPSA1MDA7XG4gICAgdC53ID0gNzIyO1xuICAgIHQueCA9IDUwMDtcbiAgICB0LnkgPSA1MDA7XG4gICAgdC56ID0gNDQ0O1xuICAgIHQuYnJhY2VsZWZ0ID0gNDgwO1xuICAgIHQuYmFyID0gMjAwO1xuICAgIHQuYnJhY2VyaWdodCA9IDQ4MDtcbiAgICB0LmFzY2lpdGlsZGUgPSA1NDE7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDUwMDtcbiAgICB0LnN0ZXJsaW5nID0gNTAwO1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1MDA7XG4gICAgdC5mbG9yaW4gPSA1MDA7XG4gICAgdC5zZWN0aW9uID0gNTAwO1xuICAgIHQuY3VycmVuY3kgPSA1MDA7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDE4MDtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDQ0NDtcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1MDA7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDU1NjtcbiAgICB0LmZsID0gNTU2O1xuICAgIHQuZW5kYXNoID0gNTAwO1xuICAgIHQuZGFnZ2VyID0gNTAwO1xuICAgIHQuZGFnZ2VyZGJsID0gNTAwO1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNTA7XG4gICAgdC5wYXJhZ3JhcGggPSA0NTM7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDMzMztcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDQ0NDtcbiAgICB0LnF1b3RlZGJscmlnaHQgPSA0NDQ7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDUwMDtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDQ0NDtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDg4OTtcbiAgICB0Lm9yZGZlbWluaW5lID0gMjc2O1xuICAgIHQuTHNsYXNoID0gNjExO1xuICAgIHQuT3NsYXNoID0gNzIyO1xuICAgIHQuT0UgPSA4ODk7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzMTA7XG4gICAgdC5hZSA9IDY2NztcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNTAwO1xuICAgIHQub2UgPSA3MjI7XG4gICAgdC5nZXJtYW5kYmxzID0gNTAwO1xuICAgIHQuSWRpZXJlc2lzID0gMzMzO1xuICAgIHQuZWFjdXRlID0gNDQ0O1xuICAgIHQuYWJyZXZlID0gNDQ0O1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LmVjYXJvbiA9IDQ0NDtcbiAgICB0LllkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmRpdmlkZSA9IDU2NDtcbiAgICB0LllhY3V0ZSA9IDcyMjtcbiAgICB0LkFjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQuYWFjdXRlID0gNDQ0O1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA1MDA7XG4gICAgdC5zY29tbWFhY2NlbnQgPSAzODk7XG4gICAgdC5lY2lyY3VtZmxleCA9IDQ0NDtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDQ0NDtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA1MDA7XG4gICAgdC5FZGllcmVzaXMgPSA2MTE7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDc2MDtcbiAgICB0LkVtYWNyb24gPSA2MTE7XG4gICAgdC5jY2Fyb24gPSA0NDQ7XG4gICAgdC5hcmluZyA9IDQ0NDtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDQ0NDtcbiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkNhY3V0ZSA9IDY2NztcbiAgICB0LmF0aWxkZSA9IDQ0NDtcbiAgICB0LkVkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5zY2Fyb24gPSAzODk7XG4gICAgdC5zY2VkaWxsYSA9IDM4OTtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0NzE7XG4gICAgdC5SY2Fyb24gPSA2Njc7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC51Y2lyY3VtZmxleCA9IDUwMDtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNDQ0O1xuICAgIHQuQW1hY3JvbiA9IDcyMjtcbiAgICB0LnJjYXJvbiA9IDMzMztcbiAgICB0LmNjZWRpbGxhID0gNDQ0O1xuICAgIHQuWmRvdGFjY2VudCA9IDYxMTtcbiAgICB0LlRob3JuID0gNTU2O1xuICAgIHQuT21hY3JvbiA9IDcyMjtcbiAgICB0LlJhY3V0ZSA9IDY2NztcbiAgICB0LlNhY3V0ZSA9IDU1NjtcbiAgICB0LmRjYXJvbiA9IDU4ODtcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDUwMDtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZ3JhdmUgPSA3MjI7XG4gICAgdC5BZ3JhdmUgPSA3MjI7XG4gICAgdC5BYnJldmUgPSA3MjI7XG4gICAgdC5tdWx0aXBseSA9IDU2NDtcbiAgICB0LnVhY3V0ZSA9IDUwMDtcbiAgICB0LlRjYXJvbiA9IDYxMTtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDc2O1xuICAgIHQueWRpZXJlc2lzID0gNTAwO1xuICAgIHQuTmFjdXRlID0gNzIyO1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFkaWVyZXNpcyA9IDQ0NDtcbiAgICB0LmVkaWVyZXNpcyA9IDQ0NDtcbiAgICB0LmNhY3V0ZSA9IDQ0NDtcbiAgICB0Lm5hY3V0ZSA9IDUwMDtcbiAgICB0LnVtYWNyb24gPSA1MDA7XG4gICAgdC5OY2Fyb24gPSA3MjI7XG4gICAgdC5JYWN1dGUgPSAzMzM7XG4gICAgdC5wbHVzbWludXMgPSA1NjQ7XG4gICAgdC5icm9rZW5iYXIgPSAyMDA7XG4gICAgdC5yZWdpc3RlcmVkID0gNzYwO1xuICAgIHQuR2JyZXZlID0gNzIyO1xuICAgIHQuSWRvdGFjY2VudCA9IDMzMztcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDYxMTtcbiAgICB0LnJhY3V0ZSA9IDMzMztcbiAgICB0Lm9tYWNyb24gPSA1MDA7XG4gICAgdC5aYWN1dGUgPSA2MTE7XG4gICAgdC5aY2Fyb24gPSA2MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDY2NztcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDMyNjtcbiAgICB0LmVvZ29uZWsgPSA0NDQ7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNzIyO1xuICAgIHQuQWRpZXJlc2lzID0gNzIyO1xuICAgIHQuZWdyYXZlID0gNDQ0O1xuICAgIHQuemFjdXRlID0gNDQ0O1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDcyMjtcbiAgICB0Lm9hY3V0ZSA9IDUwMDtcbiAgICB0LmFtYWNyb24gPSA0NDQ7XG4gICAgdC5zYWN1dGUgPSAzODk7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA1MDA7XG4gICAgdC50d29zdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9kaWVyZXNpcyA9IDcyMjtcbiAgICB0Lm11ID0gNTAwO1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LkVvZ29uZWsgPSA2MTE7XG4gICAgdC5kY3JvYXQgPSA1MDA7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gNzUwO1xuICAgIHQuU2NlZGlsbGEgPSA1NTY7XG4gICAgdC5sY2Fyb24gPSAzNDQ7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MYWN1dGUgPSA2MTE7XG4gICAgdC50cmFkZW1hcmsgPSA5ODA7XG4gICAgdC5lZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuSWdyYXZlID0gMzMzO1xuICAgIHQuSW1hY3JvbiA9IDMzMztcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA3NTA7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0Lm50aWxkZSA9IDUwMDtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2MTE7XG4gICAgdC5lbWFjcm9uID0gNDQ0O1xuICAgIHQuZ2JyZXZlID0gNTAwO1xuICAgIHQub25lcXVhcnRlciA9IDc1MDtcbiAgICB0LlNjYXJvbiA9IDU1NjtcbiAgICB0LlNjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1MDA7XG4gICAgdC5DY2Fyb24gPSA2Njc7XG4gICAgdC51Z3JhdmUgPSA1MDA7XG4gICAgdC5yYWRpY2FsID0gNDUzO1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTAwO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQXRpbGRlID0gNzIyO1xuICAgIHQuQW9nb25layA9IDcyMjtcbiAgICB0LkFyaW5nID0gNzIyO1xuICAgIHQuT3RpbGRlID0gNzIyO1xuICAgIHQuemRvdGFjY2VudCA9IDQ0NDtcbiAgICB0LkVjYXJvbiA9IDYxMTtcbiAgICB0LklvZ29uZWsgPSAzMzM7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5taW51cyA9IDU2NDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQubmNhcm9uID0gNTAwO1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDU2NDtcbiAgICB0Lm9kaWVyZXNpcyA9IDUwMDtcbiAgICB0LnVkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZXRoID0gNTAwO1xuICAgIHQuemNhcm9uID0gNDQ0O1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQub25lc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDUwMDtcbiAgfSk7XG4gIHRbXCJUaW1lcy1Cb2xkXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjUwO1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQucXVvdGVkYmwgPSA1NTU7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZG9sbGFyID0gNTAwO1xuICAgIHQucGVyY2VudCA9IDEwMDA7XG4gICAgdC5hbXBlcnNhbmQgPSA4MzM7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMzMzO1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gNTAwO1xuICAgIHQucGx1cyA9IDU3MDtcbiAgICB0LmNvbW1hID0gMjUwO1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjUwO1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTAwO1xuICAgIHQub25lID0gNTAwO1xuICAgIHQudHdvID0gNTAwO1xuICAgIHQudGhyZWUgPSA1MDA7XG4gICAgdC5mb3VyID0gNTAwO1xuICAgIHQuZml2ZSA9IDUwMDtcbiAgICB0LnNpeCA9IDUwMDtcbiAgICB0LnNldmVuID0gNTAwO1xuICAgIHQuZWlnaHQgPSA1MDA7XG4gICAgdC5uaW5lID0gNTAwO1xuICAgIHQuY29sb24gPSAzMzM7XG4gICAgdC5zZW1pY29sb24gPSAzMzM7XG4gICAgdC5sZXNzID0gNTcwO1xuICAgIHQuZXF1YWwgPSA1NzA7XG4gICAgdC5ncmVhdGVyID0gNTcwO1xuICAgIHQucXVlc3Rpb24gPSA1MDA7XG4gICAgdC5hdCA9IDkzMDtcbiAgICB0LkEgPSA3MjI7XG4gICAgdC5CID0gNjY3O1xuICAgIHQuQyA9IDcyMjtcbiAgICB0LkQgPSA3MjI7XG4gICAgdC5FID0gNjY3O1xuICAgIHQuRiA9IDYxMTtcbiAgICB0LkcgPSA3Nzg7XG4gICAgdC5IID0gNzc4O1xuICAgIHQuSSA9IDM4OTtcbiAgICB0LkogPSA1MDA7XG4gICAgdC5LID0gNzc4O1xuICAgIHQuTCA9IDY2NztcbiAgICB0Lk0gPSA5NDQ7XG4gICAgdC5OID0gNzIyO1xuICAgIHQuTyA9IDc3ODtcbiAgICB0LlAgPSA2MTE7XG4gICAgdC5RID0gNzc4O1xuICAgIHQuUiA9IDcyMjtcbiAgICB0LlMgPSA1NTY7XG4gICAgdC5UID0gNjY3O1xuICAgIHQuVSA9IDcyMjtcbiAgICB0LlYgPSA3MjI7XG4gICAgdC5XID0gMTAwMDtcbiAgICB0LlggPSA3MjI7XG4gICAgdC5ZID0gNzIyO1xuICAgIHQuWiA9IDY2NztcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMzMzO1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMzMzO1xuICAgIHQuYXNjaWljaXJjdW0gPSA1ODE7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucXVvdGVsZWZ0ID0gMzMzO1xuICAgIHQuYSA9IDUwMDtcbiAgICB0LmIgPSA1NTY7XG4gICAgdC5jID0gNDQ0O1xuICAgIHQuZCA9IDU1NjtcbiAgICB0LmUgPSA0NDQ7XG4gICAgdC5mID0gMzMzO1xuICAgIHQuZyA9IDUwMDtcbiAgICB0LmggPSA1NTY7XG4gICAgdC5pID0gMjc4O1xuICAgIHQuaiA9IDMzMztcbiAgICB0LmsgPSA1NTY7XG4gICAgdC5sID0gMjc4O1xuICAgIHQubSA9IDgzMztcbiAgICB0Lm4gPSA1NTY7XG4gICAgdC5vID0gNTAwO1xuICAgIHQucCA9IDU1NjtcbiAgICB0LnEgPSA1NTY7XG4gICAgdC5yID0gNDQ0O1xuICAgIHQucyA9IDM4OTtcbiAgICB0LnQgPSAzMzM7XG4gICAgdC51ID0gNTU2O1xuICAgIHQudiA9IDUwMDtcbiAgICB0LncgPSA3MjI7XG4gICAgdC54ID0gNTAwO1xuICAgIHQueSA9IDUwMDtcbiAgICB0LnogPSA0NDQ7XG4gICAgdC5icmFjZWxlZnQgPSAzOTQ7XG4gICAgdC5iYXIgPSAyMjA7XG4gICAgdC5icmFjZXJpZ2h0ID0gMzk0O1xuICAgIHQuYXNjaWl0aWxkZSA9IDUyMDtcbiAgICB0LmV4Y2xhbWRvd24gPSAzMzM7XG4gICAgdC5jZW50ID0gNTAwO1xuICAgIHQuc3RlcmxpbmcgPSA1MDA7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDUwMDtcbiAgICB0LmZsb3JpbiA9IDUwMDtcbiAgICB0LnNlY3Rpb24gPSA1MDA7XG4gICAgdC5jdXJyZW5jeSA9IDUwMDtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMjc4O1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTU2O1xuICAgIHQuZmwgPSA1NTY7XG4gICAgdC5lbmRhc2ggPSA1MDA7XG4gICAgdC5kYWdnZXIgPSA1MDA7XG4gICAgdC5kYWdnZXJkYmwgPSA1MDA7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI1MDtcbiAgICB0LnBhcmFncmFwaCA9IDU0MDtcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxiYXNlID0gNTAwO1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTAwO1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNTAwO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gMTAwMDtcbiAgICB0LkFFID0gMTAwMDtcbiAgICB0Lm9yZGZlbWluaW5lID0gMzAwO1xuICAgIHQuTHNsYXNoID0gNjY3O1xuICAgIHQuT3NsYXNoID0gNzc4O1xuICAgIHQuT0UgPSAxMDAwO1xuICAgIHQub3JkbWFzY3VsaW5lID0gMzMwO1xuICAgIHQuYWUgPSA3MjI7XG4gICAgdC5kb3RsZXNzaSA9IDI3ODtcbiAgICB0LmxzbGFzaCA9IDI3ODtcbiAgICB0Lm9zbGFzaCA9IDUwMDtcbiAgICB0Lm9lID0gNzIyO1xuICAgIHQuZ2VybWFuZGJscyA9IDU1NjtcbiAgICB0LklkaWVyZXNpcyA9IDM4OTtcbiAgICB0LmVhY3V0ZSA9IDQ0NDtcbiAgICB0LmFicmV2ZSA9IDUwMDtcbiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1NTY7XG4gICAgdC5lY2Fyb24gPSA0NDQ7XG4gICAgdC5ZZGllcmVzaXMgPSA3MjI7XG4gICAgdC5kaXZpZGUgPSA1NzA7XG4gICAgdC5ZYWN1dGUgPSA3MjI7XG4gICAgdC5BY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LmFhY3V0ZSA9IDUwMDtcbiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQueWFjdXRlID0gNTAwO1xuICAgIHQuc2NvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuZWNpcmN1bWZsZXggPSA0NDQ7XG4gICAgdC5VcmluZyA9IDcyMjtcbiAgICB0LlVkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmFvZ29uZWsgPSA1MDA7XG4gICAgdC5VYWN1dGUgPSA3MjI7XG4gICAgdC51b2dvbmVrID0gNTU2O1xuICAgIHQuRWRpZXJlc2lzID0gNjY3O1xuICAgIHQuRGNyb2F0ID0gNzIyO1xuICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7XG4gICAgdC5jb3B5cmlnaHQgPSA3NDc7XG4gICAgdC5FbWFjcm9uID0gNjY3O1xuICAgIHQuY2Nhcm9uID0gNDQ0O1xuICAgIHQuYXJpbmcgPSA1MDA7XG4gICAgdC5OY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5sYWN1dGUgPSAyNzg7XG4gICAgdC5hZ3JhdmUgPSA1MDA7XG4gICAgdC5UY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5DYWN1dGUgPSA3MjI7XG4gICAgdC5hdGlsZGUgPSA1MDA7XG4gICAgdC5FZG90YWNjZW50ID0gNjY3O1xuICAgIHQuc2Nhcm9uID0gMzg5O1xuICAgIHQuc2NlZGlsbGEgPSAzODk7XG4gICAgdC5pYWN1dGUgPSAyNzg7XG4gICAgdC5sb3plbmdlID0gNDk0O1xuICAgIHQuUmNhcm9uID0gNzIyO1xuICAgIHQuR2NvbW1hYWNjZW50ID0gNzc4O1xuICAgIHQudWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5hY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0LkFtYWNyb24gPSA3MjI7XG4gICAgdC5yY2Fyb24gPSA0NDQ7XG4gICAgdC5jY2VkaWxsYSA9IDQ0NDtcbiAgICB0Llpkb3RhY2NlbnQgPSA2Njc7XG4gICAgdC5UaG9ybiA9IDYxMTtcbiAgICB0Lk9tYWNyb24gPSA3Nzg7XG4gICAgdC5SYWN1dGUgPSA3MjI7XG4gICAgdC5TYWN1dGUgPSA1NTY7XG4gICAgdC5kY2Fyb24gPSA2NzI7XG4gICAgdC5VbWFjcm9uID0gNzIyO1xuICAgIHQudXJpbmcgPSA1NTY7XG4gICAgdC50aHJlZXN1cGVyaW9yID0gMzAwO1xuICAgIHQuT2dyYXZlID0gNzc4O1xuICAgIHQuQWdyYXZlID0gNzIyO1xuICAgIHQuQWJyZXZlID0gNzIyO1xuICAgIHQubXVsdGlwbHkgPSA1NzA7XG4gICAgdC51YWN1dGUgPSA1NTY7XG4gICAgdC5UY2Fyb24gPSA2Njc7XG4gICAgdC5wYXJ0aWFsZGlmZiA9IDQ5NDtcbiAgICB0LnlkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lk5hY3V0ZSA9IDcyMjtcbiAgICB0LmljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQuRWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hZGllcmVzaXMgPSA1MDA7XG4gICAgdC5lZGllcmVzaXMgPSA0NDQ7XG4gICAgdC5jYWN1dGUgPSA0NDQ7XG4gICAgdC5uYWN1dGUgPSA1NTY7XG4gICAgdC51bWFjcm9uID0gNTU2O1xuICAgIHQuTmNhcm9uID0gNzIyO1xuICAgIHQuSWFjdXRlID0gMzg5O1xuICAgIHQucGx1c21pbnVzID0gNTcwO1xuICAgIHQuYnJva2VuYmFyID0gMjIwO1xuICAgIHQucmVnaXN0ZXJlZCA9IDc0NztcbiAgICB0LkdicmV2ZSA9IDc3ODtcbiAgICB0Lklkb3RhY2NlbnQgPSAzODk7XG4gICAgdC5zdW1tYXRpb24gPSA2MDA7XG4gICAgdC5FZ3JhdmUgPSA2Njc7XG4gICAgdC5yYWN1dGUgPSA0NDQ7XG4gICAgdC5vbWFjcm9uID0gNTAwO1xuICAgIHQuWmFjdXRlID0gNjY3O1xuICAgIHQuWmNhcm9uID0gNjY3O1xuICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5O1xuICAgIHQuRXRoID0gNzIyO1xuICAgIHQuQ2NlZGlsbGEgPSA3MjI7XG4gICAgdC5sY29tbWFhY2NlbnQgPSAyNzg7XG4gICAgdC50Y2Fyb24gPSA0MTY7XG4gICAgdC5lb2dvbmVrID0gNDQ0O1xuICAgIHQuVW9nb25layA9IDcyMjtcbiAgICB0LkFhY3V0ZSA9IDcyMjtcbiAgICB0LkFkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmVncmF2ZSA9IDQ0NDtcbiAgICB0LnphY3V0ZSA9IDQ0NDtcbiAgICB0LmlvZ29uZWsgPSAyNzg7XG4gICAgdC5PYWN1dGUgPSA3Nzg7XG4gICAgdC5vYWN1dGUgPSA1MDA7XG4gICAgdC5hbWFjcm9uID0gNTAwO1xuICAgIHQuc2FjdXRlID0gMzg5O1xuICAgIHQuaWRpZXJlc2lzID0gMjc4O1xuICAgIHQuT2NpcmN1bWZsZXggPSA3Nzg7XG4gICAgdC5VZ3JhdmUgPSA3MjI7XG4gICAgdC5EZWx0YSA9IDYxMjtcbiAgICB0LnRob3JuID0gNTU2O1xuICAgIHQudHdvc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZGllcmVzaXMgPSA3Nzg7XG4gICAgdC5tdSA9IDU1NjtcbiAgICB0LmlncmF2ZSA9IDI3ODtcbiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA1MDA7XG4gICAgdC5Fb2dvbmVrID0gNjY3O1xuICAgIHQuZGNyb2F0ID0gNTU2O1xuICAgIHQudGhyZWVxdWFydGVycyA9IDc1MDtcbiAgICB0LlNjZWRpbGxhID0gNTU2O1xuICAgIHQubGNhcm9uID0gMzk0O1xuICAgIHQuS2NvbW1hYWNjZW50ID0gNzc4O1xuICAgIHQuTGFjdXRlID0gNjY3O1xuICAgIHQudHJhZGVtYXJrID0gMTAwMDtcbiAgICB0LmVkb3RhY2NlbnQgPSA0NDQ7XG4gICAgdC5JZ3JhdmUgPSAzODk7XG4gICAgdC5JbWFjcm9uID0gMzg5O1xuICAgIHQuTGNhcm9uID0gNjY3O1xuICAgIHQub25laGFsZiA9IDc1MDtcbiAgICB0Lmxlc3NlcXVhbCA9IDU0OTtcbiAgICB0Lm9jaXJjdW1mbGV4ID0gNTAwO1xuICAgIHQubnRpbGRlID0gNTU2O1xuICAgIHQuVWh1bmdhcnVtbGF1dCA9IDcyMjtcbiAgICB0LkVhY3V0ZSA9IDY2NztcbiAgICB0LmVtYWNyb24gPSA0NDQ7XG4gICAgdC5nYnJldmUgPSA1MDA7XG4gICAgdC5vbmVxdWFydGVyID0gNzUwO1xuICAgIHQuU2Nhcm9uID0gNTU2O1xuICAgIHQuU2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuT2h1bmdhcnVtbGF1dCA9IDc3ODtcbiAgICB0LmRlZ3JlZSA9IDQwMDtcbiAgICB0Lm9ncmF2ZSA9IDUwMDtcbiAgICB0LkNjYXJvbiA9IDcyMjtcbiAgICB0LnVncmF2ZSA9IDU1NjtcbiAgICB0LnJhZGljYWwgPSA1NDk7XG4gICAgdC5EY2Fyb24gPSA3MjI7XG4gICAgdC5yY29tbWFhY2NlbnQgPSA0NDQ7XG4gICAgdC5OdGlsZGUgPSA3MjI7XG4gICAgdC5vdGlsZGUgPSA1MDA7XG4gICAgdC5SY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5BdGlsZGUgPSA3MjI7XG4gICAgdC5Bb2dvbmVrID0gNzIyO1xuICAgIHQuQXJpbmcgPSA3MjI7XG4gICAgdC5PdGlsZGUgPSA3Nzg7XG4gICAgdC56ZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuRWNhcm9uID0gNjY3O1xuICAgIHQuSW9nb25layA9IDM4OTtcbiAgICB0Lmtjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lm1pbnVzID0gNTcwO1xuICAgIHQuSWNpcmN1bWZsZXggPSAzODk7XG4gICAgdC5uY2Fyb24gPSA1NTY7XG4gICAgdC50Y29tbWFhY2NlbnQgPSAzMzM7XG4gICAgdC5sb2dpY2Fsbm90ID0gNTcwO1xuICAgIHQub2RpZXJlc2lzID0gNTAwO1xuICAgIHQudWRpZXJlc2lzID0gNTU2O1xuICAgIHQubm90ZXF1YWwgPSA1NDk7XG4gICAgdC5nY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5ldGggPSA1MDA7XG4gICAgdC56Y2Fyb24gPSA0NDQ7XG4gICAgdC5uY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5vbmVzdXBlcmlvciA9IDMwMDtcbiAgICB0LmltYWNyb24gPSAyNzg7XG4gICAgdC5FdXJvID0gNTAwO1xuICB9KTtcbiAgdFtcIlRpbWVzLUJvbGRJdGFsaWNcIl0gPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNTA7XG4gICAgdC5leGNsYW0gPSAzODk7XG4gICAgdC5xdW90ZWRibCA9IDU1NTtcbiAgICB0Lm51bWJlcnNpZ24gPSA1MDA7XG4gICAgdC5kb2xsYXIgPSA1MDA7XG4gICAgdC5wZXJjZW50ID0gODMzO1xuICAgIHQuYW1wZXJzYW5kID0gNzc4O1xuICAgIHQucXVvdGVyaWdodCA9IDMzMztcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDUwMDtcbiAgICB0LnBsdXMgPSA1NzA7XG4gICAgdC5jb21tYSA9IDI1MDtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI1MDtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDUwMDtcbiAgICB0Lm9uZSA9IDUwMDtcbiAgICB0LnR3byA9IDUwMDtcbiAgICB0LnRocmVlID0gNTAwO1xuICAgIHQuZm91ciA9IDUwMDtcbiAgICB0LmZpdmUgPSA1MDA7XG4gICAgdC5zaXggPSA1MDA7XG4gICAgdC5zZXZlbiA9IDUwMDtcbiAgICB0LmVpZ2h0ID0gNTAwO1xuICAgIHQubmluZSA9IDUwMDtcbiAgICB0LmNvbG9uID0gMzMzO1xuICAgIHQuc2VtaWNvbG9uID0gMzMzO1xuICAgIHQubGVzcyA9IDU3MDtcbiAgICB0LmVxdWFsID0gNTcwO1xuICAgIHQuZ3JlYXRlciA9IDU3MDtcbiAgICB0LnF1ZXN0aW9uID0gNTAwO1xuICAgIHQuYXQgPSA4MzI7XG4gICAgdC5BID0gNjY3O1xuICAgIHQuQiA9IDY2NztcbiAgICB0LkMgPSA2Njc7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDY2NztcbiAgICB0LkYgPSA2Njc7XG4gICAgdC5HID0gNzIyO1xuICAgIHQuSCA9IDc3ODtcbiAgICB0LkkgPSAzODk7XG4gICAgdC5KID0gNTAwO1xuICAgIHQuSyA9IDY2NztcbiAgICB0LkwgPSA2MTE7XG4gICAgdC5NID0gODg5O1xuICAgIHQuTiA9IDcyMjtcbiAgICB0Lk8gPSA3MjI7XG4gICAgdC5QID0gNjExO1xuICAgIHQuUSA9IDcyMjtcbiAgICB0LlIgPSA2Njc7XG4gICAgdC5TID0gNTU2O1xuICAgIHQuVCA9IDYxMTtcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNjY3O1xuICAgIHQuVyA9IDg4OTtcbiAgICB0LlggPSA2Njc7XG4gICAgdC5ZID0gNjExO1xuICAgIHQuWiA9IDYxMTtcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMzMzO1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMzMzO1xuICAgIHQuYXNjaWljaXJjdW0gPSA1NzA7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucXVvdGVsZWZ0ID0gMzMzO1xuICAgIHQuYSA9IDUwMDtcbiAgICB0LmIgPSA1MDA7XG4gICAgdC5jID0gNDQ0O1xuICAgIHQuZCA9IDUwMDtcbiAgICB0LmUgPSA0NDQ7XG4gICAgdC5mID0gMzMzO1xuICAgIHQuZyA9IDUwMDtcbiAgICB0LmggPSA1NTY7XG4gICAgdC5pID0gMjc4O1xuICAgIHQuaiA9IDI3ODtcbiAgICB0LmsgPSA1MDA7XG4gICAgdC5sID0gMjc4O1xuICAgIHQubSA9IDc3ODtcbiAgICB0Lm4gPSA1NTY7XG4gICAgdC5vID0gNTAwO1xuICAgIHQucCA9IDUwMDtcbiAgICB0LnEgPSA1MDA7XG4gICAgdC5yID0gMzg5O1xuICAgIHQucyA9IDM4OTtcbiAgICB0LnQgPSAyNzg7XG4gICAgdC51ID0gNTU2O1xuICAgIHQudiA9IDQ0NDtcbiAgICB0LncgPSA2Njc7XG4gICAgdC54ID0gNTAwO1xuICAgIHQueSA9IDQ0NDtcbiAgICB0LnogPSAzODk7XG4gICAgdC5icmFjZWxlZnQgPSAzNDg7XG4gICAgdC5iYXIgPSAyMjA7XG4gICAgdC5icmFjZXJpZ2h0ID0gMzQ4O1xuICAgIHQuYXNjaWl0aWxkZSA9IDU3MDtcbiAgICB0LmV4Y2xhbWRvd24gPSAzODk7XG4gICAgdC5jZW50ID0gNTAwO1xuICAgIHQuc3RlcmxpbmcgPSA1MDA7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDUwMDtcbiAgICB0LmZsb3JpbiA9IDUwMDtcbiAgICB0LnNlY3Rpb24gPSA1MDA7XG4gICAgdC5jdXJyZW5jeSA9IDUwMDtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMjc4O1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTU2O1xuICAgIHQuZmwgPSA1NTY7XG4gICAgdC5lbmRhc2ggPSA1MDA7XG4gICAgdC5kYWdnZXIgPSA1MDA7XG4gICAgdC5kYWdnZXJkYmwgPSA1MDA7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI1MDtcbiAgICB0LnBhcmFncmFwaCA9IDUwMDtcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxiYXNlID0gNTAwO1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTAwO1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNTAwO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gMTAwMDtcbiAgICB0LkFFID0gOTQ0O1xuICAgIHQub3JkZmVtaW5pbmUgPSAyNjY7XG4gICAgdC5Mc2xhc2ggPSA2MTE7XG4gICAgdC5Pc2xhc2ggPSA3MjI7XG4gICAgdC5PRSA9IDk0NDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDMwMDtcbiAgICB0LmFlID0gNzIyO1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyNzg7XG4gICAgdC5vc2xhc2ggPSA1MDA7XG4gICAgdC5vZSA9IDcyMjtcbiAgICB0Lmdlcm1hbmRibHMgPSA1MDA7XG4gICAgdC5JZGllcmVzaXMgPSAzODk7XG4gICAgdC5lYWN1dGUgPSA0NDQ7XG4gICAgdC5hYnJldmUgPSA1MDA7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuZWNhcm9uID0gNDQ0O1xuICAgIHQuWWRpZXJlc2lzID0gNjExO1xuICAgIHQuZGl2aWRlID0gNTcwO1xuICAgIHQuWWFjdXRlID0gNjExO1xuICAgIHQuQWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hYWN1dGUgPSA1MDA7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDQ0NDtcbiAgICB0LnNjb21tYWFjY2VudCA9IDM4OTtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNDQ0O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTAwO1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDU1NjtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzQ3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDQ0NDtcbiAgICB0LmFyaW5nID0gNTAwO1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjc4O1xuICAgIHQuYWdyYXZlID0gNTAwO1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQ2FjdXRlID0gNjY3O1xuICAgIHQuYXRpbGRlID0gNTAwO1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDM4OTtcbiAgICB0LnNjZWRpbGxhID0gMzg5O1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ5NDtcbiAgICB0LlJjYXJvbiA9IDY2NztcbiAgICB0Lkdjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuYWNpcmN1bWZsZXggPSA1MDA7XG4gICAgdC5BbWFjcm9uID0gNjY3O1xuICAgIHQucmNhcm9uID0gMzg5O1xuICAgIHQuY2NlZGlsbGEgPSA0NDQ7XG4gICAgdC5aZG90YWNjZW50ID0gNjExO1xuICAgIHQuVGhvcm4gPSA2MTE7XG4gICAgdC5PbWFjcm9uID0gNzIyO1xuICAgIHQuUmFjdXRlID0gNjY3O1xuICAgIHQuU2FjdXRlID0gNTU2O1xuICAgIHQuZGNhcm9uID0gNjA4O1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNTU2O1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9ncmF2ZSA9IDcyMjtcbiAgICB0LkFncmF2ZSA9IDY2NztcbiAgICB0LkFicmV2ZSA9IDY2NztcbiAgICB0Lm11bHRpcGx5ID0gNTcwO1xuICAgIHQudWFjdXRlID0gNTU2O1xuICAgIHQuVGNhcm9uID0gNjExO1xuICAgIHQucGFydGlhbGRpZmYgPSA0OTQ7XG4gICAgdC55ZGllcmVzaXMgPSA0NDQ7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTAwO1xuICAgIHQuZWRpZXJlc2lzID0gNDQ0O1xuICAgIHQuY2FjdXRlID0gNDQ0O1xuICAgIHQubmFjdXRlID0gNTU2O1xuICAgIHQudW1hY3JvbiA9IDU1NjtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDM4OTtcbiAgICB0LnBsdXNtaW51cyA9IDU3MDtcbiAgICB0LmJyb2tlbmJhciA9IDIyMDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3NDc7XG4gICAgdC5HYnJldmUgPSA3MjI7XG4gICAgdC5JZG90YWNjZW50ID0gMzg5O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gMzg5O1xuICAgIHQub21hY3JvbiA9IDUwMDtcbiAgICB0LlphY3V0ZSA9IDYxMTtcbiAgICB0LlpjYXJvbiA9IDYxMTtcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNjY3O1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQudGNhcm9uID0gMzY2O1xuICAgIHQuZW9nb25layA9IDQ0NDtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA2Njc7XG4gICAgdC5BZGllcmVzaXMgPSA2Njc7XG4gICAgdC5lZ3JhdmUgPSA0NDQ7XG4gICAgdC56YWN1dGUgPSAzODk7XG4gICAgdC5pb2dvbmVrID0gMjc4O1xuICAgIHQuT2FjdXRlID0gNzIyO1xuICAgIHQub2FjdXRlID0gNTAwO1xuICAgIHQuYW1hY3JvbiA9IDUwMDtcbiAgICB0LnNhY3V0ZSA9IDM4OTtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDUwMDtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzAwO1xuICAgIHQuT2RpZXJlc2lzID0gNzIyO1xuICAgIHQubXUgPSA1NzY7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNTAwO1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDUwMDtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA3NTA7XG4gICAgdC5TY2VkaWxsYSA9IDU1NjtcbiAgICB0LmxjYXJvbiA9IDM4MjtcbiAgICB0Lktjb21tYWFjY2VudCA9IDY2NztcbiAgICB0LkxhY3V0ZSA9IDYxMTtcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuSWdyYXZlID0gMzg5O1xuICAgIHQuSW1hY3JvbiA9IDM4OTtcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA3NTA7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0Lm50aWxkZSA9IDU1NjtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNDQ0O1xuICAgIHQuZ2JyZXZlID0gNTAwO1xuICAgIHQub25lcXVhcnRlciA9IDc1MDtcbiAgICB0LlNjYXJvbiA9IDU1NjtcbiAgICB0LlNjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1MDA7XG4gICAgdC5DY2Fyb24gPSA2Njc7XG4gICAgdC51Z3JhdmUgPSA1NTY7XG4gICAgdC5yYWRpY2FsID0gNTQ5O1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTAwO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQXRpbGRlID0gNjY3O1xuICAgIHQuQW9nb25layA9IDY2NztcbiAgICB0LkFyaW5nID0gNjY3O1xuICAgIHQuT3RpbGRlID0gNzIyO1xuICAgIHQuemRvdGFjY2VudCA9IDM4OTtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAzODk7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5taW51cyA9IDYwNjtcbiAgICB0LkljaXJjdW1mbGV4ID0gMzg5O1xuICAgIHQubmNhcm9uID0gNTU2O1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDYwNjtcbiAgICB0Lm9kaWVyZXNpcyA9IDUwMDtcbiAgICB0LnVkaWVyZXNpcyA9IDU1NjtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZXRoID0gNTAwO1xuICAgIHQuemNhcm9uID0gMzg5O1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQub25lc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDUwMDtcbiAgfSk7XG4gIHRbXCJUaW1lcy1JdGFsaWNcIl0gPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNTA7XG4gICAgdC5leGNsYW0gPSAzMzM7XG4gICAgdC5xdW90ZWRibCA9IDQyMDtcbiAgICB0Lm51bWJlcnNpZ24gPSA1MDA7XG4gICAgdC5kb2xsYXIgPSA1MDA7XG4gICAgdC5wZXJjZW50ID0gODMzO1xuICAgIHQuYW1wZXJzYW5kID0gNzc4O1xuICAgIHQucXVvdGVyaWdodCA9IDMzMztcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDUwMDtcbiAgICB0LnBsdXMgPSA2NzU7XG4gICAgdC5jb21tYSA9IDI1MDtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI1MDtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDUwMDtcbiAgICB0Lm9uZSA9IDUwMDtcbiAgICB0LnR3byA9IDUwMDtcbiAgICB0LnRocmVlID0gNTAwO1xuICAgIHQuZm91ciA9IDUwMDtcbiAgICB0LmZpdmUgPSA1MDA7XG4gICAgdC5zaXggPSA1MDA7XG4gICAgdC5zZXZlbiA9IDUwMDtcbiAgICB0LmVpZ2h0ID0gNTAwO1xuICAgIHQubmluZSA9IDUwMDtcbiAgICB0LmNvbG9uID0gMzMzO1xuICAgIHQuc2VtaWNvbG9uID0gMzMzO1xuICAgIHQubGVzcyA9IDY3NTtcbiAgICB0LmVxdWFsID0gNjc1O1xuICAgIHQuZ3JlYXRlciA9IDY3NTtcbiAgICB0LnF1ZXN0aW9uID0gNTAwO1xuICAgIHQuYXQgPSA5MjA7XG4gICAgdC5BID0gNjExO1xuICAgIHQuQiA9IDYxMTtcbiAgICB0LkMgPSA2Njc7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDYxMTtcbiAgICB0LkYgPSA2MTE7XG4gICAgdC5HID0gNzIyO1xuICAgIHQuSCA9IDcyMjtcbiAgICB0LkkgPSAzMzM7XG4gICAgdC5KID0gNDQ0O1xuICAgIHQuSyA9IDY2NztcbiAgICB0LkwgPSA1NTY7XG4gICAgdC5NID0gODMzO1xuICAgIHQuTiA9IDY2NztcbiAgICB0Lk8gPSA3MjI7XG4gICAgdC5QID0gNjExO1xuICAgIHQuUSA9IDcyMjtcbiAgICB0LlIgPSA2MTE7XG4gICAgdC5TID0gNTAwO1xuICAgIHQuVCA9IDU1NjtcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNjExO1xuICAgIHQuVyA9IDgzMztcbiAgICB0LlggPSA2MTE7XG4gICAgdC5ZID0gNTU2O1xuICAgIHQuWiA9IDU1NjtcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMzg5O1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMzg5O1xuICAgIHQuYXNjaWljaXJjdW0gPSA0MjI7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucXVvdGVsZWZ0ID0gMzMzO1xuICAgIHQuYSA9IDUwMDtcbiAgICB0LmIgPSA1MDA7XG4gICAgdC5jID0gNDQ0O1xuICAgIHQuZCA9IDUwMDtcbiAgICB0LmUgPSA0NDQ7XG4gICAgdC5mID0gMjc4O1xuICAgIHQuZyA9IDUwMDtcbiAgICB0LmggPSA1MDA7XG4gICAgdC5pID0gMjc4O1xuICAgIHQuaiA9IDI3ODtcbiAgICB0LmsgPSA0NDQ7XG4gICAgdC5sID0gMjc4O1xuICAgIHQubSA9IDcyMjtcbiAgICB0Lm4gPSA1MDA7XG4gICAgdC5vID0gNTAwO1xuICAgIHQucCA9IDUwMDtcbiAgICB0LnEgPSA1MDA7XG4gICAgdC5yID0gMzg5O1xuICAgIHQucyA9IDM4OTtcbiAgICB0LnQgPSAyNzg7XG4gICAgdC51ID0gNTAwO1xuICAgIHQudiA9IDQ0NDtcbiAgICB0LncgPSA2Njc7XG4gICAgdC54ID0gNDQ0O1xuICAgIHQueSA9IDQ0NDtcbiAgICB0LnogPSAzODk7XG4gICAgdC5icmFjZWxlZnQgPSA0MDA7XG4gICAgdC5iYXIgPSAyNzU7XG4gICAgdC5icmFjZXJpZ2h0ID0gNDAwO1xuICAgIHQuYXNjaWl0aWxkZSA9IDU0MTtcbiAgICB0LmV4Y2xhbWRvd24gPSAzODk7XG4gICAgdC5jZW50ID0gNTAwO1xuICAgIHQuc3RlcmxpbmcgPSA1MDA7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDUwMDtcbiAgICB0LmZsb3JpbiA9IDUwMDtcbiAgICB0LnNlY3Rpb24gPSA1MDA7XG4gICAgdC5jdXJyZW5jeSA9IDUwMDtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMjE0O1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gNTU2O1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTAwO1xuICAgIHQuZmwgPSA1MDA7XG4gICAgdC5lbmRhc2ggPSA1MDA7XG4gICAgdC5kYWdnZXIgPSA1MDA7XG4gICAgdC5kYWdnZXJkYmwgPSA1MDA7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI1MDtcbiAgICB0LnBhcmFncmFwaCA9IDUyMztcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxiYXNlID0gNTU2O1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDU1NjtcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTAwO1xuICAgIHQuZWxsaXBzaXMgPSA4ODk7XG4gICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7XG4gICAgdC5xdWVzdGlvbmRvd24gPSA1MDA7XG4gICAgdC5ncmF2ZSA9IDMzMztcbiAgICB0LmFjdXRlID0gMzMzO1xuICAgIHQuY2lyY3VtZmxleCA9IDMzMztcbiAgICB0LnRpbGRlID0gMzMzO1xuICAgIHQubWFjcm9uID0gMzMzO1xuICAgIHQuYnJldmUgPSAzMzM7XG4gICAgdC5kb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5kaWVyZXNpcyA9IDMzMztcbiAgICB0LnJpbmcgPSAzMzM7XG4gICAgdC5jZWRpbGxhID0gMzMzO1xuICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzO1xuICAgIHQub2dvbmVrID0gMzMzO1xuICAgIHQuY2Fyb24gPSAzMzM7XG4gICAgdC5lbWRhc2ggPSA4ODk7XG4gICAgdC5BRSA9IDg4OTtcbiAgICB0Lm9yZGZlbWluaW5lID0gMjc2O1xuICAgIHQuTHNsYXNoID0gNTU2O1xuICAgIHQuT3NsYXNoID0gNzIyO1xuICAgIHQuT0UgPSA5NDQ7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzMTA7XG4gICAgdC5hZSA9IDY2NztcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNTAwO1xuICAgIHQub2UgPSA2Njc7XG4gICAgdC5nZXJtYW5kYmxzID0gNTAwO1xuICAgIHQuSWRpZXJlc2lzID0gMzMzO1xuICAgIHQuZWFjdXRlID0gNDQ0O1xuICAgIHQuYWJyZXZlID0gNTAwO1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LmVjYXJvbiA9IDQ0NDtcbiAgICB0LllkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmRpdmlkZSA9IDY3NTtcbiAgICB0LllhY3V0ZSA9IDU1NjtcbiAgICB0LkFjaXJjdW1mbGV4ID0gNjExO1xuICAgIHQuYWFjdXRlID0gNTAwO1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA0NDQ7XG4gICAgdC5zY29tbWFhY2NlbnQgPSAzODk7XG4gICAgdC5lY2lyY3VtZmxleCA9IDQ0NDtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDUwMDtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA1MDA7XG4gICAgdC5FZGllcmVzaXMgPSA2MTE7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDc2MDtcbiAgICB0LkVtYWNyb24gPSA2MTE7XG4gICAgdC5jY2Fyb24gPSA0NDQ7XG4gICAgdC5hcmluZyA9IDUwMDtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDY2NztcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDUwMDtcbiAgICB0LlRjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0LkNhY3V0ZSA9IDY2NztcbiAgICB0LmF0aWxkZSA9IDUwMDtcbiAgICB0LkVkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5zY2Fyb24gPSAzODk7XG4gICAgdC5zY2VkaWxsYSA9IDM4OTtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0NzE7XG4gICAgdC5SY2Fyb24gPSA2MTE7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC51Y2lyY3VtZmxleCA9IDUwMDtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNTAwO1xuICAgIHQuQW1hY3JvbiA9IDYxMTtcbiAgICB0LnJjYXJvbiA9IDM4OTtcbiAgICB0LmNjZWRpbGxhID0gNDQ0O1xuICAgIHQuWmRvdGFjY2VudCA9IDU1NjtcbiAgICB0LlRob3JuID0gNjExO1xuICAgIHQuT21hY3JvbiA9IDcyMjtcbiAgICB0LlJhY3V0ZSA9IDYxMTtcbiAgICB0LlNhY3V0ZSA9IDUwMDtcbiAgICB0LmRjYXJvbiA9IDU0NDtcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDUwMDtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZ3JhdmUgPSA3MjI7XG4gICAgdC5BZ3JhdmUgPSA2MTE7XG4gICAgdC5BYnJldmUgPSA2MTE7XG4gICAgdC5tdWx0aXBseSA9IDY3NTtcbiAgICB0LnVhY3V0ZSA9IDUwMDtcbiAgICB0LlRjYXJvbiA9IDU1NjtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDc2O1xuICAgIHQueWRpZXJlc2lzID0gNDQ0O1xuICAgIHQuTmFjdXRlID0gNjY3O1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFkaWVyZXNpcyA9IDUwMDtcbiAgICB0LmVkaWVyZXNpcyA9IDQ0NDtcbiAgICB0LmNhY3V0ZSA9IDQ0NDtcbiAgICB0Lm5hY3V0ZSA9IDUwMDtcbiAgICB0LnVtYWNyb24gPSA1MDA7XG4gICAgdC5OY2Fyb24gPSA2Njc7XG4gICAgdC5JYWN1dGUgPSAzMzM7XG4gICAgdC5wbHVzbWludXMgPSA2NzU7XG4gICAgdC5icm9rZW5iYXIgPSAyNzU7XG4gICAgdC5yZWdpc3RlcmVkID0gNzYwO1xuICAgIHQuR2JyZXZlID0gNzIyO1xuICAgIHQuSWRvdGFjY2VudCA9IDMzMztcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDYxMTtcbiAgICB0LnJhY3V0ZSA9IDM4OTtcbiAgICB0Lm9tYWNyb24gPSA1MDA7XG4gICAgdC5aYWN1dGUgPSA1NTY7XG4gICAgdC5aY2Fyb24gPSA1NTY7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDY2NztcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDMwMDtcbiAgICB0LmVvZ29uZWsgPSA0NDQ7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNjExO1xuICAgIHQuQWRpZXJlc2lzID0gNjExO1xuICAgIHQuZWdyYXZlID0gNDQ0O1xuICAgIHQuemFjdXRlID0gMzg5O1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDcyMjtcbiAgICB0Lm9hY3V0ZSA9IDUwMDtcbiAgICB0LmFtYWNyb24gPSA1MDA7XG4gICAgdC5zYWN1dGUgPSAzODk7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA1MDA7XG4gICAgdC50d29zdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9kaWVyZXNpcyA9IDcyMjtcbiAgICB0Lm11ID0gNTAwO1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LkVvZ29uZWsgPSA2MTE7XG4gICAgdC5kY3JvYXQgPSA1MDA7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gNzUwO1xuICAgIHQuU2NlZGlsbGEgPSA1MDA7XG4gICAgdC5sY2Fyb24gPSAzMDA7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5MYWN1dGUgPSA1NTY7XG4gICAgdC50cmFkZW1hcmsgPSA5ODA7XG4gICAgdC5lZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuSWdyYXZlID0gMzMzO1xuICAgIHQuSW1hY3JvbiA9IDMzMztcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA3NTA7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0Lm50aWxkZSA9IDUwMDtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2MTE7XG4gICAgdC5lbWFjcm9uID0gNDQ0O1xuICAgIHQuZ2JyZXZlID0gNTAwO1xuICAgIHQub25lcXVhcnRlciA9IDc1MDtcbiAgICB0LlNjYXJvbiA9IDUwMDtcbiAgICB0LlNjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1MDA7XG4gICAgdC5DY2Fyb24gPSA2Njc7XG4gICAgdC51Z3JhdmUgPSA1MDA7XG4gICAgdC5yYWRpY2FsID0gNDUzO1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuTnRpbGRlID0gNjY3O1xuICAgIHQub3RpbGRlID0gNTAwO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuQXRpbGRlID0gNjExO1xuICAgIHQuQW9nb25layA9IDYxMTtcbiAgICB0LkFyaW5nID0gNjExO1xuICAgIHQuT3RpbGRlID0gNzIyO1xuICAgIHQuemRvdGFjY2VudCA9IDM4OTtcbiAgICB0LkVjYXJvbiA9IDYxMTtcbiAgICB0LklvZ29uZWsgPSAzMzM7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA0NDQ7XG4gICAgdC5taW51cyA9IDY3NTtcbiAgICB0LkljaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQubmNhcm9uID0gNTAwO1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDY3NTtcbiAgICB0Lm9kaWVyZXNpcyA9IDUwMDtcbiAgICB0LnVkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZXRoID0gNTAwO1xuICAgIHQuemNhcm9uID0gMzg5O1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQub25lc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDUwMDtcbiAgfSk7XG4gIHQuWmFwZkRpbmdiYXRzID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjc4O1xuICAgIHQuYTEgPSA5NzQ7XG4gICAgdC5hMiA9IDk2MTtcbiAgICB0LmEyMDIgPSA5NzQ7XG4gICAgdC5hMyA9IDk4MDtcbiAgICB0LmE0ID0gNzE5O1xuICAgIHQuYTUgPSA3ODk7XG4gICAgdC5hMTE5ID0gNzkwO1xuICAgIHQuYTExOCA9IDc5MTtcbiAgICB0LmExMTcgPSA2OTA7XG4gICAgdC5hMTEgPSA5NjA7XG4gICAgdC5hMTIgPSA5Mzk7XG4gICAgdC5hMTMgPSA1NDk7XG4gICAgdC5hMTQgPSA4NTU7XG4gICAgdC5hMTUgPSA5MTE7XG4gICAgdC5hMTYgPSA5MzM7XG4gICAgdC5hMTA1ID0gOTExO1xuICAgIHQuYTE3ID0gOTQ1O1xuICAgIHQuYTE4ID0gOTc0O1xuICAgIHQuYTE5ID0gNzU1O1xuICAgIHQuYTIwID0gODQ2O1xuICAgIHQuYTIxID0gNzYyO1xuICAgIHQuYTIyID0gNzYxO1xuICAgIHQuYTIzID0gNTcxO1xuICAgIHQuYTI0ID0gNjc3O1xuICAgIHQuYTI1ID0gNzYzO1xuICAgIHQuYTI2ID0gNzYwO1xuICAgIHQuYTI3ID0gNzU5O1xuICAgIHQuYTI4ID0gNzU0O1xuICAgIHQuYTYgPSA0OTQ7XG4gICAgdC5hNyA9IDU1MjtcbiAgICB0LmE4ID0gNTM3O1xuICAgIHQuYTkgPSA1Nzc7XG4gICAgdC5hMTAgPSA2OTI7XG4gICAgdC5hMjkgPSA3ODY7XG4gICAgdC5hMzAgPSA3ODg7XG4gICAgdC5hMzEgPSA3ODg7XG4gICAgdC5hMzIgPSA3OTA7XG4gICAgdC5hMzMgPSA3OTM7XG4gICAgdC5hMzQgPSA3OTQ7XG4gICAgdC5hMzUgPSA4MTY7XG4gICAgdC5hMzYgPSA4MjM7XG4gICAgdC5hMzcgPSA3ODk7XG4gICAgdC5hMzggPSA4NDE7XG4gICAgdC5hMzkgPSA4MjM7XG4gICAgdC5hNDAgPSA4MzM7XG4gICAgdC5hNDEgPSA4MTY7XG4gICAgdC5hNDIgPSA4MzE7XG4gICAgdC5hNDMgPSA5MjM7XG4gICAgdC5hNDQgPSA3NDQ7XG4gICAgdC5hNDUgPSA3MjM7XG4gICAgdC5hNDYgPSA3NDk7XG4gICAgdC5hNDcgPSA3OTA7XG4gICAgdC5hNDggPSA3OTI7XG4gICAgdC5hNDkgPSA2OTU7XG4gICAgdC5hNTAgPSA3NzY7XG4gICAgdC5hNTEgPSA3Njg7XG4gICAgdC5hNTIgPSA3OTI7XG4gICAgdC5hNTMgPSA3NTk7XG4gICAgdC5hNTQgPSA3MDc7XG4gICAgdC5hNTUgPSA3MDg7XG4gICAgdC5hNTYgPSA2ODI7XG4gICAgdC5hNTcgPSA3MDE7XG4gICAgdC5hNTggPSA4MjY7XG4gICAgdC5hNTkgPSA4MTU7XG4gICAgdC5hNjAgPSA3ODk7XG4gICAgdC5hNjEgPSA3ODk7XG4gICAgdC5hNjIgPSA3MDc7XG4gICAgdC5hNjMgPSA2ODc7XG4gICAgdC5hNjQgPSA2OTY7XG4gICAgdC5hNjUgPSA2ODk7XG4gICAgdC5hNjYgPSA3ODY7XG4gICAgdC5hNjcgPSA3ODc7XG4gICAgdC5hNjggPSA3MTM7XG4gICAgdC5hNjkgPSA3OTE7XG4gICAgdC5hNzAgPSA3ODU7XG4gICAgdC5hNzEgPSA3OTE7XG4gICAgdC5hNzIgPSA4NzM7XG4gICAgdC5hNzMgPSA3NjE7XG4gICAgdC5hNzQgPSA3NjI7XG4gICAgdC5hMjAzID0gNzYyO1xuICAgIHQuYTc1ID0gNzU5O1xuICAgIHQuYTIwNCA9IDc1OTtcbiAgICB0LmE3NiA9IDg5MjtcbiAgICB0LmE3NyA9IDg5MjtcbiAgICB0LmE3OCA9IDc4ODtcbiAgICB0LmE3OSA9IDc4NDtcbiAgICB0LmE4MSA9IDQzODtcbiAgICB0LmE4MiA9IDEzODtcbiAgICB0LmE4MyA9IDI3NztcbiAgICB0LmE4NCA9IDQxNTtcbiAgICB0LmE5NyA9IDM5MjtcbiAgICB0LmE5OCA9IDM5MjtcbiAgICB0LmE5OSA9IDY2ODtcbiAgICB0LmExMDAgPSA2Njg7XG4gICAgdC5hODkgPSAzOTA7XG4gICAgdC5hOTAgPSAzOTA7XG4gICAgdC5hOTMgPSAzMTc7XG4gICAgdC5hOTQgPSAzMTc7XG4gICAgdC5hOTEgPSAyNzY7XG4gICAgdC5hOTIgPSAyNzY7XG4gICAgdC5hMjA1ID0gNTA5O1xuICAgIHQuYTg1ID0gNTA5O1xuICAgIHQuYTIwNiA9IDQxMDtcbiAgICB0LmE4NiA9IDQxMDtcbiAgICB0LmE4NyA9IDIzNDtcbiAgICB0LmE4OCA9IDIzNDtcbiAgICB0LmE5NSA9IDMzNDtcbiAgICB0LmE5NiA9IDMzNDtcbiAgICB0LmExMDEgPSA3MzI7XG4gICAgdC5hMTAyID0gNTQ0O1xuICAgIHQuYTEwMyA9IDU0NDtcbiAgICB0LmExMDQgPSA5MTA7XG4gICAgdC5hMTA2ID0gNjY3O1xuICAgIHQuYTEwNyA9IDc2MDtcbiAgICB0LmExMDggPSA3NjA7XG4gICAgdC5hMTEyID0gNzc2O1xuICAgIHQuYTExMSA9IDU5NTtcbiAgICB0LmExMTAgPSA2OTQ7XG4gICAgdC5hMTA5ID0gNjI2O1xuICAgIHQuYTEyMCA9IDc4ODtcbiAgICB0LmExMjEgPSA3ODg7XG4gICAgdC5hMTIyID0gNzg4O1xuICAgIHQuYTEyMyA9IDc4ODtcbiAgICB0LmExMjQgPSA3ODg7XG4gICAgdC5hMTI1ID0gNzg4O1xuICAgIHQuYTEyNiA9IDc4ODtcbiAgICB0LmExMjcgPSA3ODg7XG4gICAgdC5hMTI4ID0gNzg4O1xuICAgIHQuYTEyOSA9IDc4ODtcbiAgICB0LmExMzAgPSA3ODg7XG4gICAgdC5hMTMxID0gNzg4O1xuICAgIHQuYTEzMiA9IDc4ODtcbiAgICB0LmExMzMgPSA3ODg7XG4gICAgdC5hMTM0ID0gNzg4O1xuICAgIHQuYTEzNSA9IDc4ODtcbiAgICB0LmExMzYgPSA3ODg7XG4gICAgdC5hMTM3ID0gNzg4O1xuICAgIHQuYTEzOCA9IDc4ODtcbiAgICB0LmExMzkgPSA3ODg7XG4gICAgdC5hMTQwID0gNzg4O1xuICAgIHQuYTE0MSA9IDc4ODtcbiAgICB0LmExNDIgPSA3ODg7XG4gICAgdC5hMTQzID0gNzg4O1xuICAgIHQuYTE0NCA9IDc4ODtcbiAgICB0LmExNDUgPSA3ODg7XG4gICAgdC5hMTQ2ID0gNzg4O1xuICAgIHQuYTE0NyA9IDc4ODtcbiAgICB0LmExNDggPSA3ODg7XG4gICAgdC5hMTQ5ID0gNzg4O1xuICAgIHQuYTE1MCA9IDc4ODtcbiAgICB0LmExNTEgPSA3ODg7XG4gICAgdC5hMTUyID0gNzg4O1xuICAgIHQuYTE1MyA9IDc4ODtcbiAgICB0LmExNTQgPSA3ODg7XG4gICAgdC5hMTU1ID0gNzg4O1xuICAgIHQuYTE1NiA9IDc4ODtcbiAgICB0LmExNTcgPSA3ODg7XG4gICAgdC5hMTU4ID0gNzg4O1xuICAgIHQuYTE1OSA9IDc4ODtcbiAgICB0LmExNjAgPSA4OTQ7XG4gICAgdC5hMTYxID0gODM4O1xuICAgIHQuYTE2MyA9IDEwMTY7XG4gICAgdC5hMTY0ID0gNDU4O1xuICAgIHQuYTE5NiA9IDc0ODtcbiAgICB0LmExNjUgPSA5MjQ7XG4gICAgdC5hMTkyID0gNzQ4O1xuICAgIHQuYTE2NiA9IDkxODtcbiAgICB0LmExNjcgPSA5Mjc7XG4gICAgdC5hMTY4ID0gOTI4O1xuICAgIHQuYTE2OSA9IDkyODtcbiAgICB0LmExNzAgPSA4MzQ7XG4gICAgdC5hMTcxID0gODczO1xuICAgIHQuYTE3MiA9IDgyODtcbiAgICB0LmExNzMgPSA5MjQ7XG4gICAgdC5hMTYyID0gOTI0O1xuICAgIHQuYTE3NCA9IDkxNztcbiAgICB0LmExNzUgPSA5MzA7XG4gICAgdC5hMTc2ID0gOTMxO1xuICAgIHQuYTE3NyA9IDQ2MztcbiAgICB0LmExNzggPSA4ODM7XG4gICAgdC5hMTc5ID0gODM2O1xuICAgIHQuYTE5MyA9IDgzNjtcbiAgICB0LmExODAgPSA4Njc7XG4gICAgdC5hMTk5ID0gODY3O1xuICAgIHQuYTE4MSA9IDY5NjtcbiAgICB0LmEyMDAgPSA2OTY7XG4gICAgdC5hMTgyID0gODc0O1xuICAgIHQuYTIwMSA9IDg3NDtcbiAgICB0LmExODMgPSA3NjA7XG4gICAgdC5hMTg0ID0gOTQ2O1xuICAgIHQuYTE5NyA9IDc3MTtcbiAgICB0LmExODUgPSA4NjU7XG4gICAgdC5hMTk0ID0gNzcxO1xuICAgIHQuYTE5OCA9IDg4ODtcbiAgICB0LmExODYgPSA5Njc7XG4gICAgdC5hMTk1ID0gODg4O1xuICAgIHQuYTE4NyA9IDgzMTtcbiAgICB0LmExODggPSA4NzM7XG4gICAgdC5hMTg5ID0gOTI3O1xuICAgIHQuYTE5MCA9IDk3MDtcbiAgICB0LmExOTEgPSA5MTg7XG4gIH0pO1xufSk7XG5leHBvcnRzLmdldE1ldHJpY3MgPSBnZXRNZXRyaWNzO1xuXG4vKioqLyB9KSxcbi8qIDQxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUERGRnVuY3Rpb24gPSBpc1BERkZ1bmN0aW9uO1xuZXhwb3J0cy5Qb3N0U2NyaXB0Q29tcGlsZXIgPSBleHBvcnRzLlBvc3RTY3JpcHRFdmFsdWF0b3IgPSBleHBvcnRzLlBERkZ1bmN0aW9uRmFjdG9yeSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9wc19wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQyKTtcblxuY2xhc3MgUERGRnVuY3Rpb25GYWN0b3J5IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHhyZWYsXG4gICAgaXNFdmFsU3VwcG9ydGVkID0gdHJ1ZVxuICB9KSB7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLmlzRXZhbFN1cHBvcnRlZCA9IGlzRXZhbFN1cHBvcnRlZCAhPT0gZmFsc2U7XG4gIH1cblxuICBjcmVhdGUoZm4pIHtcbiAgICByZXR1cm4gUERGRnVuY3Rpb24ucGFyc2Uoe1xuICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgaXNFdmFsU3VwcG9ydGVkOiB0aGlzLmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIGZuXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVGcm9tQXJyYXkoZm5PYmopIHtcbiAgICByZXR1cm4gUERGRnVuY3Rpb24ucGFyc2VBcnJheSh7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHRoaXMuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgZm5PYmpcbiAgICB9KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGRnVuY3Rpb25GYWN0b3J5ID0gUERGRnVuY3Rpb25GYWN0b3J5O1xuXG5mdW5jdGlvbiB0b051bWJlckFycmF5KGFycikge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiBhcnJbaV0gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7XG4gICAgICAgIHJlc3VsdFtqXSA9ICthcnJbal07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cblxudmFyIFBERkZ1bmN0aW9uID0gZnVuY3Rpb24gUERGRnVuY3Rpb25DbG9zdXJlKCkge1xuICBjb25zdCBDT05TVFJVQ1RfU0FNUExFRCA9IDA7XG4gIGNvbnN0IENPTlNUUlVDVF9JTlRFUlBPTEFURUQgPSAyO1xuICBjb25zdCBDT05TVFJVQ1RfU1RJQ0hFRCA9IDM7XG4gIGNvbnN0IENPTlNUUlVDVF9QT1NUU0NSSVBUID0gNDtcbiAgcmV0dXJuIHtcbiAgICBnZXRTYW1wbGVBcnJheShzaXplLCBvdXRwdXRTaXplLCBicHMsIHN0cmVhbSkge1xuICAgICAgdmFyIGksIGlpO1xuICAgICAgdmFyIGxlbmd0aCA9IDE7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGxlbmd0aCAqPSBzaXplW2ldO1xuICAgICAgfVxuXG4gICAgICBsZW5ndGggKj0gb3V0cHV0U2l6ZTtcbiAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgICAgdmFyIGNvZGVTaXplID0gMDtcbiAgICAgIHZhciBjb2RlQnVmID0gMDtcbiAgICAgIHZhciBzYW1wbGVNdWwgPSAxLjAgLyAoMi4wICoqIGJwcyAtIDEpO1xuICAgICAgdmFyIHN0ckJ5dGVzID0gc3RyZWFtLmdldEJ5dGVzKChsZW5ndGggKiBicHMgKyA3KSAvIDgpO1xuICAgICAgdmFyIHN0cklkeCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB3aGlsZSAoY29kZVNpemUgPCBicHMpIHtcbiAgICAgICAgICBjb2RlQnVmIDw8PSA4O1xuICAgICAgICAgIGNvZGVCdWYgfD0gc3RyQnl0ZXNbc3RySWR4KytdO1xuICAgICAgICAgIGNvZGVTaXplICs9IDg7XG4gICAgICAgIH1cblxuICAgICAgICBjb2RlU2l6ZSAtPSBicHM7XG4gICAgICAgIGFycmF5W2ldID0gKGNvZGVCdWYgPj4gY29kZVNpemUpICogc2FtcGxlTXVsO1xuICAgICAgICBjb2RlQnVmICY9ICgxIDw8IGNvZGVTaXplKSAtIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9LFxuXG4gICAgZ2V0SVIoe1xuICAgICAgeHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIGZuXG4gICAgfSkge1xuICAgICAgdmFyIGRpY3QgPSBmbi5kaWN0O1xuXG4gICAgICBpZiAoIWRpY3QpIHtcbiAgICAgICAgZGljdCA9IGZuO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZXMgPSBbdGhpcy5jb25zdHJ1Y3RTYW1wbGVkLCBudWxsLCB0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZCwgdGhpcy5jb25zdHJ1Y3RTdGljaGVkLCB0aGlzLmNvbnN0cnVjdFBvc3RTY3JpcHRdO1xuICAgICAgdmFyIHR5cGVOdW0gPSBkaWN0LmdldChcIkZ1bmN0aW9uVHlwZVwiKTtcbiAgICAgIHZhciB0eXBlRm4gPSB0eXBlc1t0eXBlTnVtXTtcblxuICAgICAgaWYgKCF0eXBlRm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZUZuLmNhbGwodGhpcywge1xuICAgICAgICB4cmVmLFxuICAgICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgIGZuLFxuICAgICAgICBkaWN0XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZnJvbUlSKHtcbiAgICAgIHhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBJUlxuICAgIH0pIHtcbiAgICAgIHZhciB0eXBlID0gSVJbMF07XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIENPTlNUUlVDVF9TQU1QTEVEOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWRGcm9tSVIoe1xuICAgICAgICAgICAgeHJlZixcbiAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgIElSXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSBDT05TVFJVQ1RfSU5URVJQT0xBVEVEOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZEZyb21JUih7XG4gICAgICAgICAgICB4cmVmLFxuICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgSVJcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlIENPTlNUUlVDVF9TVElDSEVEOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFN0aWNoZWRGcm9tSVIoe1xuICAgICAgICAgICAgeHJlZixcbiAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgIElSXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0RnJvbUlSKHtcbiAgICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICBJUlxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYXJzZSh7XG4gICAgICB4cmVmLFxuICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgZm5cbiAgICB9KSB7XG4gICAgICBjb25zdCBJUiA9IHRoaXMuZ2V0SVIoe1xuICAgICAgICB4cmVmLFxuICAgICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgIGZuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLmZyb21JUih7XG4gICAgICAgIHhyZWYsXG4gICAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgSVJcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBwYXJzZUFycmF5KHtcbiAgICAgIHhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBmbk9ialxuICAgIH0pIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShmbk9iaikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2Uoe1xuICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgIGZuOiBmbk9ialxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZuQXJyYXkgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZm5PYmoubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBmbkFycmF5LnB1c2godGhpcy5wYXJzZSh7XG4gICAgICAgICAgeHJlZixcbiAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgZm46IHhyZWYuZmV0Y2hJZlJlZihmbk9ialtqXSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZuQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGZuQXJyYXlbaV0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQgKyBpKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgY29uc3RydWN0U2FtcGxlZCh7XG4gICAgICB4cmVmLFxuICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgZm4sXG4gICAgICBkaWN0XG4gICAgfSkge1xuICAgICAgZnVuY3Rpb24gdG9NdWx0aUFycmF5KGFycikge1xuICAgICAgICB2YXIgaW5wdXRMZW5ndGggPSBhcnIubGVuZ3RoO1xuICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgb3V0W2luZGV4XSA9IFthcnJbaV0sIGFycltpICsgMV1dO1xuICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfVxuXG4gICAgICB2YXIgZG9tYWluID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiRG9tYWluXCIpKTtcbiAgICAgIHZhciByYW5nZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIlJhbmdlXCIpKTtcblxuICAgICAgaWYgKCFkb21haW4gfHwgIXJhbmdlKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk5vIGRvbWFpbiBvciByYW5nZVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggLyAyO1xuICAgICAgdmFyIG91dHB1dFNpemUgPSByYW5nZS5sZW5ndGggLyAyO1xuICAgICAgZG9tYWluID0gdG9NdWx0aUFycmF5KGRvbWFpbik7XG4gICAgICByYW5nZSA9IHRvTXVsdGlBcnJheShyYW5nZSk7XG4gICAgICB2YXIgc2l6ZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIlNpemVcIikpO1xuICAgICAgdmFyIGJwcyA9IGRpY3QuZ2V0KFwiQml0c1BlclNhbXBsZVwiKTtcbiAgICAgIHZhciBvcmRlciA9IGRpY3QuZ2V0KFwiT3JkZXJcIikgfHwgMTtcblxuICAgICAgaWYgKG9yZGVyICE9PSAxKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIk5vIHN1cHBvcnQgZm9yIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uOiBcIiArIG9yZGVyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVuY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIkVuY29kZVwiKSk7XG5cbiAgICAgIGlmICghZW5jb2RlKSB7XG4gICAgICAgIGVuY29kZSA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRTaXplOyArK2kpIHtcbiAgICAgICAgICBlbmNvZGUucHVzaChbMCwgc2l6ZVtpXSAtIDFdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5jb2RlID0gdG9NdWx0aUFycmF5KGVuY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWNvZGUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEZWNvZGVcIikpO1xuXG4gICAgICBpZiAoIWRlY29kZSkge1xuICAgICAgICBkZWNvZGUgPSByYW5nZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlY29kZSA9IHRvTXVsdGlBcnJheShkZWNvZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2FtcGxlcyA9IHRoaXMuZ2V0U2FtcGxlQXJyYXkoc2l6ZSwgb3V0cHV0U2l6ZSwgYnBzLCBmbik7XG4gICAgICByZXR1cm4gW0NPTlNUUlVDVF9TQU1QTEVELCBpbnB1dFNpemUsIGRvbWFpbiwgZW5jb2RlLCBkZWNvZGUsIHNhbXBsZXMsIHNpemUsIG91dHB1dFNpemUsIDIgKiogYnBzIC0gMSwgcmFuZ2VdO1xuICAgIH0sXG5cbiAgICBjb25zdHJ1Y3RTYW1wbGVkRnJvbUlSKHtcbiAgICAgIHhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBJUlxuICAgIH0pIHtcbiAgICAgIGZ1bmN0aW9uIGludGVycG9sYXRlKHgsIHhtaW4sIHhtYXgsIHltaW4sIHltYXgpIHtcbiAgICAgICAgcmV0dXJuIHltaW4gKyAoeCAtIHhtaW4pICogKCh5bWF4IC0geW1pbikgLyAoeG1heCAtIHhtaW4pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFNhbXBsZWRGcm9tSVJSZXN1bHQoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgdmFyIG0gPSBJUlsxXTtcbiAgICAgICAgdmFyIGRvbWFpbiA9IElSWzJdO1xuICAgICAgICB2YXIgZW5jb2RlID0gSVJbM107XG4gICAgICAgIHZhciBkZWNvZGUgPSBJUls0XTtcbiAgICAgICAgdmFyIHNhbXBsZXMgPSBJUls1XTtcbiAgICAgICAgdmFyIHNpemUgPSBJUls2XTtcbiAgICAgICAgdmFyIG4gPSBJUls3XTtcbiAgICAgICAgdmFyIHJhbmdlID0gSVJbOV07XG4gICAgICAgIHZhciBjdWJlVmVydGljZXMgPSAxIDw8IG07XG4gICAgICAgIHZhciBjdWJlTiA9IG5ldyBGbG9hdDY0QXJyYXkoY3ViZVZlcnRpY2VzKTtcbiAgICAgICAgdmFyIGN1YmVWZXJ0ZXggPSBuZXcgVWludDMyQXJyYXkoY3ViZVZlcnRpY2VzKTtcbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1YmVWZXJ0aWNlczsgaisrKSB7XG4gICAgICAgICAgY3ViZU5bal0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGsgPSBuLFxuICAgICAgICAgICAgcG9zID0gMTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgKytpKSB7XG4gICAgICAgICAgdmFyIGRvbWFpbl8yaSA9IGRvbWFpbltpXVswXTtcbiAgICAgICAgICB2YXIgZG9tYWluXzJpXzEgPSBkb21haW5baV1bMV07XG4gICAgICAgICAgdmFyIHhpID0gTWF0aC5taW4oTWF0aC5tYXgoc3JjW3NyY09mZnNldCArIGldLCBkb21haW5fMmkpLCBkb21haW5fMmlfMSk7XG4gICAgICAgICAgdmFyIGUgPSBpbnRlcnBvbGF0ZSh4aSwgZG9tYWluXzJpLCBkb21haW5fMmlfMSwgZW5jb2RlW2ldWzBdLCBlbmNvZGVbaV1bMV0pO1xuICAgICAgICAgIHZhciBzaXplX2kgPSBzaXplW2ldO1xuICAgICAgICAgIGUgPSBNYXRoLm1pbihNYXRoLm1heChlLCAwKSwgc2l6ZV9pIC0gMSk7XG4gICAgICAgICAgdmFyIGUwID0gZSA8IHNpemVfaSAtIDEgPyBNYXRoLmZsb29yKGUpIDogZSAtIDE7XG4gICAgICAgICAgdmFyIG4wID0gZTAgKyAxIC0gZTtcbiAgICAgICAgICB2YXIgbjEgPSBlIC0gZTA7XG4gICAgICAgICAgdmFyIG9mZnNldDAgPSBlMCAqIGs7XG4gICAgICAgICAgdmFyIG9mZnNldDEgPSBvZmZzZXQwICsgaztcblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjdWJlVmVydGljZXM7IGorKykge1xuICAgICAgICAgICAgaWYgKGogJiBwb3MpIHtcbiAgICAgICAgICAgICAgY3ViZU5bal0gKj0gbjE7XG4gICAgICAgICAgICAgIGN1YmVWZXJ0ZXhbal0gKz0gb2Zmc2V0MTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1YmVOW2pdICo9IG4wO1xuICAgICAgICAgICAgICBjdWJlVmVydGV4W2pdICs9IG9mZnNldDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgayAqPSBzaXplX2k7XG4gICAgICAgICAgcG9zIDw8PSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG47ICsraikge1xuICAgICAgICAgIHZhciByaiA9IDA7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3ViZVZlcnRpY2VzOyBpKyspIHtcbiAgICAgICAgICAgIHJqICs9IHNhbXBsZXNbY3ViZVZlcnRleFtpXSArIGpdICogY3ViZU5baV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmogPSBpbnRlcnBvbGF0ZShyaiwgMCwgMSwgZGVjb2RlW2pdWzBdLCBkZWNvZGVbal1bMV0pO1xuICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIGpdID0gTWF0aC5taW4oTWF0aC5tYXgocmosIHJhbmdlW2pdWzBdKSwgcmFuZ2Vbal1bMV0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe1xuICAgICAgeHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIGZuLFxuICAgICAgZGljdFxuICAgIH0pIHtcbiAgICAgIHZhciBjMCA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIkMwXCIpKSB8fCBbMF07XG4gICAgICB2YXIgYzEgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJDMVwiKSkgfHwgWzFdO1xuICAgICAgdmFyIG4gPSBkaWN0LmdldChcIk5cIik7XG4gICAgICB2YXIgbGVuZ3RoID0gYzAubGVuZ3RoO1xuICAgICAgdmFyIGRpZmYgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBkaWZmLnB1c2goYzFbaV0gLSBjMFtpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbQ09OU1RSVUNUX0lOVEVSUE9MQVRFRCwgYzAsIGRpZmYsIG5dO1xuICAgIH0sXG5cbiAgICBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWRGcm9tSVIoe1xuICAgICAgeHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIElSXG4gICAgfSkge1xuICAgICAgdmFyIGMwID0gSVJbMV07XG4gICAgICB2YXIgZGlmZiA9IElSWzJdO1xuICAgICAgdmFyIG4gPSBJUlszXTtcbiAgICAgIHZhciBsZW5ndGggPSBkaWZmLmxlbmd0aDtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWRGcm9tSVJSZXN1bHQoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgdmFyIHggPSBuID09PSAxID8gc3JjW3NyY09mZnNldF0gOiBzcmNbc3JjT2Zmc2V0XSAqKiBuO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuZ3RoOyArK2opIHtcbiAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyBqXSA9IGMwW2pdICsgeCAqIGRpZmZbal07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNvbnN0cnVjdFN0aWNoZWQoe1xuICAgICAgeHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIGZuLFxuICAgICAgZGljdFxuICAgIH0pIHtcbiAgICAgIHZhciBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEb21haW5cIikpO1xuXG4gICAgICBpZiAoIWRvbWFpbikge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyBkb21haW5cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnB1dFNpemUgPSBkb21haW4ubGVuZ3RoIC8gMjtcblxuICAgICAgaWYgKGlucHV0U2l6ZSAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZm5SZWZzID0gZGljdC5nZXQoXCJGdW5jdGlvbnNcIik7XG4gICAgICB2YXIgZm5zID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZuUmVmcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGZucy5wdXNoKHRoaXMucGFyc2Uoe1xuICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgIGZuOiB4cmVmLmZldGNoSWZSZWYoZm5SZWZzW2ldKVxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBib3VuZHMgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJCb3VuZHNcIikpO1xuICAgICAgdmFyIGVuY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIkVuY29kZVwiKSk7XG4gICAgICByZXR1cm4gW0NPTlNUUlVDVF9TVElDSEVELCBkb21haW4sIGJvdW5kcywgZW5jb2RlLCBmbnNdO1xuICAgIH0sXG5cbiAgICBjb25zdHJ1Y3RTdGljaGVkRnJvbUlSKHtcbiAgICAgIHhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBJUlxuICAgIH0pIHtcbiAgICAgIHZhciBkb21haW4gPSBJUlsxXTtcbiAgICAgIHZhciBib3VuZHMgPSBJUlsyXTtcbiAgICAgIHZhciBlbmNvZGUgPSBJUlszXTtcbiAgICAgIHZhciBmbnMgPSBJUls0XTtcbiAgICAgIHZhciB0bXBCdWYgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFN0aWNoZWRGcm9tSVJSZXN1bHQoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgdmFyIGNsaXAgPSBmdW5jdGlvbiBjb25zdHJ1Y3RTdGljaGVkRnJvbUlSQ2xpcCh2LCBtaW4sIG1heCkge1xuICAgICAgICAgIGlmICh2ID4gbWF4KSB7XG4gICAgICAgICAgICB2ID0gbWF4O1xuICAgICAgICAgIH0gZWxzZSBpZiAodiA8IG1pbikge1xuICAgICAgICAgICAgdiA9IG1pbjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgdiA9IGNsaXAoc3JjW3NyY09mZnNldF0sIGRvbWFpblswXSwgZG9tYWluWzFdKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBib3VuZHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIGlmICh2IDwgYm91bmRzW2ldKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZG1pbiA9IGRvbWFpblswXTtcblxuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBkbWluID0gYm91bmRzW2kgLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkbWF4ID0gZG9tYWluWzFdO1xuXG4gICAgICAgIGlmIChpIDwgYm91bmRzLmxlbmd0aCkge1xuICAgICAgICAgIGRtYXggPSBib3VuZHNbaV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm1pbiA9IGVuY29kZVsyICogaV07XG4gICAgICAgIHZhciBybWF4ID0gZW5jb2RlWzIgKiBpICsgMV07XG4gICAgICAgIHRtcEJ1ZlswXSA9IGRtaW4gPT09IGRtYXggPyBybWluIDogcm1pbiArICh2IC0gZG1pbikgKiAocm1heCAtIHJtaW4pIC8gKGRtYXggLSBkbWluKTtcbiAgICAgICAgZm5zW2ldKHRtcEJ1ZiwgMCwgZGVzdCwgZGVzdE9mZnNldCk7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBjb25zdHJ1Y3RQb3N0U2NyaXB0KHtcbiAgICAgIHhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBmbixcbiAgICAgIGRpY3RcbiAgICB9KSB7XG4gICAgICB2YXIgZG9tYWluID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiRG9tYWluXCIpKTtcbiAgICAgIHZhciByYW5nZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIlJhbmdlXCIpKTtcblxuICAgICAgaWYgKCFkb21haW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTm8gZG9tYWluLlwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyByYW5nZS5cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZXhlciA9IG5ldyBfcHNfcGFyc2VyLlBvc3RTY3JpcHRMZXhlcihmbik7XG4gICAgICB2YXIgcGFyc2VyID0gbmV3IF9wc19wYXJzZXIuUG9zdFNjcmlwdFBhcnNlcihsZXhlcik7XG4gICAgICB2YXIgY29kZSA9IHBhcnNlci5wYXJzZSgpO1xuICAgICAgcmV0dXJuIFtDT05TVFJVQ1RfUE9TVFNDUklQVCwgZG9tYWluLCByYW5nZSwgY29kZV07XG4gICAgfSxcblxuICAgIGNvbnN0cnVjdFBvc3RTY3JpcHRGcm9tSVIoe1xuICAgICAgeHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIElSXG4gICAgfSkge1xuICAgICAgdmFyIGRvbWFpbiA9IElSWzFdO1xuICAgICAgdmFyIHJhbmdlID0gSVJbMl07XG4gICAgICB2YXIgY29kZSA9IElSWzNdO1xuXG4gICAgICBpZiAoaXNFdmFsU3VwcG9ydGVkICYmIF91dGlsLklzRXZhbFN1cHBvcnRlZENhY2hlZC52YWx1ZSkge1xuICAgICAgICBjb25zdCBjb21waWxlZCA9IG5ldyBQb3N0U2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGNvZGUsIGRvbWFpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGlmIChjb21waWxlZCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oXCJzcmNcIiwgXCJzcmNPZmZzZXRcIiwgXCJkZXN0XCIsIFwiZGVzdE9mZnNldFwiLCBjb21waWxlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmluZm8pKFwiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb25cIik7XG4gICAgICB2YXIgbnVtT3V0cHV0cyA9IHJhbmdlLmxlbmd0aCA+PiAxO1xuICAgICAgdmFyIG51bUlucHV0cyA9IGRvbWFpbi5sZW5ndGggPj4gMTtcbiAgICAgIHZhciBldmFsdWF0b3IgPSBuZXcgUG9zdFNjcmlwdEV2YWx1YXRvcihjb2RlKTtcbiAgICAgIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB2YXIgTUFYX0NBQ0hFX1NJWkUgPSAyMDQ4ICogNDtcbiAgICAgIHZhciBjYWNoZV9hdmFpbGFibGUgPSBNQVhfQ0FDSEVfU0laRTtcbiAgICAgIHZhciB0bXBCdWYgPSBuZXcgRmxvYXQzMkFycmF5KG51bUlucHV0cyk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0UG9zdFNjcmlwdEZyb21JUlJlc3VsdChzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgICB2YXIgaSwgdmFsdWU7XG4gICAgICAgIHZhciBrZXkgPSBcIlwiO1xuICAgICAgICB2YXIgaW5wdXQgPSB0bXBCdWY7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUlucHV0czsgaSsrKSB7XG4gICAgICAgICAgdmFsdWUgPSBzcmNbc3JjT2Zmc2V0ICsgaV07XG4gICAgICAgICAgaW5wdXRbaV0gPSB2YWx1ZTtcbiAgICAgICAgICBrZXkgKz0gdmFsdWUgKyBcIl9cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjYWNoZWRWYWx1ZSA9IGNhY2hlW2tleV07XG5cbiAgICAgICAgaWYgKGNhY2hlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZXN0LnNldChjYWNoZWRWYWx1ZSwgZGVzdE9mZnNldCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG91dHB1dCA9IG5ldyBGbG9hdDMyQXJyYXkobnVtT3V0cHV0cyk7XG4gICAgICAgIHZhciBzdGFjayA9IGV2YWx1YXRvci5leGVjdXRlKGlucHV0KTtcbiAgICAgICAgdmFyIHN0YWNrSW5kZXggPSBzdGFjay5sZW5ndGggLSBudW1PdXRwdXRzO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1PdXRwdXRzOyBpKyspIHtcbiAgICAgICAgICB2YWx1ZSA9IHN0YWNrW3N0YWNrSW5kZXggKyBpXTtcbiAgICAgICAgICB2YXIgYm91bmQgPSByYW5nZVtpICogMl07XG5cbiAgICAgICAgICBpZiAodmFsdWUgPCBib3VuZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBib3VuZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm91bmQgPSByYW5nZVtpICogMiArIDFdO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgPiBib3VuZCkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGJvdW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG91dHB1dFtpXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhY2hlX2F2YWlsYWJsZSA+IDApIHtcbiAgICAgICAgICBjYWNoZV9hdmFpbGFibGUtLTtcbiAgICAgICAgICBjYWNoZVtrZXldID0gb3V0cHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdC5zZXQob3V0cHV0LCBkZXN0T2Zmc2V0KTtcbiAgICAgIH07XG4gICAgfVxuXG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIGlzUERGRnVuY3Rpb24odikge1xuICB2YXIgZm5EaWN0O1xuXG4gIGlmICh0eXBlb2YgdiAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2KSkge1xuICAgIGZuRGljdCA9IHY7XG4gIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh2KSkge1xuICAgIGZuRGljdCA9IHYuZGljdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZm5EaWN0LmhhcyhcIkZ1bmN0aW9uVHlwZVwiKTtcbn1cblxudmFyIFBvc3RTY3JpcHRTdGFjayA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRTdGFja0Nsb3N1cmUoKSB7XG4gIHZhciBNQVhfU1RBQ0tfU0laRSA9IDEwMDtcblxuICBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2soaW5pdGlhbFN0YWNrKSB7XG4gICAgdGhpcy5zdGFjayA9ICFpbml0aWFsU3RhY2sgPyBbXSA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGluaXRpYWxTdGFjaywgMCk7XG4gIH1cblxuICBQb3N0U2NyaXB0U3RhY2sucHJvdG90eXBlID0ge1xuICAgIHB1c2g6IGZ1bmN0aW9uIFBvc3RTY3JpcHRTdGFja19wdXNoKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPj0gTUFYX1NUQUNLX1NJWkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayBvdmVyZmxvdy5cIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgfSxcbiAgICBwb3A6IGZ1bmN0aW9uIFBvc3RTY3JpcHRTdGFja19wb3AoKSB7XG4gICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIHVuZGVyZmxvdy5cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnN0YWNrLnBvcCgpO1xuICAgIH0sXG4gICAgY29weTogZnVuY3Rpb24gUG9zdFNjcmlwdFN0YWNrX2NvcHkobikge1xuICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoICsgbiA+PSBNQVhfU1RBQ0tfU0laRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LlwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YWNrID0gdGhpcy5zdGFjaztcblxuICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIG4sIGogPSBuIC0gMTsgaiA+PSAwOyBqLS0sIGkrKykge1xuICAgICAgICBzdGFjay5wdXNoKHN0YWNrW2ldKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluZGV4OiBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2tfaW5kZXgobikge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSBuIC0gMV0pO1xuICAgIH0sXG4gICAgcm9sbDogZnVuY3Rpb24gUG9zdFNjcmlwdFN0YWNrX3JvbGwobiwgcCkge1xuICAgICAgdmFyIHN0YWNrID0gdGhpcy5zdGFjaztcbiAgICAgIHZhciBsID0gc3RhY2subGVuZ3RoIC0gbjtcbiAgICAgIHZhciByID0gc3RhY2subGVuZ3RoIC0gMSxcbiAgICAgICAgICBjID0gbCArIChwIC0gTWF0aC5mbG9vcihwIC8gbikgKiBuKSxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGosXG4gICAgICAgICAgdDtcblxuICAgICAgZm9yIChpID0gbCwgaiA9IHI7IGkgPCBqOyBpKyssIGotLSkge1xuICAgICAgICB0ID0gc3RhY2tbaV07XG4gICAgICAgIHN0YWNrW2ldID0gc3RhY2tbal07XG4gICAgICAgIHN0YWNrW2pdID0gdDtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gbCwgaiA9IGMgLSAxOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgICAgdCA9IHN0YWNrW2ldO1xuICAgICAgICBzdGFja1tpXSA9IHN0YWNrW2pdO1xuICAgICAgICBzdGFja1tqXSA9IHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IGMsIGogPSByOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgICAgdCA9IHN0YWNrW2ldO1xuICAgICAgICBzdGFja1tpXSA9IHN0YWNrW2pdO1xuICAgICAgICBzdGFja1tqXSA9IHQ7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4gUG9zdFNjcmlwdFN0YWNrO1xufSgpO1xuXG52YXIgUG9zdFNjcmlwdEV2YWx1YXRvciA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRFdmFsdWF0b3JDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBQb3N0U2NyaXB0RXZhbHVhdG9yKG9wZXJhdG9ycykge1xuICAgIHRoaXMub3BlcmF0b3JzID0gb3BlcmF0b3JzO1xuICB9XG5cbiAgUG9zdFNjcmlwdEV2YWx1YXRvci5wcm90b3R5cGUgPSB7XG4gICAgZXhlY3V0ZTogZnVuY3Rpb24gUG9zdFNjcmlwdEV2YWx1YXRvcl9leGVjdXRlKGluaXRpYWxTdGFjaykge1xuICAgICAgdmFyIHN0YWNrID0gbmV3IFBvc3RTY3JpcHRTdGFjayhpbml0aWFsU3RhY2spO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIG9wZXJhdG9ycyA9IHRoaXMub3BlcmF0b3JzO1xuICAgICAgdmFyIGxlbmd0aCA9IG9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICB2YXIgb3BlcmF0b3IsIGEsIGI7XG5cbiAgICAgIHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAgIG9wZXJhdG9yID0gb3BlcmF0b3JzW2NvdW50ZXIrK107XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcGVyYXRvciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHN0YWNrLnB1c2gob3BlcmF0b3IpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgIGNhc2UgXCJqelwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoIWEpIHtcbiAgICAgICAgICAgICAgY291bnRlciA9IGI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImpcIjpcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGNvdW50ZXIgPSBhO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiYWJzXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguYWJzKGEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhICsgYik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhbmRcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc0Jvb2wpKGEpICYmICgwLCBfdXRpbC5pc0Jvb2wpKGIpKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goYSAmJiBiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goYSAmIGIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhdGFuXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguYXRhbihhKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJiaXRzaGlmdFwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoYSA+IDApIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChhIDw8IGIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChhID4+IGIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjZWlsaW5nXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY2VpbChhKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjb3B5XCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5jb3B5KGEpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiY29zXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY29zKGEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImN2aVwiOlxuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpIHwgMDtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjdnJcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImRpdlwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhIC8gYik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJkdXBcIjpcbiAgICAgICAgICAgIHN0YWNrLmNvcHkoMSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJlcVwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhID09PSBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImV4Y2hcIjpcbiAgICAgICAgICAgIHN0YWNrLnJvbGwoMiwgMSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJleHBcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSAqKiBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImZhbHNlXCI6XG4gICAgICAgICAgICBzdGFjay5wdXNoKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImZsb29yXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguZmxvb3IoYSkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiZ2VcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSA+PSBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImd0XCI6XG4gICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgPiBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImlkaXZcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSAvIGIgfCAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImluZGV4XCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5pbmRleChhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImxlXCI6XG4gICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgPD0gYik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJsblwiOlxuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLmxvZyhhKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJsb2dcIjpcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5sb2coYSkgLyBNYXRoLkxOMTApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibHRcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSA8IGIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibW9kXCI6XG4gICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgJSBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm11bFwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhICogYik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJuZVwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhICE9PSBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm5lZ1wiOlxuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaCgtYSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJub3RcIjpcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc0Jvb2wpKGEpKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goIWEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaCh+YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm9yXCI6XG4gICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShhKSAmJiAoMCwgX3V0aWwuaXNCb29sKShiKSkge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgfHwgYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgfCBiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwicG9wXCI6XG4gICAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInJvbGxcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnJvbGwoYSwgYik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJyb3VuZFwiOlxuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLnJvdW5kKGEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInNpblwiOlxuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLnNpbihhKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJzcXJ0XCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguc3FydChhKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJzdWJcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSAtIGIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwidHJ1ZVwiOlxuICAgICAgICAgICAgc3RhY2sucHVzaCh0cnVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInRydW5jYXRlXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhID0gYSA8IDAgPyBNYXRoLmNlaWwoYSkgOiBNYXRoLmZsb29yKGEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInhvclwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkoYSkgJiYgKDAsIF91dGlsLmlzQm9vbCkoYikpIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChhICE9PSBiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goYSBeIGIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHtvcGVyYXRvcn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhY2suc3RhY2s7XG4gICAgfVxuICB9O1xuICByZXR1cm4gUG9zdFNjcmlwdEV2YWx1YXRvcjtcbn0oKTtcblxuZXhwb3J0cy5Qb3N0U2NyaXB0RXZhbHVhdG9yID0gUG9zdFNjcmlwdEV2YWx1YXRvcjtcblxudmFyIFBvc3RTY3JpcHRDb21waWxlciA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRDb21waWxlckNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIEFzdE5vZGUodHlwZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICBBc3ROb2RlLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uICh2aXNpdG9yKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcImFic3RyYWN0IG1ldGhvZFwiKTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3RBcmd1bWVudChpbmRleCwgbWluLCBtYXgpIHtcbiAgICBBc3ROb2RlLmNhbGwodGhpcywgXCJhcmdzXCIpO1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgfVxuXG4gIEFzdEFyZ3VtZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQXN0Tm9kZS5wcm90b3R5cGUpO1xuXG4gIEFzdEFyZ3VtZW50LnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uICh2aXNpdG9yKSB7XG4gICAgdmlzaXRvci52aXNpdEFyZ3VtZW50KHRoaXMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzdExpdGVyYWwobnVtYmVyKSB7XG4gICAgQXN0Tm9kZS5jYWxsKHRoaXMsIFwibGl0ZXJhbFwiKTtcbiAgICB0aGlzLm51bWJlciA9IG51bWJlcjtcbiAgICB0aGlzLm1pbiA9IG51bWJlcjtcbiAgICB0aGlzLm1heCA9IG51bWJlcjtcbiAgfVxuXG4gIEFzdExpdGVyYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgQXN0TGl0ZXJhbC5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbiAodmlzaXRvcikge1xuICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsKHRoaXMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzdEJpbmFyeU9wZXJhdGlvbihvcCwgYXJnMSwgYXJnMiwgbWluLCBtYXgpIHtcbiAgICBBc3ROb2RlLmNhbGwodGhpcywgXCJiaW5hcnlcIik7XG4gICAgdGhpcy5vcCA9IG9wO1xuICAgIHRoaXMuYXJnMSA9IGFyZzE7XG4gICAgdGhpcy5hcmcyID0gYXJnMjtcbiAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgfVxuXG4gIEFzdEJpbmFyeU9wZXJhdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFzdE5vZGUucHJvdG90eXBlKTtcblxuICBBc3RCaW5hcnlPcGVyYXRpb24ucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICB2aXNpdG9yLnZpc2l0QmluYXJ5T3BlcmF0aW9uKHRoaXMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzdE1pbihhcmcsIG1heCkge1xuICAgIEFzdE5vZGUuY2FsbCh0aGlzLCBcIm1heFwiKTtcbiAgICB0aGlzLmFyZyA9IGFyZztcbiAgICB0aGlzLm1pbiA9IGFyZy5taW47XG4gICAgdGhpcy5tYXggPSBtYXg7XG4gIH1cblxuICBBc3RNaW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgQXN0TWluLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uICh2aXNpdG9yKSB7XG4gICAgdmlzaXRvci52aXNpdE1pbih0aGlzKTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3RWYXJpYWJsZShpbmRleCwgbWluLCBtYXgpIHtcbiAgICBBc3ROb2RlLmNhbGwodGhpcywgXCJ2YXJcIik7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgIHRoaXMubWluID0gbWluO1xuICAgIHRoaXMubWF4ID0gbWF4O1xuICB9XG5cbiAgQXN0VmFyaWFibGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgQXN0VmFyaWFibGUucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGUodGhpcyk7XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN0VmFyaWFibGVEZWZpbml0aW9uKHZhcmlhYmxlLCBhcmcpIHtcbiAgICBBc3ROb2RlLmNhbGwodGhpcywgXCJkZWZpbml0aW9uXCIpO1xuICAgIHRoaXMudmFyaWFibGUgPSB2YXJpYWJsZTtcbiAgICB0aGlzLmFyZyA9IGFyZztcbiAgfVxuXG4gIEFzdFZhcmlhYmxlRGVmaW5pdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFzdE5vZGUucHJvdG90eXBlKTtcblxuICBBc3RWYXJpYWJsZURlZmluaXRpb24ucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGVEZWZpbml0aW9uKHRoaXMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcigpIHtcbiAgICB0aGlzLnBhcnRzID0gW107XG4gIH1cblxuICBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IucHJvdG90eXBlID0ge1xuICAgIHZpc2l0QXJndW1lbnQoYXJnKSB7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCJNYXRoLm1heChcIiwgYXJnLm1pbiwgXCIsIE1hdGgubWluKFwiLCBhcmcubWF4LCBcIiwgc3JjW3NyY09mZnNldCArIFwiLCBhcmcuaW5kZXgsIFwiXSkpXCIpO1xuICAgIH0sXG5cbiAgICB2aXNpdFZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCJ2XCIsIHZhcmlhYmxlLmluZGV4KTtcbiAgICB9LFxuXG4gICAgdmlzaXRMaXRlcmFsKGxpdGVyYWwpIHtcbiAgICAgIHRoaXMucGFydHMucHVzaChsaXRlcmFsLm51bWJlcik7XG4gICAgfSxcblxuICAgIHZpc2l0QmluYXJ5T3BlcmF0aW9uKG9wZXJhdGlvbikge1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiKFwiKTtcbiAgICAgIG9wZXJhdGlvbi5hcmcxLnZpc2l0KHRoaXMpO1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiIFwiLCBvcGVyYXRpb24ub3AsIFwiIFwiKTtcbiAgICAgIG9wZXJhdGlvbi5hcmcyLnZpc2l0KHRoaXMpO1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiKVwiKTtcbiAgICB9LFxuXG4gICAgdmlzaXRWYXJpYWJsZURlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwidmFyIFwiKTtcbiAgICAgIGRlZmluaXRpb24udmFyaWFibGUudmlzaXQodGhpcyk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCIgPSBcIik7XG4gICAgICBkZWZpbml0aW9uLmFyZy52aXNpdCh0aGlzKTtcbiAgICAgIHRoaXMucGFydHMucHVzaChcIjtcIik7XG4gICAgfSxcblxuICAgIHZpc2l0TWluKG1heCkge1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiTWF0aC5taW4oXCIpO1xuICAgICAgbWF4LmFyZy52aXNpdCh0aGlzKTtcbiAgICAgIHRoaXMucGFydHMucHVzaChcIiwgXCIsIG1heC5tYXgsIFwiKVwiKTtcbiAgICB9LFxuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJ0cy5qb2luKFwiXCIpO1xuICAgIH1cblxuICB9O1xuXG4gIGZ1bmN0aW9uIGJ1aWxkQWRkT3BlcmF0aW9uKG51bTEsIG51bTIpIHtcbiAgICBpZiAobnVtMi50eXBlID09PSBcImxpdGVyYWxcIiAmJiBudW0yLm51bWJlciA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bTE7XG4gICAgfVxuXG4gICAgaWYgKG51bTEudHlwZSA9PT0gXCJsaXRlcmFsXCIgJiYgbnVtMS5udW1iZXIgPT09IDApIHtcbiAgICAgIHJldHVybiBudW0yO1xuICAgIH1cblxuICAgIGlmIChudW0yLnR5cGUgPT09IFwibGl0ZXJhbFwiICYmIG51bTEudHlwZSA9PT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbChudW0xLm51bWJlciArIG51bTIubnVtYmVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbihcIitcIiwgbnVtMSwgbnVtMiwgbnVtMS5taW4gKyBudW0yLm1pbiwgbnVtMS5tYXggKyBudW0yLm1heCk7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZE11bE9wZXJhdGlvbihudW0xLCBudW0yKSB7XG4gICAgaWYgKG51bTIudHlwZSA9PT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgIGlmIChudW0yLm51bWJlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7XG4gICAgICB9IGVsc2UgaWYgKG51bTIubnVtYmVyID09PSAxKSB7XG4gICAgICAgIHJldHVybiBudW0xO1xuICAgICAgfSBlbHNlIGlmIChudW0xLnR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbChudW0xLm51bWJlciAqIG51bTIubnVtYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobnVtMS50eXBlID09PSBcImxpdGVyYWxcIikge1xuICAgICAgaWYgKG51bTEubnVtYmVyID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbCgwKTtcbiAgICAgIH0gZWxzZSBpZiAobnVtMS5udW1iZXIgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG51bTI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1pbiA9IE1hdGgubWluKG51bTEubWluICogbnVtMi5taW4sIG51bTEubWluICogbnVtMi5tYXgsIG51bTEubWF4ICogbnVtMi5taW4sIG51bTEubWF4ICogbnVtMi5tYXgpO1xuICAgIHZhciBtYXggPSBNYXRoLm1heChudW0xLm1pbiAqIG51bTIubWluLCBudW0xLm1pbiAqIG51bTIubWF4LCBudW0xLm1heCAqIG51bTIubWluLCBudW0xLm1heCAqIG51bTIubWF4KTtcbiAgICByZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbihcIipcIiwgbnVtMSwgbnVtMiwgbWluLCBtYXgpO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRTdWJPcGVyYXRpb24obnVtMSwgbnVtMikge1xuICAgIGlmIChudW0yLnR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICBpZiAobnVtMi5udW1iZXIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bTE7XG4gICAgICB9IGVsc2UgaWYgKG51bTEudHlwZSA9PT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKG51bTEubnVtYmVyIC0gbnVtMi5udW1iZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChudW0yLnR5cGUgPT09IFwiYmluYXJ5XCIgJiYgbnVtMi5vcCA9PT0gXCItXCIgJiYgbnVtMS50eXBlID09PSBcImxpdGVyYWxcIiAmJiBudW0xLm51bWJlciA9PT0gMSAmJiBudW0yLmFyZzEudHlwZSA9PT0gXCJsaXRlcmFsXCIgJiYgbnVtMi5hcmcxLm51bWJlciA9PT0gMSkge1xuICAgICAgcmV0dXJuIG51bTIuYXJnMjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbihcIi1cIiwgbnVtMSwgbnVtMiwgbnVtMS5taW4gLSBudW0yLm1heCwgbnVtMS5tYXggLSBudW0yLm1pbik7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZE1pbk9wZXJhdGlvbihudW0xLCBtYXgpIHtcbiAgICBpZiAobnVtMS5taW4gPj0gbWF4KSB7XG4gICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobWF4KTtcbiAgICB9IGVsc2UgaWYgKG51bTEubWF4IDw9IG1heCkge1xuICAgICAgcmV0dXJuIG51bTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBc3RNaW4obnVtMSwgbWF4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFBvc3RTY3JpcHRDb21waWxlcigpIHt9XG5cbiAgUG9zdFNjcmlwdENvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgICBjb21waWxlOiBmdW5jdGlvbiBQb3N0U2NyaXB0Q29tcGlsZXJfY29tcGlsZShjb2RlLCBkb21haW4sIHJhbmdlKSB7XG4gICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgIHZhciBpbnN0cnVjdGlvbnMgPSBbXTtcbiAgICAgIHZhciBpbnB1dFNpemUgPSBkb21haW4ubGVuZ3RoID4+IDEsXG4gICAgICAgICAgb3V0cHV0U2l6ZSA9IHJhbmdlLmxlbmd0aCA+PiAxO1xuICAgICAgdmFyIGxhc3RSZWdpc3RlciA9IDA7XG4gICAgICB2YXIgbiwgajtcbiAgICAgIHZhciBudW0xLCBudW0yLCBhc3QxLCBhc3QyLCB0bXBWYXIsIGl0ZW07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTaXplOyBpKyspIHtcbiAgICAgICAgc3RhY2sucHVzaChuZXcgQXN0QXJndW1lbnQoaSwgZG9tYWluW2kgKiAyXSwgZG9tYWluW2kgKiAyICsgMV0pKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gY29kZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGl0ZW0gPSBjb2RlW2ldO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHN0YWNrLnB1c2gobmV3IEFzdExpdGVyYWwoaXRlbSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChpdGVtKSB7XG4gICAgICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bTIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYnVpbGRBZGRPcGVyYXRpb24obnVtMSwgbnVtMikpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiY3ZyXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibXVsXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbnVtMiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChidWlsZE11bE9wZXJhdGlvbihudW0xLCBudW0yKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJzdWJcIjpcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBudW0yID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkU3ViT3BlcmF0aW9uKG51bTEsIG51bTIpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImV4Y2hcIjpcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3QxID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhc3QyID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFzdDEsIGFzdDIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwicG9wXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJpbmRleFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKG51bTEudHlwZSAhPT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG4gPSBudW0xLm51bWJlcjtcblxuICAgICAgICAgICAgaWYgKG4gPCAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8IHN0YWNrLmxlbmd0aCA8IG4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzdDEgPSBzdGFja1tzdGFjay5sZW5ndGggLSBuIC0gMV07XG5cbiAgICAgICAgICAgIGlmIChhc3QxLnR5cGUgPT09IFwibGl0ZXJhbFwiIHx8IGFzdDEudHlwZSA9PT0gXCJ2YXJcIikge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGFzdDEpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG1wVmFyID0gbmV3IEFzdFZhcmlhYmxlKGxhc3RSZWdpc3RlcisrLCBhc3QxLm1pbiwgYXN0MS5tYXgpO1xuICAgICAgICAgICAgc3RhY2tbc3RhY2subGVuZ3RoIC0gbiAtIDFdID0gdG1wVmFyO1xuICAgICAgICAgICAgc3RhY2sucHVzaCh0bXBWYXIpO1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2gobmV3IEFzdFZhcmlhYmxlRGVmaW5pdGlvbih0bXBWYXIsIGFzdDEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImR1cFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29kZVtpICsgMV0gPT09IFwibnVtYmVyXCIgJiYgY29kZVtpICsgMl0gPT09IFwiZ3RcIiAmJiBjb2RlW2kgKyAzXSA9PT0gaSArIDcgJiYgY29kZVtpICsgNF0gPT09IFwianpcIiAmJiBjb2RlW2kgKyA1XSA9PT0gXCJwb3BcIiAmJiBjb2RlW2kgKyA2XSA9PT0gY29kZVtpICsgMV0pIHtcbiAgICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKG51bTEsIGNvZGVbaSArIDFdKSk7XG4gICAgICAgICAgICAgIGkgKz0gNjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzdDEgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgaWYgKGFzdDEudHlwZSA9PT0gXCJsaXRlcmFsXCIgfHwgYXN0MS50eXBlID09PSBcInZhclwiKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goYXN0MSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0bXBWYXIgPSBuZXcgQXN0VmFyaWFibGUobGFzdFJlZ2lzdGVyKyssIGFzdDEubWluLCBhc3QxLm1heCk7XG4gICAgICAgICAgICBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA9IHRtcFZhcjtcbiAgICAgICAgICAgIHN0YWNrLnB1c2godG1wVmFyKTtcbiAgICAgICAgICAgIGluc3RydWN0aW9ucy5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24odG1wVmFyLCBhc3QxKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJyb2xsXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbnVtMiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAobnVtMi50eXBlICE9PSBcImxpdGVyYWxcIiB8fCBudW0xLnR5cGUgIT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBqID0gbnVtMi5udW1iZXI7XG4gICAgICAgICAgICBuID0gbnVtMS5udW1iZXI7XG5cbiAgICAgICAgICAgIGlmIChuIDw9IDAgfHwgIU51bWJlci5pc0ludGVnZXIobikgfHwgIU51bWJlci5pc0ludGVnZXIoaikgfHwgc3RhY2subGVuZ3RoIDwgbikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaiA9IChqICUgbiArIG4pICUgbjtcblxuICAgICAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHN0YWNrLCBzdGFjay5zcGxpY2Uoc3RhY2subGVuZ3RoIC0gbiwgbiAtIGopKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFjay5sZW5ndGggIT09IG91dHB1dFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGluc3RydWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xuICAgICAgICB2YXIgc3RhdGVtZW50QnVpbGRlciA9IG5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24udmlzaXQoc3RhdGVtZW50QnVpbGRlcik7XG4gICAgICAgIHJlc3VsdC5wdXNoKHN0YXRlbWVudEJ1aWxkZXIudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcbiAgICAgIHN0YWNrLmZvckVhY2goZnVuY3Rpb24gKGV4cHIsIGkpIHtcbiAgICAgICAgdmFyIHN0YXRlbWVudEJ1aWxkZXIgPSBuZXcgRXhwcmVzc2lvbkJ1aWxkZXJWaXNpdG9yKCk7XG4gICAgICAgIGV4cHIudmlzaXQoc3RhdGVtZW50QnVpbGRlcik7XG4gICAgICAgIHZhciBtaW4gPSByYW5nZVtpICogMl0sXG4gICAgICAgICAgICBtYXggPSByYW5nZVtpICogMiArIDFdO1xuICAgICAgICB2YXIgb3V0ID0gW3N0YXRlbWVudEJ1aWxkZXIudG9TdHJpbmcoKV07XG5cbiAgICAgICAgaWYgKG1pbiA+IGV4cHIubWluKSB7XG4gICAgICAgICAgb3V0LnVuc2hpZnQoXCJNYXRoLm1heChcIiwgbWluLCBcIiwgXCIpO1xuICAgICAgICAgIG91dC5wdXNoKFwiKVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXggPCBleHByLm1heCkge1xuICAgICAgICAgIG91dC51bnNoaWZ0KFwiTWF0aC5taW4oXCIsIG1heCwgXCIsIFwiKTtcbiAgICAgICAgICBvdXQucHVzaChcIilcIik7XG4gICAgICAgIH1cblxuICAgICAgICBvdXQudW5zaGlmdChcImRlc3RbZGVzdE9mZnNldCArIFwiLCBpLCBcIl0gPSBcIik7XG4gICAgICAgIG91dC5wdXNoKFwiO1wiKTtcbiAgICAgICAgcmVzdWx0LnB1c2gob3V0LmpvaW4oXCJcIikpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICB9O1xuICByZXR1cm4gUG9zdFNjcmlwdENvbXBpbGVyO1xufSgpO1xuXG5leHBvcnRzLlBvc3RTY3JpcHRDb21waWxlciA9IFBvc3RTY3JpcHRDb21waWxlcjtcblxuLyoqKi8gfSksXG4vKiA0MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Qb3N0U2NyaXB0UGFyc2VyID0gZXhwb3J0cy5Qb3N0U2NyaXB0TGV4ZXIgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbmNsYXNzIFBvc3RTY3JpcHRQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihsZXhlcikge1xuICAgIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgICB0aGlzLm9wZXJhdG9ycyA9IFtdO1xuICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgIHRoaXMucHJldiA9IG51bGw7XG4gIH1cblxuICBuZXh0VG9rZW4oKSB7XG4gICAgdGhpcy5wcmV2ID0gdGhpcy50b2tlbjtcbiAgICB0aGlzLnRva2VuID0gdGhpcy5sZXhlci5nZXRUb2tlbigpO1xuICB9XG5cbiAgYWNjZXB0KHR5cGUpIHtcbiAgICBpZiAodGhpcy50b2tlbi50eXBlID09PSB0eXBlKSB7XG4gICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZXhwZWN0KHR5cGUpIHtcbiAgICBpZiAodGhpcy5hY2NlcHQodHlwZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kICR7dGhpcy50b2tlbi50eXBlfSBleHBlY3RlZCAke3R5cGV9LmApO1xuICB9XG5cbiAgcGFyc2UoKSB7XG4gICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5MQlJBQ0UpO1xuICAgIHRoaXMucGFyc2VCbG9jaygpO1xuICAgIHRoaXMuZXhwZWN0KFBvc3RTY3JpcHRUb2tlblR5cGVzLlJCUkFDRSk7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JzO1xuICB9XG5cbiAgcGFyc2VCbG9jaygpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLk5VTUJFUikpIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFjY2VwdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5PUEVSQVRPUikpIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFjY2VwdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5MQlJBQ0UpKSB7XG4gICAgICAgIHRoaXMucGFyc2VDb25kaXRpb24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJzZUNvbmRpdGlvbigpIHtcbiAgICBjb25zdCBjb25kaXRpb25Mb2NhdGlvbiA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDtcbiAgICB0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsIG51bGwpO1xuICAgIHRoaXMucGFyc2VCbG9jaygpO1xuICAgIHRoaXMuZXhwZWN0KFBvc3RTY3JpcHRUb2tlblR5cGVzLlJCUkFDRSk7XG5cbiAgICBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuSUYpKSB7XG4gICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbl0gPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbiArIDFdID0gXCJqelwiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFKSkge1xuICAgICAgY29uc3QganVtcExvY2F0aW9uID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoO1xuICAgICAgdGhpcy5vcGVyYXRvcnMucHVzaChudWxsLCBudWxsKTtcbiAgICAgIGNvbnN0IGVuZE9mVHJ1ZSA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDtcbiAgICAgIHRoaXMucGFyc2VCbG9jaygpO1xuICAgICAgdGhpcy5leHBlY3QoUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFKTtcbiAgICAgIHRoaXMuZXhwZWN0KFBvc3RTY3JpcHRUb2tlblR5cGVzLklGRUxTRSk7XG4gICAgICB0aGlzLm9wZXJhdG9yc1tqdW1wTG9jYXRpb25dID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoO1xuICAgICAgdGhpcy5vcGVyYXRvcnNbanVtcExvY2F0aW9uICsgMV0gPSBcImpcIjtcbiAgICAgIHRoaXMub3BlcmF0b3JzW2NvbmRpdGlvbkxvY2F0aW9uXSA9IGVuZE9mVHJ1ZTtcbiAgICAgIHRoaXMub3BlcmF0b3JzW2NvbmRpdGlvbkxvY2F0aW9uICsgMV0gPSBcImp6XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLlwiKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlBvc3RTY3JpcHRQYXJzZXIgPSBQb3N0U2NyaXB0UGFyc2VyO1xuY29uc3QgUG9zdFNjcmlwdFRva2VuVHlwZXMgPSB7XG4gIExCUkFDRTogMCxcbiAgUkJSQUNFOiAxLFxuICBOVU1CRVI6IDIsXG4gIE9QRVJBVE9SOiAzLFxuICBJRjogNCxcbiAgSUZFTFNFOiA1XG59O1xuXG5jb25zdCBQb3N0U2NyaXB0VG9rZW4gPSBmdW5jdGlvbiBQb3N0U2NyaXB0VG9rZW5DbG9zdXJlKCkge1xuICBjb25zdCBvcENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBjbGFzcyBQb3N0U2NyaXB0VG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRPcGVyYXRvcihvcCkge1xuICAgICAgY29uc3Qgb3BWYWx1ZSA9IG9wQ2FjaGVbb3BdO1xuXG4gICAgICBpZiAob3BWYWx1ZSkge1xuICAgICAgICByZXR1cm4gb3BWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wQ2FjaGVbb3BdID0gbmV3IFBvc3RTY3JpcHRUb2tlbihQb3N0U2NyaXB0VG9rZW5UeXBlcy5PUEVSQVRPUiwgb3ApO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgTEJSQUNFKCkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiTEJSQUNFXCIsIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFLCBcIntcIikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgUkJSQUNFKCkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiUkJSQUNFXCIsIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFLCBcIn1cIikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgSUYoKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJJRlwiLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGLCBcIklGXCIpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IElGRUxTRSgpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIklGRUxTRVwiLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGRUxTRSwgXCJJRkVMU0VcIikpO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbjtcbn0oKTtcblxuY2xhc3MgUG9zdFNjcmlwdExleGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgIHRoaXMuc3RyQnVmID0gW107XG4gIH1cblxuICBuZXh0Q2hhcigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Q2hhciA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgfVxuXG4gIGdldFRva2VuKCkge1xuICAgIGxldCBjb21tZW50ID0gZmFsc2U7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoY2ggPCAwKSB7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5FT0Y7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgIGlmIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCkge1xuICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyNSkge1xuICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoISgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjaCB8IDApIHtcbiAgICAgIGNhc2UgMHgzMDpcbiAgICAgIGNhc2UgMHgzMTpcbiAgICAgIGNhc2UgMHgzMjpcbiAgICAgIGNhc2UgMHgzMzpcbiAgICAgIGNhc2UgMHgzNDpcbiAgICAgIGNhc2UgMHgzNTpcbiAgICAgIGNhc2UgMHgzNjpcbiAgICAgIGNhc2UgMHgzNzpcbiAgICAgIGNhc2UgMHgzODpcbiAgICAgIGNhc2UgMHgzOTpcbiAgICAgIGNhc2UgMHgyYjpcbiAgICAgIGNhc2UgMHgyZDpcbiAgICAgIGNhc2UgMHgyZTpcbiAgICAgICAgcmV0dXJuIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTlVNQkVSLCB0aGlzLmdldE51bWJlcigpKTtcblxuICAgICAgY2FzZSAweDdiOlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uTEJSQUNFO1xuXG4gICAgICBjYXNlIDB4N2Q6XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5SQlJBQ0U7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgc3RyQnVmWzBdID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NWEgfHwgY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdhKSkge1xuICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ciA9IHN0ckJ1Zi5qb2luKFwiXCIpO1xuXG4gICAgc3dpdGNoIChzdHIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSBcImlmXCI6XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUY7XG5cbiAgICAgIGNhc2UgXCJpZmVsc2VcIjpcbiAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRkVMU0U7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uZ2V0T3BlcmF0b3Ioc3RyKTtcbiAgICB9XG4gIH1cblxuICBnZXROdW1iZXIoKSB7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcbiAgICBjb25zdCBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICBzdHJCdWZbMF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDApIHtcbiAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkgfHwgY2ggPT09IDB4MmQgfHwgY2ggPT09IDB4MmUpIHtcbiAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KHN0ckJ1Zi5qb2luKFwiXCIpKTtcblxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXI6ICR7dmFsdWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Qb3N0U2NyaXB0TGV4ZXIgPSBQb3N0U2NyaXB0TGV4ZXI7XG5cbi8qKiovIH0pLFxuLyogNDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTXVybXVySGFzaDNfNjQgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IFNFRUQgPSAweGMzZDJlMWYwO1xuY29uc3QgTUFTS19ISUdIID0gMHhmZmZmMDAwMDtcbmNvbnN0IE1BU0tfTE9XID0gMHhmZmZmO1xuXG5jbGFzcyBNdXJtdXJIYXNoM182NCB7XG4gIGNvbnN0cnVjdG9yKHNlZWQpIHtcbiAgICB0aGlzLmgxID0gc2VlZCA/IHNlZWQgJiAweGZmZmZmZmZmIDogU0VFRDtcbiAgICB0aGlzLmgyID0gc2VlZCA/IHNlZWQgJiAweGZmZmZmZmZmIDogU0VFRDtcbiAgfVxuXG4gIHVwZGF0ZShpbnB1dCkge1xuICAgIGxldCBkYXRhLCBsZW5ndGg7XG5cbiAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKShpbnB1dCkpIHtcbiAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShpbnB1dC5sZW5ndGggKiAyKTtcbiAgICAgIGxlbmd0aCA9IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGlucHV0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29kZSA9IGlucHV0LmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgICAgaWYgKGNvZGUgPD0gMHhmZikge1xuICAgICAgICAgIGRhdGFbbGVuZ3RoKytdID0gY29kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhW2xlbmd0aCsrXSA9IGNvZGUgPj4+IDg7XG4gICAgICAgICAgZGF0YVtsZW5ndGgrK10gPSBjb2RlICYgMHhmZjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKGlucHV0KSkge1xuICAgICAgZGF0YSA9IGlucHV0O1xuICAgICAgbGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBkYXRhIGZvcm1hdCBpbiBNdXJtdXJIYXNoM182NF91cGRhdGUuIFwiICsgXCJJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBibG9ja0NvdW50cyA9IGxlbmd0aCA+PiAyO1xuICAgIGNvbnN0IHRhaWxMZW5ndGggPSBsZW5ndGggLSBibG9ja0NvdW50cyAqIDQ7XG4gICAgY29uc3QgZGF0YVVpbnQzMiA9IG5ldyBVaW50MzJBcnJheShkYXRhLmJ1ZmZlciwgMCwgYmxvY2tDb3VudHMpO1xuICAgIGxldCBrMSA9IDAsXG4gICAgICAgIGsyID0gMDtcbiAgICBsZXQgaDEgPSB0aGlzLmgxLFxuICAgICAgICBoMiA9IHRoaXMuaDI7XG4gICAgY29uc3QgQzEgPSAweGNjOWUyZDUxLFxuICAgICAgICAgIEMyID0gMHgxYjg3MzU5MztcbiAgICBjb25zdCBDMV9MT1cgPSBDMSAmIE1BU0tfTE9XLFxuICAgICAgICAgIEMyX0xPVyA9IEMyICYgTUFTS19MT1c7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2NrQ291bnRzOyBpKyspIHtcbiAgICAgIGlmIChpICYgMSkge1xuICAgICAgICBrMSA9IGRhdGFVaW50MzJbaV07XG4gICAgICAgIGsxID0gazEgKiBDMSAmIE1BU0tfSElHSCB8IGsxICogQzFfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGsxID0gazEgPDwgMTUgfCBrMSA+Pj4gMTc7XG4gICAgICAgIGsxID0gazEgKiBDMiAmIE1BU0tfSElHSCB8IGsxICogQzJfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGgxIF49IGsxO1xuICAgICAgICBoMSA9IGgxIDw8IDEzIHwgaDEgPj4+IDE5O1xuICAgICAgICBoMSA9IGgxICogNSArIDB4ZTY1NDZiNjQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrMiA9IGRhdGFVaW50MzJbaV07XG4gICAgICAgIGsyID0gazIgKiBDMSAmIE1BU0tfSElHSCB8IGsyICogQzFfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGsyID0gazIgPDwgMTUgfCBrMiA+Pj4gMTc7XG4gICAgICAgIGsyID0gazIgKiBDMiAmIE1BU0tfSElHSCB8IGsyICogQzJfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGgyIF49IGsyO1xuICAgICAgICBoMiA9IGgyIDw8IDEzIHwgaDIgPj4+IDE5O1xuICAgICAgICBoMiA9IGgyICogNSArIDB4ZTY1NDZiNjQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgazEgPSAwO1xuXG4gICAgc3dpdGNoICh0YWlsTGVuZ3RoKSB7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGsxIF49IGRhdGFbYmxvY2tDb3VudHMgKiA0ICsgMl0gPDwgMTY7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgazEgXj0gZGF0YVtibG9ja0NvdW50cyAqIDQgKyAxXSA8PCA4O1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGsxIF49IGRhdGFbYmxvY2tDb3VudHMgKiA0XTtcbiAgICAgICAgazEgPSBrMSAqIEMxICYgTUFTS19ISUdIIHwgazEgKiBDMV9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgazEgPSBrMSA8PCAxNSB8IGsxID4+PiAxNztcbiAgICAgICAgazEgPSBrMSAqIEMyICYgTUFTS19ISUdIIHwgazEgKiBDMl9MT1cgJiBNQVNLX0xPVztcblxuICAgICAgICBpZiAoYmxvY2tDb3VudHMgJiAxKSB7XG4gICAgICAgICAgaDEgXj0gazE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaDIgXj0gazE7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHRoaXMuaDEgPSBoMTtcbiAgICB0aGlzLmgyID0gaDI7XG4gIH1cblxuICBoZXhkaWdlc3QoKSB7XG4gICAgbGV0IGgxID0gdGhpcy5oMSxcbiAgICAgICAgaDIgPSB0aGlzLmgyO1xuICAgIGgxIF49IGgyID4+PiAxO1xuICAgIGgxID0gaDEgKiAweGVkNTU4Y2NkICYgTUFTS19ISUdIIHwgaDEgKiAweDhjY2QgJiBNQVNLX0xPVztcbiAgICBoMiA9IGgyICogMHhmZjUxYWZkNyAmIE1BU0tfSElHSCB8ICgoaDIgPDwgMTYgfCBoMSA+Pj4gMTYpICogMHhhZmQ3ZWQ1NSAmIE1BU0tfSElHSCkgPj4+IDE2O1xuICAgIGgxIF49IGgyID4+PiAxO1xuICAgIGgxID0gaDEgKiAweDFhODVlYzUzICYgTUFTS19ISUdIIHwgaDEgKiAweGVjNTMgJiBNQVNLX0xPVztcbiAgICBoMiA9IGgyICogMHhjNGNlYjlmZSAmIE1BU0tfSElHSCB8ICgoaDIgPDwgMTYgfCBoMSA+Pj4gMTYpICogMHhiOWZlMWE4NSAmIE1BU0tfSElHSCkgPj4+IDE2O1xuICAgIGgxIF49IGgyID4+PiAxO1xuICAgIGNvbnN0IGhleDEgPSAoaDEgPj4+IDApLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICBoZXgyID0gKGgyID4+PiAwKS50b1N0cmluZygxNik7XG4gICAgcmV0dXJuIGhleDEucGFkU3RhcnQoOCwgXCIwXCIpICsgaGV4Mi5wYWRTdGFydCg4LCBcIjBcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLk11cm11ckhhc2gzXzY0ID0gTXVybXVySGFzaDNfNjQ7XG5cbi8qKiovIH0pLFxuLyogNDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUERGSW1hZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29sb3JzcGFjZSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjMpO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTIpO1xuXG52YXIgX2pwZWdfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfanB4ID0gX193X3BkZmpzX3JlcXVpcmVfXygyMSk7XG5cbnZhciBQREZJbWFnZSA9IGZ1bmN0aW9uIFBERkltYWdlQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gZGVjb2RlQW5kQ2xhbXAodmFsdWUsIGFkZGVuZCwgY29lZmZpY2llbnQsIG1heCkge1xuICAgIHZhbHVlID0gYWRkZW5kICsgdmFsdWUgKiBjb2VmZmljaWVudDtcblxuICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgIHZhbHVlID0gMDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgICB2YWx1ZSA9IG1heDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiByZXNpemVJbWFnZU1hc2soc3JjLCBicGMsIHcxLCBoMSwgdzIsIGgyKSB7XG4gICAgdmFyIGxlbmd0aCA9IHcyICogaDI7XG4gICAgbGV0IGRlc3Q7XG5cbiAgICBpZiAoYnBjIDw9IDgpIHtcbiAgICAgIGRlc3QgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoYnBjIDw9IDE2KSB7XG4gICAgICBkZXN0ID0gbmV3IFVpbnQxNkFycmF5KGxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc3QgPSBuZXcgVWludDMyQXJyYXkobGVuZ3RoKTtcbiAgICB9XG5cbiAgICB2YXIgeFJhdGlvID0gdzEgLyB3MjtcbiAgICB2YXIgeVJhdGlvID0gaDEgLyBoMjtcbiAgICB2YXIgaSxcbiAgICAgICAgaixcbiAgICAgICAgcHksXG4gICAgICAgIG5ld0luZGV4ID0gMCxcbiAgICAgICAgb2xkSW5kZXg7XG4gICAgdmFyIHhTY2FsZWQgPSBuZXcgVWludDE2QXJyYXkodzIpO1xuICAgIHZhciB3MVNjYW5saW5lID0gdzE7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdzI7IGkrKykge1xuICAgICAgeFNjYWxlZFtpXSA9IE1hdGguZmxvb3IoaSAqIHhSYXRpbyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGgyOyBpKyspIHtcbiAgICAgIHB5ID0gTWF0aC5mbG9vcihpICogeVJhdGlvKSAqIHcxU2NhbmxpbmU7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCB3MjsgaisrKSB7XG4gICAgICAgIG9sZEluZGV4ID0gcHkgKyB4U2NhbGVkW2pdO1xuICAgICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVzdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIFBERkltYWdlKHtcbiAgICB4cmVmLFxuICAgIHJlcyxcbiAgICBpbWFnZSxcbiAgICBpc0lubGluZSA9IGZhbHNlLFxuICAgIHNtYXNrID0gbnVsbCxcbiAgICBtYXNrID0gbnVsbCxcbiAgICBpc01hc2sgPSBmYWxzZSxcbiAgICBwZGZGdW5jdGlvbkZhY3RvcnlcbiAgfSkge1xuICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICB2YXIgZGljdCA9IGltYWdlLmRpY3Q7XG4gICAgY29uc3QgZmlsdGVyID0gZGljdC5nZXQoXCJGaWx0ZXJcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyKSkge1xuICAgICAgc3dpdGNoIChmaWx0ZXIubmFtZSkge1xuICAgICAgICBjYXNlIFwiSlBYRGVjb2RlXCI6XG4gICAgICAgICAgdmFyIGpweEltYWdlID0gbmV3IF9qcHguSnB4SW1hZ2UoKTtcbiAgICAgICAgICBqcHhJbWFnZS5wYXJzZUltYWdlUHJvcGVydGllcyhpbWFnZS5zdHJlYW0pO1xuICAgICAgICAgIGltYWdlLnN0cmVhbS5yZXNldCgpO1xuICAgICAgICAgIGltYWdlLndpZHRoID0ganB4SW1hZ2Uud2lkdGg7XG4gICAgICAgICAgaW1hZ2UuaGVpZ2h0ID0ganB4SW1hZ2UuaGVpZ2h0O1xuICAgICAgICAgIGltYWdlLmJpdHNQZXJDb21wb25lbnQgPSBqcHhJbWFnZS5iaXRzUGVyQ29tcG9uZW50O1xuICAgICAgICAgIGltYWdlLm51bUNvbXBzID0ganB4SW1hZ2UuY29tcG9uZW50c0NvdW50O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJKQklHMkRlY29kZVwiOlxuICAgICAgICAgIGltYWdlLmJpdHNQZXJDb21wb25lbnQgPSAxO1xuICAgICAgICAgIGltYWdlLm51bUNvbXBzID0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgd2lkdGggPSBkaWN0LmdldChcIldpZHRoXCIsIFwiV1wiKTtcbiAgICBsZXQgaGVpZ2h0ID0gZGljdC5nZXQoXCJIZWlnaHRcIiwgXCJIXCIpO1xuXG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW1hZ2Uud2lkdGgpICYmIGltYWdlLndpZHRoID4gMCAmJiBOdW1iZXIuaXNJbnRlZ2VyKGltYWdlLmhlaWdodCkgJiYgaW1hZ2UuaGVpZ2h0ID4gMCAmJiAoaW1hZ2Uud2lkdGggIT09IHdpZHRoIHx8IGltYWdlLmhlaWdodCAhPT0gaGVpZ2h0KSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiUERGSW1hZ2UgLSB1c2luZyB0aGUgV2lkdGgvSGVpZ2h0IG9mIHRoZSBpbWFnZSBkYXRhLCBcIiArIFwicmF0aGVyIHRoYW4gdGhlIGltYWdlIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgd2lkdGggPSBpbWFnZS53aWR0aDtcbiAgICAgIGhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICB9XG5cbiAgICBpZiAod2lkdGggPCAxIHx8IGhlaWdodCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBpbWFnZSB3aWR0aDogJHt3aWR0aH0gb3IgaGVpZ2h0OiAke2hlaWdodH1gKTtcbiAgICB9XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy5pbnRlcnBvbGF0ZSA9IGRpY3QuZ2V0KFwiSW50ZXJwb2xhdGVcIiwgXCJJXCIpIHx8IGZhbHNlO1xuICAgIHRoaXMuaW1hZ2VNYXNrID0gZGljdC5nZXQoXCJJbWFnZU1hc2tcIiwgXCJJTVwiKSB8fCBmYWxzZTtcbiAgICB0aGlzLm1hdHRlID0gZGljdC5nZXQoXCJNYXR0ZVwiKSB8fCBmYWxzZTtcbiAgICB2YXIgYml0c1BlckNvbXBvbmVudCA9IGltYWdlLmJpdHNQZXJDb21wb25lbnQ7XG5cbiAgICBpZiAoIWJpdHNQZXJDb21wb25lbnQpIHtcbiAgICAgIGJpdHNQZXJDb21wb25lbnQgPSBkaWN0LmdldChcIkJpdHNQZXJDb21wb25lbnRcIiwgXCJCUENcIik7XG5cbiAgICAgIGlmICghYml0c1BlckNvbXBvbmVudCkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZU1hc2spIHtcbiAgICAgICAgICBiaXRzUGVyQ29tcG9uZW50ID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEJpdHMgcGVyIGNvbXBvbmVudCBtaXNzaW5nIGluIGltYWdlOiAke3RoaXMuaW1hZ2VNYXNrfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5icGMgPSBiaXRzUGVyQ29tcG9uZW50O1xuXG4gICAgaWYgKCF0aGlzLmltYWdlTWFzaykge1xuICAgICAgdmFyIGNvbG9yU3BhY2UgPSBkaWN0LmdldChcIkNvbG9yU3BhY2VcIiwgXCJDU1wiKTtcblxuICAgICAgaWYgKCFjb2xvclNwYWNlKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkpQWCBpbWFnZXMgKHdoaWNoIGRvIG5vdCByZXF1aXJlIGNvbG9yIHNwYWNlcylcIik7XG5cbiAgICAgICAgc3dpdGNoIChpbWFnZS5udW1Db21wcykge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkRldmljZUdyYXlcIik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkRldmljZVJHQlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgY29sb3JTcGFjZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRGV2aWNlQ01ZS1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSlBYIGltYWdlcyB3aXRoICR7aW1hZ2UubnVtQ29tcHN9IGAgKyBcImNvbG9yIGNvbXBvbmVudHMgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzb3VyY2VzID0gaXNJbmxpbmUgPyByZXMgOiBudWxsO1xuICAgICAgdGhpcy5jb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5wYXJzZShjb2xvclNwYWNlLCB4cmVmLCByZXNvdXJjZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICB0aGlzLm51bUNvbXBzID0gdGhpcy5jb2xvclNwYWNlLm51bUNvbXBzO1xuICAgIH1cblxuICAgIHRoaXMuZGVjb2RlID0gZGljdC5nZXRBcnJheShcIkRlY29kZVwiLCBcIkRcIik7XG4gICAgdGhpcy5uZWVkc0RlY29kZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuZGVjb2RlICYmICh0aGlzLmNvbG9yU3BhY2UgJiYgIXRoaXMuY29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsIGJpdHNQZXJDb21wb25lbnQpIHx8IGlzTWFzayAmJiAhX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsIDEpKSkge1xuICAgICAgdGhpcy5uZWVkc0RlY29kZSA9IHRydWU7XG4gICAgICB2YXIgbWF4ID0gKDEgPDwgYml0c1BlckNvbXBvbmVudCkgLSAxO1xuICAgICAgdGhpcy5kZWNvZGVDb2VmZmljaWVudHMgPSBbXTtcbiAgICAgIHRoaXMuZGVjb2RlQWRkZW5kcyA9IFtdO1xuICAgICAgY29uc3QgaXNJbmRleGVkID0gdGhpcy5jb2xvclNwYWNlICYmIHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSBcIkluZGV4ZWRcIjtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdGhpcy5kZWNvZGUubGVuZ3RoOyBpICs9IDIsICsraikge1xuICAgICAgICB2YXIgZG1pbiA9IHRoaXMuZGVjb2RlW2ldO1xuICAgICAgICB2YXIgZG1heCA9IHRoaXMuZGVjb2RlW2kgKyAxXTtcbiAgICAgICAgdGhpcy5kZWNvZGVDb2VmZmljaWVudHNbal0gPSBpc0luZGV4ZWQgPyAoZG1heCAtIGRtaW4pIC8gbWF4IDogZG1heCAtIGRtaW47XG4gICAgICAgIHRoaXMuZGVjb2RlQWRkZW5kc1tqXSA9IGlzSW5kZXhlZCA/IGRtaW4gOiBtYXggKiBkbWluO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzbWFzaykge1xuICAgICAgdGhpcy5zbWFzayA9IG5ldyBQREZJbWFnZSh7XG4gICAgICAgIHhyZWYsXG4gICAgICAgIHJlcyxcbiAgICAgICAgaW1hZ2U6IHNtYXNrLFxuICAgICAgICBpc0lubGluZSxcbiAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKG1hc2spIHtcbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKG1hc2spKSB7XG4gICAgICAgIHZhciBtYXNrRGljdCA9IG1hc2suZGljdCxcbiAgICAgICAgICAgIGltYWdlTWFzayA9IG1hc2tEaWN0LmdldChcIkltYWdlTWFza1wiLCBcIklNXCIpO1xuXG4gICAgICAgIGlmICghaW1hZ2VNYXNrKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSWdub3JpbmcgL01hc2sgaW4gaW1hZ2Ugd2l0aG91dCAvSW1hZ2VNYXNrLlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1hc2sgPSBuZXcgUERGSW1hZ2Uoe1xuICAgICAgICAgICAgeHJlZixcbiAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgIGltYWdlOiBtYXNrLFxuICAgICAgICAgICAgaXNJbmxpbmUsXG4gICAgICAgICAgICBpc01hc2s6IHRydWUsXG4gICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3RvcnlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYXNrID0gbWFzaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBQREZJbWFnZS5idWlsZEltYWdlID0gZnVuY3Rpb24gKHtcbiAgICB4cmVmLFxuICAgIHJlcyxcbiAgICBpbWFnZSxcbiAgICBpc0lubGluZSA9IGZhbHNlLFxuICAgIHBkZkZ1bmN0aW9uRmFjdG9yeVxuICB9KSB7XG4gICAgY29uc3QgaW1hZ2VEYXRhID0gaW1hZ2U7XG4gICAgbGV0IHNtYXNrRGF0YSA9IG51bGw7XG4gICAgbGV0IG1hc2tEYXRhID0gbnVsbDtcbiAgICBjb25zdCBzbWFzayA9IGltYWdlLmRpY3QuZ2V0KFwiU01hc2tcIik7XG4gICAgY29uc3QgbWFzayA9IGltYWdlLmRpY3QuZ2V0KFwiTWFza1wiKTtcblxuICAgIGlmIChzbWFzaykge1xuICAgICAgc21hc2tEYXRhID0gc21hc2s7XG4gICAgfSBlbHNlIGlmIChtYXNrKSB7XG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShtYXNrKSB8fCBBcnJheS5pc0FycmF5KG1hc2spKSB7XG4gICAgICAgIG1hc2tEYXRhID0gbWFzaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuc3VwcG9ydGVkIG1hc2sgZm9ybWF0LlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBQREZJbWFnZSh7XG4gICAgICB4cmVmLFxuICAgICAgcmVzLFxuICAgICAgaW1hZ2U6IGltYWdlRGF0YSxcbiAgICAgIGlzSW5saW5lLFxuICAgICAgc21hc2s6IHNtYXNrRGF0YSxcbiAgICAgIG1hc2s6IG1hc2tEYXRhLFxuICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5XG4gICAgfSkpO1xuICB9O1xuXG4gIFBERkltYWdlLmNyZWF0ZU1hc2sgPSBmdW5jdGlvbiAoe1xuICAgIGltZ0FycmF5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBpbWFnZUlzRnJvbURlY29kZVN0cmVhbSxcbiAgICBpbnZlcnNlRGVjb2RlXG4gIH0pIHtcbiAgICB2YXIgY29tcHV0ZWRMZW5ndGggPSAod2lkdGggKyA3ID4+IDMpICogaGVpZ2h0O1xuICAgIHZhciBhY3R1YWxMZW5ndGggPSBpbWdBcnJheS5ieXRlTGVuZ3RoO1xuICAgIHZhciBoYXZlRnVsbERhdGEgPSBjb21wdXRlZExlbmd0aCA9PT0gYWN0dWFsTGVuZ3RoO1xuICAgIHZhciBkYXRhLCBpO1xuXG4gICAgaWYgKGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtICYmICghaW52ZXJzZURlY29kZSB8fCBoYXZlRnVsbERhdGEpKSB7XG4gICAgICBkYXRhID0gaW1nQXJyYXk7XG4gICAgfSBlbHNlIGlmICghaW52ZXJzZURlY29kZSkge1xuICAgICAgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShhY3R1YWxMZW5ndGgpO1xuICAgICAgZGF0YS5zZXQoaW1nQXJyYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGNvbXB1dGVkTGVuZ3RoKTtcbiAgICAgIGRhdGEuc2V0KGltZ0FycmF5KTtcblxuICAgICAgZm9yIChpID0gYWN0dWFsTGVuZ3RoOyBpIDwgY29tcHV0ZWRMZW5ndGg7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZURlY29kZSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gXj0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfTtcbiAgfTtcblxuICBQREZJbWFnZS5wcm90b3R5cGUgPSB7XG4gICAgZ2V0IGRyYXdXaWR0aCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLndpZHRoLCB0aGlzLnNtYXNrICYmIHRoaXMuc21hc2sud2lkdGggfHwgMCwgdGhpcy5tYXNrICYmIHRoaXMubWFzay53aWR0aCB8fCAwKTtcbiAgICB9LFxuXG4gICAgZ2V0IGRyYXdIZWlnaHQoKSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsIHRoaXMuc21hc2sgJiYgdGhpcy5zbWFzay5oZWlnaHQgfHwgMCwgdGhpcy5tYXNrICYmIHRoaXMubWFzay5oZWlnaHQgfHwgMCk7XG4gICAgfSxcblxuICAgIGRlY29kZUJ1ZmZlcihidWZmZXIpIHtcbiAgICAgIHZhciBicGMgPSB0aGlzLmJwYztcbiAgICAgIHZhciBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG4gICAgICB2YXIgZGVjb2RlQWRkZW5kcyA9IHRoaXMuZGVjb2RlQWRkZW5kcztcbiAgICAgIHZhciBkZWNvZGVDb2VmZmljaWVudHMgPSB0aGlzLmRlY29kZUNvZWZmaWNpZW50cztcbiAgICAgIHZhciBtYXggPSAoMSA8PCBicGMpIC0gMTtcbiAgICAgIHZhciBpLCBpaTtcblxuICAgICAgaWYgKGJwYyA9PT0gMSkge1xuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGJ1ZmZlci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgYnVmZmVyW2ldID0gKyFidWZmZXJbaV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmRleCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gdGhpcy53aWR0aCAqIHRoaXMuaGVpZ2h0OyBpIDwgaWk7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bUNvbXBzOyBqKyspIHtcbiAgICAgICAgICBidWZmZXJbaW5kZXhdID0gZGVjb2RlQW5kQ2xhbXAoYnVmZmVyW2luZGV4XSwgZGVjb2RlQWRkZW5kc1tqXSwgZGVjb2RlQ29lZmZpY2llbnRzW2pdLCBtYXgpO1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhidWZmZXIpIHtcbiAgICAgIHZhciBicGMgPSB0aGlzLmJwYztcblxuICAgICAgaWYgKGJwYyA9PT0gOCkge1xuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgdmFyIG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcbiAgICAgIHZhciBsZW5ndGggPSB3aWR0aCAqIGhlaWdodCAqIG51bUNvbXBzO1xuICAgICAgdmFyIGJ1ZmZlclBvcyA9IDA7XG4gICAgICBsZXQgb3V0cHV0O1xuXG4gICAgICBpZiAoYnBjIDw9IDgpIHtcbiAgICAgICAgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICAgIH0gZWxzZSBpZiAoYnBjIDw9IDE2KSB7XG4gICAgICAgIG91dHB1dCA9IG5ldyBVaW50MTZBcnJheShsZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0ID0gbmV3IFVpbnQzMkFycmF5KGxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHZhciByb3dDb21wcyA9IHdpZHRoICogbnVtQ29tcHM7XG4gICAgICB2YXIgbWF4ID0gKDEgPDwgYnBjKSAtIDE7XG4gICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgaWksXG4gICAgICAgICAgYnVmO1xuXG4gICAgICBpZiAoYnBjID09PSAxKSB7XG4gICAgICAgIHZhciBtYXNrLCBsb29wMUVuZCwgbG9vcDJFbmQ7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoZWlnaHQ7IGorKykge1xuICAgICAgICAgIGxvb3AxRW5kID0gaSArIChyb3dDb21wcyAmIH43KTtcbiAgICAgICAgICBsb29wMkVuZCA9IGkgKyByb3dDb21wcztcblxuICAgICAgICAgIHdoaWxlIChpIDwgbG9vcDFFbmQpIHtcbiAgICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcltidWZmZXJQb3MrK107XG4gICAgICAgICAgICBvdXRwdXRbaV0gPSBidWYgPj4gNyAmIDE7XG4gICAgICAgICAgICBvdXRwdXRbaSArIDFdID0gYnVmID4+IDYgJiAxO1xuICAgICAgICAgICAgb3V0cHV0W2kgKyAyXSA9IGJ1ZiA+PiA1ICYgMTtcbiAgICAgICAgICAgIG91dHB1dFtpICsgM10gPSBidWYgPj4gNCAmIDE7XG4gICAgICAgICAgICBvdXRwdXRbaSArIDRdID0gYnVmID4+IDMgJiAxO1xuICAgICAgICAgICAgb3V0cHV0W2kgKyA1XSA9IGJ1ZiA+PiAyICYgMTtcbiAgICAgICAgICAgIG91dHB1dFtpICsgNl0gPSBidWYgPj4gMSAmIDE7XG4gICAgICAgICAgICBvdXRwdXRbaSArIDddID0gYnVmICYgMTtcbiAgICAgICAgICAgIGkgKz0gODtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaSA8IGxvb3AyRW5kKSB7XG4gICAgICAgICAgICBidWYgPSBidWZmZXJbYnVmZmVyUG9zKytdO1xuICAgICAgICAgICAgbWFzayA9IDEyODtcblxuICAgICAgICAgICAgd2hpbGUgKGkgPCBsb29wMkVuZCkge1xuICAgICAgICAgICAgICBvdXRwdXRbaSsrXSA9ICshIShidWYgJiBtYXNrKTtcbiAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiaXRzID0gMDtcbiAgICAgICAgYnVmID0gMDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICBpZiAoaSAlIHJvd0NvbXBzID09PSAwKSB7XG4gICAgICAgICAgICBidWYgPSAwO1xuICAgICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2hpbGUgKGJpdHMgPCBicGMpIHtcbiAgICAgICAgICAgIGJ1ZiA9IGJ1ZiA8PCA4IHwgYnVmZmVyW2J1ZmZlclBvcysrXTtcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcmVtYWluaW5nQml0cyA9IGJpdHMgLSBicGM7XG4gICAgICAgICAgbGV0IHZhbHVlID0gYnVmID4+IHJlbWFpbmluZ0JpdHM7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgdmFsdWUgPSBtYXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb3V0cHV0W2ldID0gdmFsdWU7XG4gICAgICAgICAgYnVmID0gYnVmICYgKDEgPDwgcmVtYWluaW5nQml0cykgLSAxO1xuICAgICAgICAgIGJpdHMgPSByZW1haW5pbmdCaXRzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfSxcblxuICAgIGZpbGxPcGFjaXR5KHJnYmFCdWYsIHdpZHRoLCBoZWlnaHQsIGFjdHVhbEhlaWdodCwgaW1hZ2UpIHtcbiAgICAgIHZhciBzbWFzayA9IHRoaXMuc21hc2s7XG4gICAgICB2YXIgbWFzayA9IHRoaXMubWFzaztcbiAgICAgIHZhciBhbHBoYUJ1Ziwgc3csIHNoLCBpLCBpaSwgajtcblxuICAgICAgaWYgKHNtYXNrKSB7XG4gICAgICAgIHN3ID0gc21hc2sud2lkdGg7XG4gICAgICAgIHNoID0gc21hc2suaGVpZ2h0O1xuICAgICAgICBhbHBoYUJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheShzdyAqIHNoKTtcbiAgICAgICAgc21hc2suZmlsbEdyYXlCdWZmZXIoYWxwaGFCdWYpO1xuXG4gICAgICAgIGlmIChzdyAhPT0gd2lkdGggfHwgc2ggIT09IGhlaWdodCkge1xuICAgICAgICAgIGFscGhhQnVmID0gcmVzaXplSW1hZ2VNYXNrKGFscGhhQnVmLCBzbWFzay5icGMsIHN3LCBzaCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWFzaykge1xuICAgICAgICBpZiAobWFzayBpbnN0YW5jZW9mIFBERkltYWdlKSB7XG4gICAgICAgICAgc3cgPSBtYXNrLndpZHRoO1xuICAgICAgICAgIHNoID0gbWFzay5oZWlnaHQ7XG4gICAgICAgICAgYWxwaGFCdWYgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoc3cgKiBzaCk7XG4gICAgICAgICAgbWFzay5udW1Db21wcyA9IDE7XG4gICAgICAgICAgbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHN3ICogc2g7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICBhbHBoYUJ1ZltpXSA9IDI1NSAtIGFscGhhQnVmW2ldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdyAhPT0gd2lkdGggfHwgc2ggIT09IGhlaWdodCkge1xuICAgICAgICAgICAgYWxwaGFCdWYgPSByZXNpemVJbWFnZU1hc2soYWxwaGFCdWYsIG1hc2suYnBjLCBzdywgc2gsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1hc2spKSB7XG4gICAgICAgICAgYWxwaGFCdWYgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQpO1xuICAgICAgICAgIHZhciBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHdpZHRoICogaGVpZ2h0OyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgdmFyIG9wYWNpdHkgPSAwO1xuICAgICAgICAgICAgdmFyIGltYWdlT2Zmc2V0ID0gaSAqIG51bUNvbXBzO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtQ29tcHM7ICsraikge1xuICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbWFnZVtpbWFnZU9mZnNldCArIGpdO1xuICAgICAgICAgICAgICB2YXIgbWFza09mZnNldCA9IGogKiAyO1xuXG4gICAgICAgICAgICAgIGlmIChjb2xvciA8IG1hc2tbbWFza09mZnNldF0gfHwgY29sb3IgPiBtYXNrW21hc2tPZmZzZXQgKyAxXSkge1xuICAgICAgICAgICAgICAgIG9wYWNpdHkgPSAyNTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYWxwaGFCdWZbaV0gPSBvcGFjaXR5O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIG1hc2sgZm9ybWF0LlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWxwaGFCdWYpIHtcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IDMsIGlpID0gd2lkdGggKiBhY3R1YWxIZWlnaHQ7IGkgPCBpaTsgKytpLCBqICs9IDQpIHtcbiAgICAgICAgICByZ2JhQnVmW2pdID0gYWxwaGFCdWZbaV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGogPSAzLCBpaSA9IHdpZHRoICogYWN0dWFsSGVpZ2h0OyBpIDwgaWk7ICsraSwgaiArPSA0KSB7XG4gICAgICAgICAgcmdiYUJ1ZltqXSA9IDI1NTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1bmRvUHJlYmxlbmQoYnVmZmVyLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICB2YXIgbWF0dGUgPSB0aGlzLnNtYXNrICYmIHRoaXMuc21hc2subWF0dGU7XG5cbiAgICAgIGlmICghbWF0dGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWF0dGVSZ2IgPSB0aGlzLmNvbG9yU3BhY2UuZ2V0UmdiKG1hdHRlLCAwKTtcbiAgICAgIHZhciBtYXR0ZVIgPSBtYXR0ZVJnYlswXTtcbiAgICAgIHZhciBtYXR0ZUcgPSBtYXR0ZVJnYlsxXTtcbiAgICAgIHZhciBtYXR0ZUIgPSBtYXR0ZVJnYlsyXTtcbiAgICAgIHZhciBsZW5ndGggPSB3aWR0aCAqIGhlaWdodCAqIDQ7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgdmFyIGFscGhhID0gYnVmZmVyW2kgKyAzXTtcblxuICAgICAgICBpZiAoYWxwaGEgPT09IDApIHtcbiAgICAgICAgICBidWZmZXJbaV0gPSAyNTU7XG4gICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IDI1NTtcbiAgICAgICAgICBidWZmZXJbaSArIDJdID0gMjU1O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGsgPSAyNTUgLyBhbHBoYTtcbiAgICAgICAgYnVmZmVyW2ldID0gKGJ1ZmZlcltpXSAtIG1hdHRlUikgKiBrICsgbWF0dGVSO1xuICAgICAgICBidWZmZXJbaSArIDFdID0gKGJ1ZmZlcltpICsgMV0gLSBtYXR0ZUcpICogayArIG1hdHRlRztcbiAgICAgICAgYnVmZmVyW2kgKyAyXSA9IChidWZmZXJbaSArIDJdIC0gbWF0dGVCKSAqIGsgKyBtYXR0ZUI7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUltYWdlRGF0YShmb3JjZVJHQkEgPSBmYWxzZSkge1xuICAgICAgdmFyIGRyYXdXaWR0aCA9IHRoaXMuZHJhd1dpZHRoO1xuICAgICAgdmFyIGRyYXdIZWlnaHQgPSB0aGlzLmRyYXdIZWlnaHQ7XG4gICAgICB2YXIgaW1nRGF0YSA9IHtcbiAgICAgICAgd2lkdGg6IGRyYXdXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBkcmF3SGVpZ2h0LFxuICAgICAgICBraW5kOiAwLFxuICAgICAgICBkYXRhOiBudWxsXG4gICAgICB9O1xuICAgICAgdmFyIG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcbiAgICAgIHZhciBvcmlnaW5hbFdpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgIHZhciBvcmlnaW5hbEhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgdmFyIGJwYyA9IHRoaXMuYnBjO1xuICAgICAgdmFyIHJvd0J5dGVzID0gb3JpZ2luYWxXaWR0aCAqIG51bUNvbXBzICogYnBjICsgNyA+PiAzO1xuICAgICAgdmFyIGltZ0FycmF5O1xuXG4gICAgICBpZiAoIWZvcmNlUkdCQSkge1xuICAgICAgICB2YXIga2luZDtcblxuICAgICAgICBpZiAodGhpcy5jb2xvclNwYWNlLm5hbWUgPT09IFwiRGV2aWNlR3JheVwiICYmIGJwYyA9PT0gMSkge1xuICAgICAgICAgIGtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2xvclNwYWNlLm5hbWUgPT09IFwiRGV2aWNlUkdCXCIgJiYgYnBjID09PSA4ICYmICF0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgICAga2luZCA9IF91dGlsLkltYWdlS2luZC5SR0JfMjRCUFA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2luZCAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrICYmIGRyYXdXaWR0aCA9PT0gb3JpZ2luYWxXaWR0aCAmJiBkcmF3SGVpZ2h0ID09PSBvcmlnaW5hbEhlaWdodCkge1xuICAgICAgICAgIGltZ0RhdGEua2luZCA9IGtpbmQ7XG4gICAgICAgICAgaW1nQXJyYXkgPSB0aGlzLmdldEltYWdlQnl0ZXMob3JpZ2luYWxIZWlnaHQgKiByb3dCeXRlcyk7XG5cbiAgICAgICAgICBpZiAodGhpcy5pbWFnZSBpbnN0YW5jZW9mIF9zdHJlYW0uRGVjb2RlU3RyZWFtKSB7XG4gICAgICAgICAgICBpbWdEYXRhLmRhdGEgPSBpbWdBcnJheTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5ld0FycmF5ID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGltZ0FycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgICBuZXdBcnJheS5zZXQoaW1nQXJyYXkpO1xuICAgICAgICAgICAgaW1nRGF0YS5kYXRhID0gbmV3QXJyYXk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMubmVlZHNEZWNvZGUpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKGtpbmQgPT09IF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCwgXCJQREZJbWFnZS5jcmVhdGVJbWFnZURhdGE6IFRoZSBpbWFnZSBtdXN0IGJlIGdyYXlzY2FsZS5cIik7XG4gICAgICAgICAgICB2YXIgYnVmZmVyID0gaW1nRGF0YS5kYXRhO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICBidWZmZXJbaV0gXj0gMHhmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gaW1nRGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlIGluc3RhbmNlb2YgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0gJiYgIXRoaXMuc21hc2sgJiYgIXRoaXMubWFzaykge1xuICAgICAgICAgIGxldCBpbWFnZUxlbmd0aCA9IG9yaWdpbmFsSGVpZ2h0ICogcm93Qnl0ZXM7XG5cbiAgICAgICAgICBzd2l0Y2ggKHRoaXMuY29sb3JTcGFjZS5uYW1lKSB7XG4gICAgICAgICAgICBjYXNlIFwiRGV2aWNlR3JheVwiOlxuICAgICAgICAgICAgICBpbWFnZUxlbmd0aCAqPSAzO1xuXG4gICAgICAgICAgICBjYXNlIFwiRGV2aWNlUkdCXCI6XG4gICAgICAgICAgICBjYXNlIFwiRGV2aWNlQ01ZS1wiOlxuICAgICAgICAgICAgICBpbWdEYXRhLmtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQO1xuICAgICAgICAgICAgICBpbWdEYXRhLmRhdGEgPSB0aGlzLmdldEltYWdlQnl0ZXMoaW1hZ2VMZW5ndGgsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHJldHVybiBpbWdEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbWdBcnJheSA9IHRoaXMuZ2V0SW1hZ2VCeXRlcyhvcmlnaW5hbEhlaWdodCAqIHJvd0J5dGVzKTtcbiAgICAgIHZhciBhY3R1YWxIZWlnaHQgPSAwIHwgaW1nQXJyYXkubGVuZ3RoIC8gcm93Qnl0ZXMgKiBkcmF3SGVpZ2h0IC8gb3JpZ2luYWxIZWlnaHQ7XG4gICAgICB2YXIgY29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoaW1nQXJyYXkpO1xuICAgICAgdmFyIGFscGhhMDEsIG1heWJlVW5kb1ByZWJsZW5kO1xuXG4gICAgICBpZiAoIWZvcmNlUkdCQSAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrKSB7XG4gICAgICAgIGltZ0RhdGEua2luZCA9IF91dGlsLkltYWdlS2luZC5SR0JfMjRCUFA7XG4gICAgICAgIGltZ0RhdGEuZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkcmF3V2lkdGggKiBkcmF3SGVpZ2h0ICogMyk7XG4gICAgICAgIGFscGhhMDEgPSAwO1xuICAgICAgICBtYXliZVVuZG9QcmVibGVuZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1nRGF0YS5raW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQkFfMzJCUFA7XG4gICAgICAgIGltZ0RhdGEuZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkcmF3V2lkdGggKiBkcmF3SGVpZ2h0ICogNCk7XG4gICAgICAgIGFscGhhMDEgPSAxO1xuICAgICAgICBtYXliZVVuZG9QcmVibGVuZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlsbE9wYWNpdHkoaW1nRGF0YS5kYXRhLCBkcmF3V2lkdGgsIGRyYXdIZWlnaHQsIGFjdHVhbEhlaWdodCwgY29tcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgICB0aGlzLmRlY29kZUJ1ZmZlcihjb21wcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29sb3JTcGFjZS5maWxsUmdiKGltZ0RhdGEuZGF0YSwgb3JpZ2luYWxXaWR0aCwgb3JpZ2luYWxIZWlnaHQsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgYWN0dWFsSGVpZ2h0LCBicGMsIGNvbXBzLCBhbHBoYTAxKTtcblxuICAgICAgaWYgKG1heWJlVW5kb1ByZWJsZW5kKSB7XG4gICAgICAgIHRoaXMudW5kb1ByZWJsZW5kKGltZ0RhdGEuZGF0YSwgZHJhd1dpZHRoLCBhY3R1YWxIZWlnaHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW1nRGF0YTtcbiAgICB9LFxuXG4gICAgZmlsbEdyYXlCdWZmZXIoYnVmZmVyKSB7XG4gICAgICB2YXIgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzO1xuXG4gICAgICBpZiAobnVtQ29tcHMgIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBSZWFkaW5nIGdyYXkgc2NhbGUgZnJvbSBhIGNvbG9yIGltYWdlOiAke251bUNvbXBzfWApO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgdmFyIGJwYyA9IHRoaXMuYnBjO1xuICAgICAgdmFyIHJvd0J5dGVzID0gd2lkdGggKiBudW1Db21wcyAqIGJwYyArIDcgPj4gMztcbiAgICAgIHZhciBpbWdBcnJheSA9IHRoaXMuZ2V0SW1hZ2VCeXRlcyhoZWlnaHQgKiByb3dCeXRlcyk7XG4gICAgICB2YXIgY29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoaW1nQXJyYXkpO1xuICAgICAgdmFyIGksIGxlbmd0aDtcblxuICAgICAgaWYgKGJwYyA9PT0gMSkge1xuICAgICAgICBsZW5ndGggPSB3aWR0aCAqIGhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgYnVmZmVyW2ldID0gY29tcHNbaV0gLSAxICYgMjU1O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGJ1ZmZlcltpXSA9IC1jb21wc1tpXSAmIDI1NTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgIHRoaXMuZGVjb2RlQnVmZmVyKGNvbXBzKTtcbiAgICAgIH1cblxuICAgICAgbGVuZ3RoID0gd2lkdGggKiBoZWlnaHQ7XG4gICAgICB2YXIgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYnBjKSAtIDEpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW2ldID0gc2NhbGUgKiBjb21wc1tpXTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SW1hZ2VCeXRlcyhsZW5ndGgsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgZm9yY2VSR0IgPSBmYWxzZSkge1xuICAgICAgdGhpcy5pbWFnZS5yZXNldCgpO1xuICAgICAgdGhpcy5pbWFnZS5kcmF3V2lkdGggPSBkcmF3V2lkdGggfHwgdGhpcy53aWR0aDtcbiAgICAgIHRoaXMuaW1hZ2UuZHJhd0hlaWdodCA9IGRyYXdIZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG4gICAgICB0aGlzLmltYWdlLmZvcmNlUkdCID0gISFmb3JjZVJHQjtcbiAgICAgIHJldHVybiB0aGlzLmltYWdlLmdldEJ5dGVzKGxlbmd0aCwgdHJ1ZSk7XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBQREZJbWFnZTtcbn0oKTtcblxuZXhwb3J0cy5QREZJbWFnZSA9IFBERkltYWdlO1xuXG4vKioqLyB9KSxcbi8qIDQ1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBDYWxsYmFja0tpbmQgPSB7XG4gIFVOS05PV046IDAsXG4gIERBVEE6IDEsXG4gIEVSUk9SOiAyXG59O1xuY29uc3QgU3RyZWFtS2luZCA9IHtcbiAgVU5LTk9XTjogMCxcbiAgQ0FOQ0VMOiAxLFxuICBDQU5DRUxfQ09NUExFVEU6IDIsXG4gIENMT1NFOiAzLFxuICBFTlFVRVVFOiA0LFxuICBFUlJPUjogNSxcbiAgUFVMTDogNixcbiAgUFVMTF9DT01QTEVURTogNyxcbiAgU1RBUlRfQ09NUExFVEU6IDhcbn07XG5cbmZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gIGlmICh0eXBlb2YgcmVhc29uICE9PSBcIm9iamVjdFwiIHx8IHJlYXNvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiByZWFzb247XG4gIH1cblxuICBzd2l0Y2ggKHJlYXNvbi5uYW1lKSB7XG4gICAgY2FzZSBcIkFib3J0RXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlKTtcblxuICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgY2FzZSBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiOlxuICAgICAgcmV0dXJuIG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UsIHJlYXNvbi5zdGF0dXMpO1xuXG4gICAgY2FzZSBcIlVua25vd25FcnJvckV4Y2VwdGlvblwiOlxuICAgICAgcmV0dXJuIG5ldyBfdXRpbC5Vbmtub3duRXJyb3JFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UsIHJlYXNvbi5kZXRhaWxzKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLnRvU3RyaW5nKCkpO1xuICB9XG59XG5cbmNsYXNzIE1lc3NhZ2VIYW5kbGVyIHtcbiAgY29uc3RydWN0b3Ioc291cmNlTmFtZSwgdGFyZ2V0TmFtZSwgY29tT2JqKSB7XG4gICAgdGhpcy5zb3VyY2VOYW1lID0gc291cmNlTmFtZTtcbiAgICB0aGlzLnRhcmdldE5hbWUgPSB0YXJnZXROYW1lO1xuICAgIHRoaXMuY29tT2JqID0gY29tT2JqO1xuICAgIHRoaXMuY2FsbGJhY2tJZCA9IDE7XG4gICAgdGhpcy5zdHJlYW1JZCA9IDE7XG4gICAgdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IHRydWU7XG4gICAgdGhpcy5zdHJlYW1TaW5rcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5zdHJlYW1Db250cm9sbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5hY3Rpb25IYW5kbGVyID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHRoaXMuX29uQ29tT2JqT25NZXNzYWdlID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGE7XG5cbiAgICAgIGlmIChkYXRhLnRhcmdldE5hbWUgIT09IHRoaXMuc291cmNlTmFtZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnN0cmVhbSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzU3RyZWFtTWVzc2FnZShkYXRhKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrSWQgPSBkYXRhLmNhbGxiYWNrSWQ7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2NhbGxiYWNrSWRdO1xuXG4gICAgICAgIGlmICghY2FwYWJpbGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgJHtjYWxsYmFja0lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF07XG5cbiAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2sgPT09IENhbGxiYWNrS2luZC5EQVRBKSB7XG4gICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKGRhdGEuZGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5jYWxsYmFjayA9PT0gQ2FsbGJhY2tLaW5kLkVSUk9SKSB7XG4gICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3Rpb25IYW5kbGVyW2RhdGEuYWN0aW9uXTtcblxuICAgICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogJHtkYXRhLmFjdGlvbn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY2FsbGJhY2tJZCkge1xuICAgICAgICBjb25zdCBjYlNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgICAgIGNvbnN0IGNiVGFyZ2V0TmFtZSA9IGRhdGEuc291cmNlTmFtZTtcbiAgICAgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKGFjdGlvbihkYXRhLmRhdGEpKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWU6IGNiU291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWU6IGNiVGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFja0tpbmQuREFUQSxcbiAgICAgICAgICAgIGNhbGxiYWNrSWQ6IGRhdGEuY2FsbGJhY2tJZCxcbiAgICAgICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWU6IGNiU291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWU6IGNiVGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFja0tpbmQuRVJST1IsXG4gICAgICAgICAgICBjYWxsYmFja0lkOiBkYXRhLmNhbGxiYWNrSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zdHJlYW1JZCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYWN0aW9uKGRhdGEuZGF0YSk7XG4gICAgfTtcblxuICAgIGNvbU9iai5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gIH1cblxuICBvbihhY3Rpb25OYW1lLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgYWggPSB0aGlzLmFjdGlvbkhhbmRsZXI7XG5cbiAgICBpZiAoYWhbYWN0aW9uTmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCBcIiR7YWN0aW9uTmFtZX1cImApO1xuICAgIH1cblxuICAgIGFoW2FjdGlvbk5hbWVdID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNlbmQoYWN0aW9uTmFtZSwgZGF0YSwgdHJhbnNmZXJzKSB7XG4gICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe1xuICAgICAgc291cmNlTmFtZTogdGhpcy5zb3VyY2VOYW1lLFxuICAgICAgdGFyZ2V0TmFtZTogdGhpcy50YXJnZXROYW1lLFxuICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgZGF0YVxuICAgIH0sIHRyYW5zZmVycyk7XG4gIH1cblxuICBzZW5kV2l0aFByb21pc2UoYWN0aW9uTmFtZSwgZGF0YSwgdHJhbnNmZXJzKSB7XG4gICAgY29uc3QgY2FsbGJhY2tJZCA9IHRoaXMuY2FsbGJhY2tJZCsrO1xuICAgIGNvbnN0IGNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXSA9IGNhcGFiaWxpdHk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBzb3VyY2VOYW1lOiB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICAgIHRhcmdldE5hbWU6IHRoaXMudGFyZ2V0TmFtZSxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICBjYWxsYmFja0lkLFxuICAgICAgICBkYXRhXG4gICAgICB9LCB0cmFuc2ZlcnMpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjYXBhYmlsaXR5LnJlamVjdChleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHNlbmRXaXRoU3RyZWFtKGFjdGlvbk5hbWUsIGRhdGEsIHF1ZXVlaW5nU3RyYXRlZ3ksIHRyYW5zZmVycykge1xuICAgIGNvbnN0IHN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZCsrO1xuICAgIGNvbnN0IHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHRoaXMudGFyZ2V0TmFtZTtcbiAgICBjb25zdCBjb21PYmogPSB0aGlzLmNvbU9iajtcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIHN0YXJ0OiBjb250cm9sbGVyID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSA9IHtcbiAgICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICAgIHN0YXJ0Q2FsbDogc3RhcnRDYXBhYmlsaXR5LFxuICAgICAgICAgIHB1bGxDYWxsOiBudWxsLFxuICAgICAgICAgIGNhbmNlbENhbGw6IG51bGwsXG4gICAgICAgICAgaXNDbG9zZWQ6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBkZXNpcmVkU2l6ZTogY29udHJvbGxlci5kZXNpcmVkU2l6ZVxuICAgICAgICB9LCB0cmFuc2ZlcnMpO1xuXG4gICAgICAgIHJldHVybiBzdGFydENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgIH0sXG4gICAgICBwdWxsOiBjb250cm9sbGVyID0+IHtcbiAgICAgICAgY29uc3QgcHVsbENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsID0gcHVsbENhcGFiaWxpdHk7XG4gICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHVsbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgIH0sXG4gICAgICBjYW5jZWw6IHJlYXNvbiA9PiB7XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yLCBcImNhbmNlbCBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG4gICAgICAgIGNvbnN0IGNhbmNlbENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwgPSBjYW5jZWxDYXBhYmlsaXR5O1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5DQU5DRUwsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYW5jZWxDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICB9XG4gICAgfSwgcXVldWVpbmdTdHJhdGVneSk7XG4gIH1cblxuICBfY3JlYXRlU3RyZWFtU2luayhkYXRhKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3Rpb25IYW5kbGVyW2RhdGEuYWN0aW9uXTtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQ7XG4gICAgY29uc3Qgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICBjb25zdCB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgIGNvbnN0IGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHN0cmVhbVNpbmsgPSB7XG4gICAgICBlbnF1ZXVlKGNodW5rLCBzaXplID0gMSwgdHJhbnNmZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdERlc2lyZWRTaXplID0gdGhpcy5kZXNpcmVkU2l6ZTtcbiAgICAgICAgdGhpcy5kZXNpcmVkU2l6ZSAtPSBzaXplO1xuXG4gICAgICAgIGlmIChsYXN0RGVzaXJlZFNpemUgPiAwICYmIHRoaXMuZGVzaXJlZFNpemUgPD0gMCkge1xuICAgICAgICAgIHRoaXMuc2lua0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgdGhpcy5yZWFkeSA9IHRoaXMuc2lua0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuX3Bvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVOUVVFVUUsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgY2h1bmtcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0xPU0UsXG4gICAgICAgICAgc3RyZWFtSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKHJlYXNvbikge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShyZWFzb24gaW5zdGFuY2VvZiBFcnJvciwgXCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVSUk9SLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgc2lua0NhcGFiaWxpdHk6ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxcbiAgICAgIG9uUHVsbDogbnVsbCxcbiAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgaXNDYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgZGVzaXJlZFNpemU6IGRhdGEuZGVzaXJlZFNpemUsXG4gICAgICByZWFkeTogbnVsbFxuICAgIH07XG4gICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgc3RyZWFtU2luay5yZWFkeSA9IHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSwgc3RyZWFtU2luaykpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQ7XG4gICAgY29uc3Qgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICBjb25zdCB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgIGNvbnN0IGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuXG4gICAgc3dpdGNoIChkYXRhLnN0cmVhbSkge1xuICAgICAgY2FzZSBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFOlxuICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uc3RhcnRDYWxsLnJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsLnJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5wdWxsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5QVUxMOlxuICAgICAgICBpZiAoIXRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsXG4gICAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXS5kZXNpcmVkU2l6ZSA8PSAwICYmIGRhdGEuZGVzaXJlZFNpemUgPiAwKSB7XG4gICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgb25QdWxsXG4gICAgICAgIH0gPSB0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUob25QdWxsICYmIG9uUHVsbCgpKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsXG4gICAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5FTlFVRVVFOlxuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSwgXCJlbnF1ZXVlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyXCIpO1xuXG4gICAgICAgIGlmICh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5pc0Nsb3NlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY29udHJvbGxlci5lbnF1ZXVlKGRhdGEuY2h1bmspO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdHJlYW1LaW5kLkNMT1NFOlxuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSwgXCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlclwiKTtcblxuICAgICAgICBpZiAodGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uaXNDbG9zZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY29udHJvbGxlci5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtSWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRVJST1I6XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLCBcImVycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyXCIpO1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5jb250cm9sbGVyLmVycm9yKHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcblxuICAgICAgICB0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUlkKTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdHJlYW1LaW5kLkNBTkNFTF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtSWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuQ0FOQ0VMOlxuICAgICAgICBpZiAoIXRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgb25DYW5jZWxcbiAgICAgICAgfSA9IHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF07XG4gICAgICAgIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgcmVzb2x2ZShvbkNhbmNlbCAmJiBvbkNhbmNlbCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBkZWxldGUgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9kZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUlkKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5zdGFydENhbGwsIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsLCB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5jYW5jZWxDYWxsXS5tYXAoZnVuY3Rpb24gKGNhcGFiaWxpdHkpIHtcbiAgICAgIHJldHVybiBjYXBhYmlsaXR5ICYmIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9KSk7XG4gICAgZGVsZXRlIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdO1xuICB9XG5cbiAgX3Bvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVycykge1xuICAgIGlmICh0cmFuc2ZlcnMgJiYgdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycykge1xuICAgICAgdGhpcy5jb21PYmoucG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb21PYmoucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNvbU9iai5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gIH1cblxufVxuXG5leHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gTWVzc2FnZUhhbmRsZXI7XG5cbi8qKiovIH0pLFxuLyogNDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUERGV29ya2VyU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBQREZXb3JrZXJTdHJlYW0ge1xuICBjb25zdHJ1Y3Rvcihtc2dIYW5kbGVyKSB7XG4gICAgdGhpcy5fbXNnSGFuZGxlciA9IG1zZ0hhbmRsZXI7XG4gICAgdGhpcy5fY29udGVudExlbmd0aCA9IG51bGw7XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgfVxuXG4gIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCBcIlBERldvcmtlclN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLlwiKTtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG5ldyBQREZXb3JrZXJTdHJlYW1SZWFkZXIodGhpcy5fbXNnSGFuZGxlcik7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuICB9XG5cbiAgZ2V0UmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCkge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBQREZXb3JrZXJTdHJlYW1SYW5nZVJlYWRlcihiZWdpbiwgZW5kLCB0aGlzLl9tc2dIYW5kbGVyKTtcblxuICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyZWFkZXIpO1xuXG4gICAgcmV0dXJuIHJlYWRlcjtcbiAgfVxuXG4gIGNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikge1xuICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCk7XG5cbiAgICByZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKHJlYWRlcikge1xuICAgICAgcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZXb3JrZXJTdHJlYW0gPSBQREZXb3JrZXJTdHJlYW07XG5cbmNsYXNzIFBERldvcmtlclN0cmVhbVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKG1zZ0hhbmRsZXIpIHtcbiAgICB0aGlzLl9tc2dIYW5kbGVyID0gbXNnSGFuZGxlcjtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBudWxsO1xuICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgcmVhZGFibGVTdHJlYW0gPSB0aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKFwiR2V0UmVhZGVyXCIpO1xuXG4gICAgdGhpcy5fcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgdGhpcy5faGVhZGVyc1JlYWR5ID0gdGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJSZWFkZXJIZWFkZXJzUmVhZHlcIikudGhlbihkYXRhID0+IHtcbiAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gZGF0YS5pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBkYXRhLmlzUmFuZ2VTdXBwb3J0ZWQ7XG4gICAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gZGF0YS5jb250ZW50TGVuZ3RoO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5O1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZG9uZVxuICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZS5idWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICB9XG5cbn1cblxuY2xhc3MgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihiZWdpbiwgZW5kLCBtc2dIYW5kbGVyKSB7XG4gICAgdGhpcy5fbXNnSGFuZGxlciA9IG1zZ0hhbmRsZXI7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcblxuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbShcIkdldFJhbmdlUmVhZGVyXCIsIHtcbiAgICAgIGJlZ2luLFxuICAgICAgZW5kXG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZG9uZVxuICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZS5idWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICB9XG5cbn1cblxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZGYud29ya2VyLmpzLm1hcCIsIi8qIENvcHlyaWdodCAyMDIwIE1vemlsbGEgRm91bmRhdGlvblxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4odHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIlxuICA/IHdpbmRvd1xuICA6IHt9XG4pLnBkZmpzV29ya2VyID0gcmVxdWlyZShcIi4vcGRmLndvcmtlci5qc1wiKTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4dHJhY3RQREZTZXR0aW5ncyB7XG4gICAgcHVibGljIGNyZWF0ZU5ld0ZpbGU6IGJvb2xlYW47XG4gICAgcHVibGljIGNvcHlUb0NsaXBib2FyZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNyZWF0ZU5ld0ZpbGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvcHlUb0NsaXBib2FyZCA9IHRydWU7XG4gICAgfVxufSIsImltcG9ydCBFeHRyYWN0UERGUGx1Z2luIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB7QXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0cmFjdFBERlNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogRXh0cmFjdFBERlBsdWdpbjtcblxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IEV4dHJhY3RQREZQbHVnaW4pIHtcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB9XG5cbiAgICBkaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7Y29udGFpbmVyRWx9ID0gdGhpcztcblxuICAgICAgICBjb250YWluZXJFbC5lbXB0eSgpO1xuXG4gICAgICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwge3RleHQ6IFwiRXh0cmFjdCBIaWdobGlnaHRzIFBsdWdpblwifSk7XG4gICAgICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7dGV4dDogXCJXaGVuIGludm9rZWQsIHdpbGwgcGFyc2UgdGhlIGN1cnJlbnRseSBmb2N1c2VkIFBERiBhbmQgY29weSBpdHMgY29udGVudCB0byB0aGUgY2lscGJvYXJkLlwifSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZSgnQ3JlYXRlIG5ldyBmaWxlJylcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgICdJZiBlbmFibGVkLCB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgbmV3IC5tZCBmaWxlIGZyb20gdGhlIFBERicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNyZWF0ZU5ld0ZpbGUpLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jcmVhdGVOZXdGaWxlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdDb3B5IGNvbnRlbnQgdG8gY2xpcGJvYXJkJylcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgICdJZiBlbmFibGVkLCB3aWxsIGNvcHkgdGhlIGV4dHJhY3RlZCBNYXJrZG93biB0byB5b3VyIGNsaXBib2FyZCcsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNvcHlUb0NsaXBib2FyZCkub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmNvcHlUb0NsaXBib2FyZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cbn0iLCJpbXBvcnQge1BsdWdpbiwgYWRkSWNvbiwgTm90aWNlLCBNb2RhbCwgQXBwfSBmcm9tIFwib2JzaWRpYW5cIlxuaW1wb3J0IHtwYXJzZX0gZnJvbSAnbm9kZV9tb2R1bGVzL3BkZjJtZC9saWIvdXRpbC9wZGYnO1xuaW1wb3J0IHttYWtlVHJhbnNmb3JtYXRpb25zLCB0cmFuc2Zvcm19IGZyb20gJ25vZGVfbW9kdWxlcy9wZGYybWQvbGliL3V0aWwvdHJhbnNmb3JtYXRpb25zJztcbmltcG9ydCBwZGZqcyBmcm9tICdub2RlX21vZHVsZXMvcGRmMm1kL25vZGVfbW9kdWxlcy9wZGZqcy1kaXN0L2J1aWxkL3BkZic7XG5pbXBvcnQgd29ya2VyIGZyb20gJ25vZGVfbW9kdWxlcy9wZGYybWQvbm9kZV9tb2R1bGVzL3BkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlci5lbnRyeSc7XG5cbmltcG9ydCBFeHRyYWN0UERGU2V0dGluZ3MgZnJvbSBcIi4vRXh0cmFjdFBERlNldHRpbmdzXCI7XG5pbXBvcnQgRXh0cmFjdFBERlNldHRpbmdzVGFiIGZyb20gXCIuL0V4dHJhY3RQREZTZXR0aW5nc1RhYlwiO1xuXG5hZGRJY29uKCdleHRyYWN0JywgJzxwYXRoIGQ9XCJNMTYgNzEuMjVMMTYgMjQuNUMxNiAxOS44MDU2IDE5LjgwNTYgMTYgMjQuNSAxNkw3MS4yNSAxNkM3NS45NDQ0IDE2IDc5Ljc1IDE5LjgwNTYgNzkuNzUgMjQuNUw3OS43NSA0MS41TDcxLjI1IDQxLjVMNzEuMjUgMjQuNUwyNC41IDI0LjVMMjQuNSA3MS4yNUw0MS41IDcxLjI1TDQxLjUgNzkuNzVMMjQuNSA3OS43NUMxOS44MDU2IDc5Ljc1IDE2IDc1Ljk0NDQgMTYgNzEuMjVaTTQyLjc0NTIgNDguNzI1TDQ4Ljc1NDcgNDIuNzMyNUw3NS41IDY5LjQ3NzhMNzUuNSA1NC4yNUw4NCA1NC4yNUw4NCA4NEw1NC4yNSA4NEw1NC4yNSA3NS41TDY5LjQ4NjIgNzUuNUw0Mi43NDUyIDQ4LjcyNVpcIiBmaWxsPVwid2hpdGVcIiBmaWxsLW9wYWNpdHk9XCIwLjVcIi8+JylcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0cmFjdFBERlBsdWdpbiBleHRlbmRzIFBsdWdpbiB7XG5cdHB1YmxpYyBzZXR0aW5nczogRXh0cmFjdFBERlNldHRpbmdzO1xuXHRwcml2YXRlIG1vZGFsOiBQcm9ncmVzc01vZGFsO1xuXG5cdGFzeW5jIG9ubG9hZCgpIHtcblx0XHR0aGlzLmxvYWRTZXR0aW5ncygpO1xuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgRXh0cmFjdFBERlNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG5cdFx0dGhpcy5tb2RhbCA9IG5ldyBQcm9ncmVzc01vZGFsKHRoaXMuYXBwKTtcblxuXHRcdHRoaXMuYWRkUmliYm9uSWNvbignZXh0cmFjdCcsICdQREYgdG8gTWFya2Rvd24nLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmV4dHJhY3QoKTtcblx0XHR9KTtcblx0fVxuXG5cdGxvYWRTZXR0aW5ncygpIHtcblx0XHR0aGlzLnNldHRpbmdzID0gbmV3IEV4dHJhY3RQREZTZXR0aW5ncygpO1xuXHRcdChhc3luYyAoKSA9PiB7XG5cdFx0XHRjb25zdCBsb2FkZWRTZXR0aW5nczogRXh0cmFjdFBERlNldHRpbmdzID0gYXdhaXQgdGhpcy5sb2FkRGF0YSgpO1xuXHRcdFx0aWYgKGxvYWRlZFNldHRpbmdzKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiRm91bmQgZXhpc3Rpbmcgc2V0dGluZ3MgZmlsZVwiKTtcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5jcmVhdGVOZXdGaWxlID0gbG9hZGVkU2V0dGluZ3MuY3JlYXRlTmV3RmlsZTtcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5jb3B5VG9DbGlwYm9hcmQgPSBsb2FkZWRTZXR0aW5ncy5jb3B5VG9DbGlwYm9hcmQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIk5vIHNldHRpbmdzIGZpbGUgZm91bmQsIHNhdmluZy4uLlwiKTtcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcblx0XHRcdH1cblx0XHR9KSgpO1xuXHR9XG5cblx0YXN5bmMgZXh0cmFjdCgpICB7XG5cdFx0bGV0IGZpbGUgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xuXG5cdFx0aWYoZmlsZSA9PT0gbnVsbCkgcmV0dXJuO1xuXHRcdGlmKGZpbGUuZXh0ZW5zaW9uICE9PSAncGRmJykgcmV0dXJuO1xuXG5cdFx0dGhpcy5tb2RhbC5maWxlTmFtZSA9IGZpbGUubmFtZTtcblx0XHR0aGlzLm1vZGFsLm9wZW4oKTtcblxuXHRcdGxldCBhcnJheUJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlYWRCaW5hcnkoZmlsZSk7XG5cblx0XHRwZGZqcy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9IHdvcmtlcjtcblxuXHRcdGxldCBkb2MgPSBhd2FpdCBwZGZqcy5nZXREb2N1bWVudChhcnJheUJ1ZmZlcikucHJvbWlzZTtcblx0XHR2YXIgcmVzdWx0ID0gYXdhaXQgcGFyc2UoZG9jKTtcblx0XHRjb25zdCB7Zm9udHMsIHBhZ2VzfSA9IHJlc3VsdFxuXHRcdGNvbnN0IHRyYW5zZm9ybWF0aW9ucyA9IG1ha2VUcmFuc2Zvcm1hdGlvbnMoZm9udHMubWFwKVxuXHRcdGNvbnN0IHBhcnNlUmVzdWx0ID0gdHJhbnNmb3JtKHBhZ2VzLCB0cmFuc2Zvcm1hdGlvbnMpXG5cdFx0Y29uc3QgcmVzdWx0TUQgPSBwYXJzZVJlc3VsdC5wYWdlc1xuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0Lm1hcChwYWdlID0+IHBhZ2UuaXRlbXMuam9pbignXFxuJykpXG5cdFx0XHQuam9pbignLS0tXFxuXFxuJylcblxuXHRcdGNvbnN0IGZpbGVQYXRoID0gZmlsZS5uYW1lLnJlcGxhY2UoXCIucGRmXCIsIFwiLm1kXCIpO1xuXG5cdFx0aWYodGhpcy5zZXR0aW5ncy5jb3B5VG9DbGlwYm9hcmQpIHtcblx0XHRcdHRoaXMuc2F2ZVRvQ2xpcGJvYXJkKHJlc3VsdE1EKTtcblx0XHR9XG5cblx0XHRpZih0aGlzLnNldHRpbmdzLmNyZWF0ZU5ld0ZpbGUpIHtcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVRvRmlsZShmaWxlUGF0aCwgcmVzdWx0TUQpO1xuXHRcdFx0YXdhaXQgdGhpcy5hcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChmaWxlUGF0aCwgJycsIHRydWUpO1xuXHRcdH1cblxuXHRcdHRoaXMubW9kYWwuY2xvc2UoKTtcblxuXHR9XG5cblx0c2F2ZVRvQ2xpcGJvYXJkKGRhdGE6IHN0cmluZykge1xuXHRcdGlmIChkYXRhLmxlbmd0aCA+IDApIHtcblx0XHRcdG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGRhdGEpO1xuICBcdFx0fSBlbHNlIHtcblx0XHRcdG5ldyBOb3RpY2UoIFwiTm8gdGV4dCBmb3VuZFwiKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBzYXZlVG9GaWxlKGZpbGVQYXRoOiBzdHJpbmcsIG1kU3RyaW5nOiBzdHJpbmcpIHtcblx0XHRjb25zdCBmaWxlRXhpc3RzID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5leGlzdHMoZmlsZVBhdGgpO1xuXHRcdGlmIChmaWxlRXhpc3RzKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmFwcGVuZEZpbGUoZmlsZVBhdGgsIG1kU3RyaW5nKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHAudmF1bHQuY3JlYXRlKGZpbGVQYXRoLCBtZFN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgYXBwZW5kRmlsZShmaWxlUGF0aDogc3RyaW5nLCBub3RlOiBzdHJpbmcpIHtcblx0XHRsZXQgZXhpc3RpbmdDb250ZW50ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZWFkKGZpbGVQYXRoKTtcblx0XHRpZihleGlzdGluZ0NvbnRlbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0ZXhpc3RpbmdDb250ZW50ID0gZXhpc3RpbmdDb250ZW50ICsgJ1xcclxccic7XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoZmlsZVBhdGgsIGV4aXN0aW5nQ29udGVudCArIG5vdGUpO1xuXHR9XG59XG5cbmNsYXNzIFByb2dyZXNzTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG5cdHB1YmxpYyBmaWxlTmFtZTogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwKSB7XG5cdFx0c3VwZXIoYXBwKTtcblx0fVxuXG5cdG9uT3BlbigpIHtcblx0XHRsZXQge2NvbnRlbnRFbH0gPSB0aGlzO1xuXHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcImgyXCIsIHt0ZXh0OiBcIkV4dHJhY3QgUERGIFBsdWdpblwifSk7XG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7dGV4dDogXCJFeHRyYWN0aW5nIFwiICsgdGhpcy5maWxlTmFtZX0pO1xuXHR9XG5cblx0b25DbG9zZSgpIHtcblx0XHRsZXQge2NvbnRlbnRFbH0gPSB0aGlzO1xuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xuXHR9XG59Il0sIm5hbWVzIjpbInRoaXMiLCJyZXF1aXJlIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJQYWdlSXRlbSIsImZpbmRQYWdlTnVtYmVycyIsImZpbmRGaXJzdFBhZ2UiLCJyZW1vdmVQYWdlTnVtYmVyIiwiUGFnZSIsInBkZmpzIiwiVGV4dEl0ZW0iLCJSRU1PVkVEX0FOTk9UQVRJT04iLCJUcmFuc2Zvcm1hdGlvbiIsIlRvVGV4dEl0ZW1UcmFuc2Zvcm1hdGlvbiIsIldvcmRGb3JtYXQiLCJQYXJzZVJlc3VsdCIsIldvcmQiLCJMaW5lSXRlbSIsInNvcnRCeVgiLCJFbnVtIiwiaXNOdW1iZXIiLCJQYXJzZWRFbGVtZW50cyIsIlN0YXNoaW5nU3RyZWFtIiwiV29yZFR5cGUiLCJBRERFRF9BTk5PVEFUSU9OIiwiVG9MaW5lSXRlbVRyYW5zZm9ybWF0aW9uIiwiVGV4dEl0ZW1MaW5lR3JvdXBlciIsIkxpbmVDb252ZXJ0ZXIiLCJCbG9ja1R5cGUiLCJoZWFkbGluZUJ5TGV2ZWwiLCJpc0RpZ2l0IiwiSGVhZGxpbmVGaW5kZXIiLCJERVRFQ1RFRF9BTk5PVEFUSU9OIiwiaXNMaXN0SXRlbUNoYXJhY3RlciIsIkxpbmVJdGVtQmxvY2siLCJtaW5YRnJvbVBhZ2VJdGVtcyIsIlRvTGluZUl0ZW1CbG9ja1RyYW5zZm9ybWF0aW9uIiwibWluWEZyb21CbG9ja3MiLCJNT0RJRklFRF9BTk5PVEFUSU9OIiwiVU5DSEFOR0VEX0FOTk9UQVRJT04iLCJibG9ja1RvVGV4dCIsIkNhbGN1bGF0ZUdsb2JhbFN0YXRzIiwiQ29tcGFjdExpbmVzIiwiUmVtb3ZlUmVwZXRpdGl2ZUVsZW1lbnRzIiwiVmVydGljYWxUb0hvcml6b250YWwiLCJEZXRlY3RUT0MiLCJEZXRlY3RIZWFkZXJzIiwiRGV0ZWN0TGlzdEl0ZW1zIiwiR2F0aGVyQmxvY2tzIiwiRGV0ZWN0Q29kZVF1b3RlQmxvY2tzIiwiRGV0ZWN0TGlzdExldmVscyIsIlRvVGV4dEJsb2NrcyIsIlRvTWFya2Rvd24iLCJTZXR0aW5nIiwiUGx1Z2luU2V0dGluZ1RhYiIsImFkZEljb24iLCJ3b3JrZXIiLCJOb3RpY2UiLCJQbHVnaW4iLCJNb2RhbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNuQyxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYztBQUN6QyxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDcEYsUUFBUSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkYsSUFBSSxPQUFPLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBQ0Y7QUFDTyxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLElBQUksYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUMzQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekYsQ0FBQztBQXVDRDtBQUNPLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtBQUM3RCxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNoSCxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMvRCxRQUFRLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDbkcsUUFBUSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDdEcsUUFBUSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDdEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUUsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ0Q7QUFDTyxTQUFTLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQzNDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNySCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLE1BQU0sS0FBSyxVQUFVLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxXQUFXLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdKLElBQUksU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxVQUFVLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEUsSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDdEIsUUFBUSxJQUFJLENBQUMsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7QUFDdEUsUUFBUSxPQUFPLENBQUMsRUFBRSxJQUFJO0FBQ3RCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekssWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BELFlBQVksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNO0FBQzlDLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDeEUsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7QUFDakUsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVM7QUFDakUsZ0JBQWdCO0FBQ2hCLG9CQUFvQixJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFO0FBQ2hJLG9CQUFvQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzFHLG9CQUFvQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDekYsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN2RixvQkFBb0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVM7QUFDM0MsYUFBYTtBQUNiLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNsRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDekYsS0FBSztBQUNMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxnQ0FBZ0MsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzFELENBQ0UsY0FBYyxHQUFHLE9BQU8sRUFBRSxDQU0rQjtBQUMzRCxDQUFDLEVBQUVBLGNBQUksRUFBRSxXQUFXO0FBQ3BCLGdCQUFnQixDQUFDLFNBQVMsT0FBTyxFQUFFO0FBQ25DO0FBQ0EsVUFBVSxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBO0FBQ0EsVUFBVSxTQUFTLG1CQUFtQixDQUFDLFFBQVEsRUFBRTtBQUNqRDtBQUNBO0FBQ0EsV0FBVyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzFDLFlBQVksT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdEQsWUFBWTtBQUNaO0FBQ0EsV0FBVyxJQUFJLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRztBQUNyRCxZQUFZLENBQUMsRUFBRSxRQUFRO0FBQ3ZCLFlBQVksQ0FBQyxFQUFFLEtBQUs7QUFDcEIsWUFBWSxPQUFPLEVBQUUsRUFBRTtBQUN2QixZQUFZLENBQUM7QUFDYjtBQUNBO0FBQ0EsV0FBVyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMvRjtBQUNBO0FBQ0EsV0FBVyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQjtBQUNBO0FBQ0EsV0FBVyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDakMsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFVBQVUsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUMxQztBQUNBO0FBQ0EsVUFBVSxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7QUFDbkQ7QUFDQTtBQUNBLFVBQVUsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLFNBQVMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDbEUsV0FBVyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtBQUNyRCxZQUFZLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDcEYsWUFBWTtBQUNaLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQSxVQUFVLG1CQUFtQixDQUFDLENBQUMsR0FBRyxTQUFTLE9BQU8sRUFBRTtBQUNwRCxXQUFXLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7QUFDbkUsWUFBWSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDcEYsWUFBWTtBQUNaLFdBQVcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekUsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsU0FBUyxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3hELFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRCxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNyQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNqRyxXQUFXLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsV0FBVyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckMsV0FBVyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3BGLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0osV0FBVyxPQUFPLEVBQUUsQ0FBQztBQUNyQixXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0EsVUFBVSxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsU0FBUyxNQUFNLEVBQUU7QUFDbkQsV0FBVyxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVU7QUFDbkQsWUFBWSxTQUFTLFVBQVUsR0FBRyxFQUFFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7QUFDL0QsWUFBWSxTQUFTLGdCQUFnQixHQUFHLEVBQUUsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQzNELFdBQVcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEQsV0FBVyxPQUFPLE1BQU0sQ0FBQztBQUN6QixXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0EsVUFBVSxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsU0FBUyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNoSTtBQUNBO0FBQ0EsVUFBVSxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLFVBQVUsT0FBTyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsT0FBTyxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFHdEQ7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUNwRCxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQztBQUM1QyxHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRTtBQUNyRCxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztBQUM3QyxHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0MsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxjQUFjLENBQUMsVUFBVSxDQUFDO0FBQ3JDLEdBQUc7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLGNBQWMsQ0FBQyxVQUFVLENBQUM7QUFDckMsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxFQUFFO0FBQ2hELEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxHQUFHLEVBQUUsWUFBWTtBQUNuQixJQUFJLE9BQU8sY0FBYyxDQUFDLGFBQWEsQ0FBQztBQUN4QyxHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRTtBQUM5RCxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQztBQUN0RCxHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDeEMsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3RCLEdBQUc7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRTtBQUM5QyxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDNUIsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFO0FBQy9DLEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxHQUFHLEVBQUUsWUFBWTtBQUNuQixJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztBQUM3QixHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRTtBQUN4RCxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUN0QyxHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUU7QUFDNUMsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzFCLEdBQUc7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtBQUMxQyxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEVBQUU7QUFDdEQsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxLQUFLLENBQUMsbUJBQW1CLENBQUM7QUFDckMsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUU7QUFDbEQsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ2pDLEdBQUc7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFO0FBQzFELEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxHQUFHLEVBQUUsWUFBWTtBQUNuQixJQUFJLE9BQU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDO0FBQ3pDLEdBQUc7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFO0FBQ3pELEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxHQUFHLEVBQUUsWUFBWTtBQUNuQixJQUFJLE9BQU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDO0FBQ3hDLEdBQUc7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFO0FBQ3RELEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxHQUFHLEVBQUUsWUFBWTtBQUNuQixJQUFJLE9BQU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDO0FBQ3JDLEdBQUc7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFO0FBQ3RELEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxHQUFHLEVBQUUsWUFBWTtBQUNuQixJQUFJLE9BQU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDO0FBQ3JDLEdBQUc7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUN0QyxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDckIsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFDcEQsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxLQUFLLENBQUMsaUJBQWlCLENBQUM7QUFDbkMsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7QUFDakQsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDO0FBQ2hDLEdBQUc7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFO0FBQ3ZELEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxHQUFHLEVBQUUsWUFBWTtBQUNuQixJQUFJLE9BQU8sS0FBSyxDQUFDLG9CQUFvQixDQUFDO0FBQ3RDLEdBQUc7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRTtBQUN6QyxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDeEIsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUU7QUFDOUQsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxLQUFLLENBQUMsMkJBQTJCLENBQUM7QUFDN0MsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUU7QUFDdkQsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUM7QUFDdEMsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ3ZDLEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxHQUFHLEVBQUUsWUFBWTtBQUNuQixJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQztBQUN0QixHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRTtBQUNqRCxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUM7QUFDaEMsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUU7QUFDbEQsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7QUFDN0MsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUU7QUFDekQsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLEdBQUcsRUFBRSxZQUFZO0FBQ25CLElBQUksT0FBTyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQztBQUNyRCxHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRTtBQUN0RCxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQztBQUMvQyxHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRTtBQUNsRCxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLFdBQVcsQ0FBQyxlQUFlLENBQUM7QUFDdkMsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFO0FBQzlDLEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxHQUFHLEVBQUUsWUFBWTtBQUNuQixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUM1QixHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLElBQUksY0FBYyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsSUFBSSxJQUFJLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksaUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7QUFDQSxJQUFJLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsSUFBSSxlQUFlLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQztBQUNBLElBQUksSUFBSSxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBSW5DO0FBQ0EsRUFBRSxNQUFNO0FBQ1IsSUFBSSxRQUFRO0FBQ1osR0FBRyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsRUFBRSxJQUFJLFFBQVEsRUFBRTtBQUNoQixJQUFJLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQztBQUNoRTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxJQUFJO0FBQ25ELE1BQU0sT0FBTyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUcsTUFBTTtBQUNULElBQUksTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztBQUN0RTtBQUNBLElBQUksSUFBSSxjQUFjLENBQUM7QUFDdkI7QUFDQSxJQUFJLElBQUksSUFBSSxjQUFjLENBQUMsZ0JBQWdCLEdBQUcsRUFBRTtBQUNoRCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUM7QUFDOUQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRSxNQUFNLElBQUk7QUFDbkQsTUFBTSxJQUFJLGNBQWMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzdFLFFBQVEsT0FBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUd0RDtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDbFA7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLE1BQU0sZ0JBQWdCLEdBQUcsOEJBQThCLENBQUM7QUFDeEQsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzVDLE1BQU0sTUFBTSxHQUFHLDRCQUE0QixDQUFDO0FBQzVDO0FBQ0EsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QixFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3hCLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDbkMsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDN0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BELElBQUksTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDM0IsSUFBSSxPQUFPO0FBQ1gsTUFBTSxNQUFNO0FBQ1osTUFBTSxPQUFPO0FBQ2IsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7QUFDbEMsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDakQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtBQUNuQyxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUM3QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDNUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7QUFDNUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ2pELEtBQUs7QUFDTDtBQUNBLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdEMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2QyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkMsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM1QztBQUNBLE1BQU0sb0JBQW9CLENBQUM7QUFDM0IsRUFBRSxXQUFXLENBQUM7QUFDZCxJQUFJLE9BQU8sR0FBRyxJQUFJO0FBQ2xCLElBQUksWUFBWSxHQUFHLEtBQUs7QUFDeEIsR0FBRyxFQUFFO0FBQ0wsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDZCxJQUFJLElBQUk7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3ZCLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsR0FBRyw2REFBNkQsQ0FBQyxDQUFDO0FBQ3RKLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNmLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDMUUsSUFBSSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztBQUNsSDtBQUNBLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxJQUFJLGVBQWUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ3RFLE1BQU0sT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sUUFBUSxJQUFJO0FBQy9DLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7QUFDMUIsVUFBVSxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksUUFBUSxDQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDL0IsVUFBVSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNsRSxTQUFTLE1BQU07QUFDZixVQUFVLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNyRSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU87QUFDZixVQUFVLFFBQVE7QUFDbEIsVUFBVSxlQUFlO0FBQ3pCLFNBQVMsQ0FBQztBQUNWLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUk7QUFDekIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sS0FBSztBQUM1QyxNQUFNLE1BQU0sT0FBTyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7QUFDM0MsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckM7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUM3QixRQUFRLE9BQU8sQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxDQUFDLGtCQUFrQixHQUFHLE1BQU07QUFDekMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTtBQUN4RCxVQUFVLE9BQU87QUFDakIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzVELFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdkI7QUFDQSxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO0FBQ3JELFlBQVksUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RCxXQUFXLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtBQUNqRSxZQUFZLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RFLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxRQUFRLEVBQUU7QUFDeEIsWUFBWSxPQUFPLENBQUM7QUFDcEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsZUFBZTtBQUM3QixhQUFhLENBQUMsQ0FBQztBQUNmLFlBQVksT0FBTztBQUNuQixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDOUMsT0FBTyxDQUFDO0FBQ1I7QUFDQSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSTtBQUN2QixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEcsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7QUFDcEQ7QUFDQSxNQUFNLGFBQWEsQ0FBQztBQUNwQixFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3hCLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3pFLElBQUksTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2QyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1QyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM5QyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEQsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUMvRCxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFO0FBQ3RCLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0FBQzVFLElBQUksT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUN0QztBQUNBLE1BQU0sWUFBWSxDQUFDO0FBQ25CLEVBQUUsV0FBVyxDQUFDO0FBQ2QsSUFBSSxPQUFPO0FBQ1gsSUFBSSxLQUFLO0FBQ1QsSUFBSSxRQUFRO0FBQ1osSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLElBQUksT0FBTyxHQUFHLENBQUM7QUFDZixJQUFJLFFBQVEsR0FBRyxLQUFLO0FBQ3BCLEdBQUcsRUFBRTtBQUNMLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMzQixJQUFJLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEQsSUFBSSxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELElBQUksSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7QUFDM0MsSUFBSSxRQUFRLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUM5QixJQUFJLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQ3hEO0FBQ0EsSUFBSSxRQUFRLFFBQVE7QUFDcEIsTUFBTSxLQUFLLEdBQUc7QUFDZCxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxFQUFFO0FBQ2IsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLEdBQUc7QUFDZCxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU07QUFDTixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsbUVBQW1FLENBQUMsQ0FBQztBQUM3RixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ2xCLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ3pCLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxhQUFhLEVBQUUsYUFBYSxDQUFDO0FBQ3JDLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7QUFDdkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN2RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDekQsS0FBSyxNQUFNO0FBQ1gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN2RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDekQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRSxhQUFhLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEVBQUUsYUFBYSxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDeE8sSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDO0FBQ1IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUs7QUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7QUFDNUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDMUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDMUIsSUFBSSxRQUFRLEdBQUcsS0FBSztBQUNwQixHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ1YsSUFBSSxPQUFPLElBQUksWUFBWSxDQUFDO0FBQzVCLE1BQU0sT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQ25DLE1BQU0sS0FBSztBQUNYLE1BQU0sUUFBUTtBQUNkLE1BQU0sT0FBTztBQUNiLE1BQU0sT0FBTztBQUNiLE1BQU0sUUFBUTtBQUNkLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0QsR0FBRztBQUNIO0FBQ0EsRUFBRSwwQkFBMEIsQ0FBQyxJQUFJLEVBQUU7QUFDbkMsSUFBSSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEY7QUFDQSxJQUFJLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RjtBQUNBLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLEdBQUc7QUFDSDtBQUNBLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQixJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEUsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDcEM7QUFDQSxNQUFNLDJCQUEyQixTQUFTLEtBQUssQ0FBQyxhQUFhLENBQUM7QUFDOUQsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUN6QixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLDJCQUEyQixHQUFHLDJCQUEyQixDQUFDO0FBQ2xFLE1BQU0sVUFBVSxHQUFHO0FBQ25CLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNWLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDWCxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1IsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDaEM7QUFDQSxTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRTtBQUNqQyxFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE9BQU8sR0FBRyxJQUFJO0FBQ2hCLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDUixFQUFFLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLDJEQUEyRCxDQUFDLENBQUM7QUFDakgsRUFBRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5RDtBQUNBLEVBQUUsSUFBSSxPQUFPLEVBQUU7QUFDZixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUM7QUFDNUMsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUMvQztBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNO0FBQ3pCLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDckI7QUFDQSxFQUFFLFFBQVEsTUFBTTtBQUNoQixJQUFJLEtBQUssVUFBVSxDQUFDLElBQUk7QUFDeEIsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUk7QUFDeEIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDO0FBQzFCLE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLFVBQVUsQ0FBQyxLQUFLO0FBQ3pCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUMzQixNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxVQUFVLENBQUMsTUFBTTtBQUMxQixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDNUIsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssVUFBVSxDQUFDLEdBQUc7QUFDdkIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLE1BQU0sTUFBTTtBQUNaLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDMUIsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsR0FBRyxHQUFHLEdBQUcsZ0JBQWdCLENBQUM7QUFDOUQsQ0FBQztBQUNEO0FBQ0EsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7QUFDakMsRUFBRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLEVBQUUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxFQUFFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekYsRUFBRSxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFDRDtBQUNBLE1BQU0sU0FBUyxDQUFDO0FBQ2hCLEVBQUUsV0FBVyxHQUFHO0FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2IsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNwQixNQUFNLElBQUk7QUFDVixNQUFNLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUMvQixNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3JCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ25DLE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUM3QjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRTtBQUNqQyxRQUFRLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNuQyxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUM5QjtBQUNBLFNBQVMsZ0JBQWdCLEdBQUc7QUFDNUIsRUFBRSxPQUFPLE9BQU8sS0FBSyxLQUFLLFdBQVcsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLElBQUksTUFBTSxJQUFJLFFBQVEsQ0FBQyxTQUFTLElBQUksT0FBTyxjQUFjLEtBQUssV0FBVyxDQUFDO0FBQ2xKLENBQUM7QUFDRDtBQUNBLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDdkMsRUFBRSxJQUFJO0FBQ04sSUFBSSxNQUFNO0FBQ1YsTUFBTSxRQUFRO0FBQ2QsS0FBSyxHQUFHLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsSUFBSSxPQUFPLFFBQVEsS0FBSyxPQUFPLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUN6RCxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDZixJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDekIsRUFBRSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sS0FBSztBQUMxQyxJQUFJLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEQsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxNQUFNLENBQUMsT0FBTyxHQUFHLFlBQVk7QUFDakMsTUFBTSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRSxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRDtBQUNBLFNBQVMsVUFBVSxDQUFDLE9BQU8sRUFBRTtBQUM3QixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUNEO0FBQ0EsSUFBSSxrQkFBa0IsQ0FBQztBQUN2QjtBQUNBLE1BQU0sYUFBYSxDQUFDO0FBQ3BCLEVBQUUsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFO0FBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMvQyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO0FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxXQUFXLEdBQUcsV0FBVyxHQUFHLFdBQVcsR0FBRyxXQUFXLEdBQUcsV0FBVyxHQUFHLFlBQVksR0FBRyxXQUFXLEdBQUcsSUFBSSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN6TCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRDtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNsQixNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekMsSUFBSSxLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELElBQUksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2QyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDOUMsSUFBSSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELElBQUksSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNwRCxJQUFJLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUMsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLENBQUMsSUFBSSxVQUFVLElBQUksRUFBRSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdEUsSUFBSSxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRCxJQUFJLFlBQVksR0FBRyxZQUFZLElBQUksQ0FBQyxJQUFJLFlBQVksSUFBSSxFQUFFLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUM5RTtBQUNBLElBQUksSUFBSSxxQkFBcUIsS0FBSyxHQUFHLEVBQUU7QUFDdkMsTUFBTSxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ3pCLE1BQU0sTUFBTSxJQUFJLFlBQVksQ0FBQztBQUM3QixLQUFLLE1BQU0sSUFBSSxxQkFBcUIsS0FBSyxHQUFHLEVBQUU7QUFDOUMsTUFBTSxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ3pCLE1BQU0sTUFBTSxJQUFJLFlBQVksQ0FBQztBQUM3QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEUsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEM7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUd0RDtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3RDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3hCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3RDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDOUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEMsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDcEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEIsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDaEMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDcEMsT0FBTyxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDOUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEMsT0FBTyxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDbEMsT0FBTyxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMseUJBQXlCLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ24zQjtBQUNBLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hELE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxNQUFNLGNBQWMsR0FBRztBQUN2QixFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsRUFBRSxlQUFlLEVBQUUsSUFBSTtBQUN2QixFQUFFLElBQUksRUFBRSxJQUFJO0FBQ1osRUFBRSxrQkFBa0IsRUFBRSxJQUFJO0FBQzFCLEVBQUUsc0JBQXNCLEVBQUUsS0FBSztBQUMvQixFQUFFLHNCQUFzQixFQUFFLEtBQUs7QUFDL0IsRUFBRSxRQUFRLEVBQUUsS0FBSztBQUNqQixFQUFFLGtCQUFrQixFQUFFLEtBQUs7QUFDM0IsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEMsTUFBTSxpQkFBaUIsR0FBRztBQUMxQixFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFDaEIsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNkLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztBQUNyQixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDdkIsRUFBRSx1QkFBdUIsRUFBRSxDQUFDO0FBQzVCLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFDaEIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDOUMsTUFBTSxTQUFTLEdBQUc7QUFDbEIsRUFBRSxjQUFjLEVBQUUsQ0FBQztBQUNuQixFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2QsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzlCLE1BQU0sY0FBYyxHQUFHO0FBQ3ZCLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUNiLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ1gsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDWixFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ2IsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNkLEVBQUUsU0FBUyxFQUFFLEVBQUU7QUFDZixFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ2QsRUFBRSxTQUFTLEVBQUUsRUFBRTtBQUNmLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDWCxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ1gsRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNULEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDWCxFQUFFLGNBQWMsRUFBRSxFQUFFO0FBQ3BCLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDWCxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ1gsRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUNaLEVBQUUsTUFBTSxFQUFFLEVBQUU7QUFDWixFQUFFLFdBQVcsRUFBRSxFQUFFO0FBQ2pCLEVBQUUsT0FBTyxFQUFFLEVBQUU7QUFDYixFQUFFLFNBQVMsRUFBRSxFQUFFO0FBQ2YsRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUNaLEVBQUUsTUFBTSxFQUFFLEVBQUU7QUFDWixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUN4QyxNQUFNLHdCQUF3QixHQUFHO0FBQ2pDLEVBQUUsTUFBTSxFQUFFLFFBQVE7QUFDbEIsRUFBRSxNQUFNLEVBQUUsUUFBUTtBQUNsQixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRztBQUM5QixFQUFFLE1BQU0sRUFBRSxRQUFRO0FBQ2xCLEVBQUUsUUFBUSxFQUFFLFVBQVU7QUFDdEIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3RELE1BQU0scUJBQXFCLEdBQUc7QUFDOUIsRUFBRSxRQUFRLEVBQUUsVUFBVTtBQUN0QixFQUFFLFFBQVEsRUFBRSxVQUFVO0FBQ3RCLEVBQUUsU0FBUyxFQUFFLFdBQVc7QUFDeEIsRUFBRSxTQUFTLEVBQUUsV0FBVztBQUN4QixFQUFFLElBQUksRUFBRSxNQUFNO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3RELE1BQU0sbUJBQW1CLEdBQUc7QUFDNUIsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEtBQUssRUFBRSxHQUFHO0FBQ1osQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0FBQ2xELE1BQU0sY0FBYyxHQUFHO0FBQ3ZCLEVBQUUsU0FBUyxFQUFFLElBQUk7QUFDakIsRUFBRSxNQUFNLEVBQUUsSUFBSTtBQUNkLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixFQUFFLE1BQU0sRUFBRSxJQUFJO0FBQ2QsRUFBRSxRQUFRLEVBQUUsSUFBSTtBQUNoQixFQUFFLE1BQU0sRUFBRSxJQUFJO0FBQ2QsRUFBRSxRQUFRLEVBQUUsSUFBSTtBQUNoQixFQUFFLE1BQU0sRUFBRSxJQUFJO0FBQ2QsRUFBRSxZQUFZLEVBQUUsS0FBSztBQUNyQixFQUFFLGNBQWMsRUFBRSxLQUFLO0FBQ3ZCLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sbUJBQW1CLEdBQUc7QUFDNUIsRUFBRSxRQUFRLEVBQUUsU0FBUztBQUNyQixFQUFFLFFBQVEsRUFBRSxTQUFTO0FBQ3JCLEVBQUUsUUFBUSxFQUFFLFNBQVM7QUFDckIsRUFBRSxTQUFTLEVBQUUsU0FBUztBQUN0QixFQUFFLFFBQVEsRUFBRSxTQUFTO0FBQ3JCLEVBQUUsYUFBYSxFQUFFLFNBQVM7QUFDMUIsRUFBRSxLQUFLLEVBQUUsU0FBUztBQUNsQixFQUFFLFVBQVUsRUFBRSxTQUFTO0FBQ3ZCLEVBQUUsS0FBSyxFQUFFLFNBQVM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsU0FBUztBQUNqQixFQUFFLElBQUksRUFBRSxTQUFTO0FBQ2pCLEVBQUUsVUFBVSxFQUFFLFNBQVM7QUFDdkIsRUFBRSxXQUFXLEVBQUUsU0FBUztBQUN4QixFQUFFLGVBQWUsRUFBRSxTQUFTO0FBQzVCLEVBQUUsV0FBVyxFQUFFLFNBQVM7QUFDeEIsRUFBRSxJQUFJLEVBQUUsU0FBUztBQUNqQixFQUFFLFFBQVEsRUFBRSxTQUFTO0FBQ3JCLEVBQUUsY0FBYyxFQUFFLFNBQVM7QUFDM0IsRUFBRSxpQkFBaUIsRUFBRSxTQUFTO0FBQzlCLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRCxNQUFNLHlCQUF5QixHQUFHO0FBQ2xDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDVixFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ1gsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNaLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDVixFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0FBQzlELE1BQU0sVUFBVSxHQUFHO0FBQ25CLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFDcEIsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxLQUFLO0FBQ1osRUFBRSxHQUFHLEVBQUUsS0FBSztBQUNaLEVBQUUsR0FBRyxFQUFFLEtBQUs7QUFDWixFQUFFLElBQUksRUFBRSxNQUFNO0FBQ2QsRUFBRSxHQUFHLEVBQUUsS0FBSztBQUNaLEVBQUUsR0FBRyxFQUFFLEtBQUs7QUFDWixFQUFFLEdBQUcsRUFBRSxLQUFLO0FBQ1osRUFBRSxHQUFHLEVBQUUsS0FBSztBQUNaLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hDLE1BQU0sUUFBUSxHQUFHO0FBQ2pCLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFDcEIsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLE1BQU0sRUFBRSxRQUFRO0FBQ2xCLEVBQUUsWUFBWSxFQUFFLGNBQWM7QUFDOUIsRUFBRSxhQUFhLEVBQUUsZUFBZTtBQUNoQyxFQUFFLFFBQVEsRUFBRSxVQUFVO0FBQ3RCLEVBQUUsWUFBWSxFQUFFLGNBQWM7QUFDOUIsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLFFBQVEsRUFBRSxVQUFVO0FBQ3RCLEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxPQUFPLEVBQUUsU0FBUztBQUNwQixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM1QixNQUFNLGNBQWMsR0FBRztBQUN2QixFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ1gsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUNiLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDVixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUN4QyxNQUFNLG1CQUFtQixHQUFHO0FBQzVCLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ1gsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRCxNQUFNLEdBQUcsR0FBRztBQUNaLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ2pCLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ2hCLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDbEIsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNaLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztBQUN2QixFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ2hCLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDZCxFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxPQUFPLEVBQUUsRUFBRTtBQUNiLEVBQUUsU0FBUyxFQUFFLEVBQUU7QUFDZixFQUFFLE1BQU0sRUFBRSxFQUFFO0FBQ1osRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUNaLEVBQUUsT0FBTyxFQUFFLEVBQUU7QUFDYixFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ2QsRUFBRSxRQUFRLEVBQUUsRUFBRTtBQUNkLEVBQUUsU0FBUyxFQUFFLEVBQUU7QUFDZixFQUFFLFNBQVMsRUFBRSxFQUFFO0FBQ2YsRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUNaLEVBQUUsV0FBVyxFQUFFLEVBQUU7QUFDakIsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsTUFBTSxFQUFFLEVBQUU7QUFDWixFQUFFLFVBQVUsRUFBRSxFQUFFO0FBQ2hCLEVBQUUsWUFBWSxFQUFFLEVBQUU7QUFDbEIsRUFBRSxlQUFlLEVBQUUsRUFBRTtBQUNyQixFQUFFLGlCQUFpQixFQUFFLEVBQUU7QUFDdkIsRUFBRSxPQUFPLEVBQUUsRUFBRTtBQUNiLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLE1BQU0sRUFBRSxFQUFFO0FBQ1osRUFBRSxTQUFTLEVBQUUsRUFBRTtBQUNmLEVBQUUsT0FBTyxFQUFFLEVBQUU7QUFDYixFQUFFLGNBQWMsRUFBRSxFQUFFO0FBQ3BCLEVBQUUsY0FBYyxFQUFFLEVBQUU7QUFDcEIsRUFBRSxTQUFTLEVBQUUsRUFBRTtBQUNmLEVBQUUsVUFBVSxFQUFFLEVBQUU7QUFDaEIsRUFBRSxPQUFPLEVBQUUsRUFBRTtBQUNiLEVBQUUsb0JBQW9CLEVBQUUsRUFBRTtBQUMxQixFQUFFLFdBQVcsRUFBRSxFQUFFO0FBQ2pCLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDZCxFQUFFLGtCQUFrQixFQUFFLEVBQUU7QUFDeEIsRUFBRSxhQUFhLEVBQUUsRUFBRTtBQUNuQixFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ2QsRUFBRSxRQUFRLEVBQUUsRUFBRTtBQUNkLEVBQUUsY0FBYyxFQUFFLEVBQUU7QUFDcEIsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3RCLEVBQUUsMEJBQTBCLEVBQUUsRUFBRTtBQUNoQyxFQUFFLFlBQVksRUFBRSxFQUFFO0FBQ2xCLEVBQUUscUJBQXFCLEVBQUUsRUFBRTtBQUMzQixFQUFFLG1CQUFtQixFQUFFLEVBQUU7QUFDekIsRUFBRSxpQkFBaUIsRUFBRSxFQUFFO0FBQ3ZCLEVBQUUsY0FBYyxFQUFFLEVBQUU7QUFDcEIsRUFBRSxlQUFlLEVBQUUsRUFBRTtBQUNyQixFQUFFLFlBQVksRUFBRSxFQUFFO0FBQ2xCLEVBQUUsYUFBYSxFQUFFLEVBQUU7QUFDbkIsRUFBRSxhQUFhLEVBQUUsRUFBRTtBQUNuQixFQUFFLFdBQVcsRUFBRSxFQUFFO0FBQ2pCLEVBQUUsaUJBQWlCLEVBQUUsRUFBRTtBQUN2QixFQUFFLGVBQWUsRUFBRSxFQUFFO0FBQ3JCLEVBQUUsa0JBQWtCLEVBQUUsRUFBRTtBQUN4QixFQUFFLGdCQUFnQixFQUFFLEVBQUU7QUFDdEIsRUFBRSxXQUFXLEVBQUUsRUFBRTtBQUNqQixFQUFFLGdCQUFnQixFQUFFLEVBQUU7QUFDdEIsRUFBRSxjQUFjLEVBQUUsRUFBRTtBQUNwQixFQUFFLGNBQWMsRUFBRSxFQUFFO0FBQ3BCLEVBQUUsWUFBWSxFQUFFLEVBQUU7QUFDbEIsRUFBRSxTQUFTLEVBQUUsRUFBRTtBQUNmLEVBQUUsY0FBYyxFQUFFLEVBQUU7QUFDcEIsRUFBRSxrQkFBa0IsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsdUJBQXVCLEVBQUUsRUFBRTtBQUM3QixFQUFFLGdCQUFnQixFQUFFLEVBQUU7QUFDdEIsRUFBRSxXQUFXLEVBQUUsRUFBRTtBQUNqQixFQUFFLFNBQVMsRUFBRSxFQUFFO0FBQ2YsRUFBRSxxQkFBcUIsRUFBRSxFQUFFO0FBQzNCLEVBQUUsbUJBQW1CLEVBQUUsRUFBRTtBQUN6QixFQUFFLFVBQVUsRUFBRSxFQUFFO0FBQ2hCLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDZCxFQUFFLGdCQUFnQixFQUFFLEVBQUU7QUFDdEIsRUFBRSxjQUFjLEVBQUUsRUFBRTtBQUNwQixFQUFFLGVBQWUsRUFBRSxFQUFFO0FBQ3JCLEVBQUUsYUFBYSxFQUFFLEVBQUU7QUFDbkIsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3RCLEVBQUUscUJBQXFCLEVBQUUsRUFBRTtBQUMzQixFQUFFLDBCQUEwQixFQUFFLEVBQUU7QUFDaEMsRUFBRSxpQkFBaUIsRUFBRSxFQUFFO0FBQ3ZCLEVBQUUsdUJBQXVCLEVBQUUsRUFBRTtBQUM3QixFQUFFLDRCQUE0QixFQUFFLEVBQUU7QUFDbEMsRUFBRSx1QkFBdUIsRUFBRSxFQUFFO0FBQzdCLEVBQUUsMkJBQTJCLEVBQUUsRUFBRTtBQUNqQyxFQUFFLHdCQUF3QixFQUFFLEVBQUU7QUFDOUIsRUFBRSxhQUFhLEVBQUUsRUFBRTtBQUNuQixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQixNQUFNLG9CQUFvQixHQUFHO0FBQzdCLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFDcEIsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLFVBQVUsRUFBRSxZQUFZO0FBQzFCLEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCO0FBQ2xDLEVBQUUsSUFBSSxFQUFFLE1BQU07QUFDZCxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQjtBQUMxQyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0I7QUFDbEMsRUFBRSxZQUFZLEVBQUUsY0FBYztBQUM5QixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQjtBQUMxQyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0I7QUFDbEMsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0I7QUFDdEMsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0I7QUFDMUMsRUFBRSxlQUFlLEVBQUUsaUJBQWlCO0FBQ3BDLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CO0FBQ3hDLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CO0FBQzFDLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCO0FBQzVDLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCO0FBQ3RDLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxNQUFNLGlCQUFpQixHQUFHO0FBQzFCLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDbEIsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDO0FBQ3hDO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7QUFDbEMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDL0IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixHQUFHO0FBQzdCLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ25CLEVBQUUsSUFBSSxTQUFTLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRTtBQUN6QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDbkIsRUFBRSxJQUFJLFNBQVMsSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFO0FBQzVDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUMxQixFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUMzQixFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDYixJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRTtBQUN6QyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ1g7QUFDQSxFQUFFLElBQUk7QUFDTixJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1QjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUU7QUFDaEQsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0wsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2QsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3RDLENBQUM7QUFDRDtBQUNBLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFO0FBQy9CLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNaLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLEdBQUcsQ0FBQyxRQUFRO0FBQ3RCLElBQUksS0FBSyxPQUFPLENBQUM7QUFDakIsSUFBSSxLQUFLLFFBQVEsQ0FBQztBQUNsQixJQUFJLEtBQUssTUFBTSxDQUFDO0FBQ2hCLElBQUksS0FBSyxTQUFTLENBQUM7QUFDbkIsSUFBSSxLQUFLLE1BQU07QUFDZixNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCO0FBQ0EsSUFBSTtBQUNKLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLFNBQVMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRTtBQUM5QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSTtBQUNOLElBQUksTUFBTSxXQUFXLEdBQUcsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RTtBQUNBLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUN2QyxNQUFNLE9BQU8sV0FBVyxDQUFDO0FBQ3pCLEtBQUs7QUFDTCxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRTtBQUNqQjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNuQyxJQUFJLEtBQUs7QUFDVCxJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3BCLElBQUksWUFBWSxFQUFFLElBQUk7QUFDdEIsSUFBSSxRQUFRLEVBQUUsS0FBSztBQUNuQixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBQ0Q7QUFDQSxNQUFNLGFBQWEsR0FBRyxTQUFTLG9CQUFvQixHQUFHO0FBQ3RELEVBQUUsU0FBUyxhQUFhLENBQUMsT0FBTyxFQUFFO0FBQ2xDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLGFBQWEsRUFBRTtBQUM1QyxNQUFNLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQ3RDLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ3hDLEVBQUUsYUFBYSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7QUFDNUMsRUFBRSxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEM7QUFDQSxNQUFNLGlCQUFpQixTQUFTLGFBQWEsQ0FBQztBQUM5QyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQ3pCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDOUM7QUFDQSxNQUFNLHFCQUFxQixTQUFTLGFBQWEsQ0FBQztBQUNsRCxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFO0FBQzVCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7QUFDdEQ7QUFDQSxNQUFNLG1CQUFtQixTQUFTLGFBQWEsQ0FBQyxFQUFFO0FBQ2xEO0FBQ0EsT0FBTyxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0FBQ2xEO0FBQ0EsTUFBTSxtQkFBbUIsU0FBUyxhQUFhLENBQUMsRUFBRTtBQUNsRDtBQUNBLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRDtBQUNBLE1BQU0sMkJBQTJCLFNBQVMsYUFBYSxDQUFDO0FBQ3hELEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDM0IsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQywyQkFBMkIsR0FBRywyQkFBMkIsQ0FBQztBQUNsRTtBQUNBLE1BQU0sV0FBVyxTQUFTLGFBQWEsQ0FBQyxFQUFFO0FBQzFDO0FBQ0EsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDbEM7QUFDQSxNQUFNLGNBQWMsU0FBUyxhQUFhLENBQUMsRUFBRTtBQUM3QztBQUNBLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDO0FBQ3JDO0FBQ0EsU0FBUyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUU7QUFDbkMsRUFBRSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUMvQixJQUFJLElBQUksQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0FBQ3BFLElBQUksT0FBTyxHQUFHLENBQUM7QUFDZixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUU7QUFDOUIsRUFBRSxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztBQUMxSCxFQUFFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDOUIsRUFBRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUNsQztBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUcsa0JBQWtCLEVBQUU7QUFDbkMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksa0JBQWtCLEVBQUU7QUFDdkQsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5RCxJQUFJLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGFBQWEsQ0FBQyxHQUFHLEVBQUU7QUFDNUIsRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLG9DQUFvQyxDQUFDLENBQUM7QUFDeEUsRUFBRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzVCLEVBQUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkM7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRDtBQUNBLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRTtBQUM5QixFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7QUFDaEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDdEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUscUNBQXFDLENBQUMsQ0FBQztBQUM5RSxFQUFFLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQztBQUN4QixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGFBQWEsQ0FBQyxHQUFHLEVBQUU7QUFDNUIsRUFBRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzVCO0FBQ0EsRUFBRSxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLFVBQVUsRUFBRTtBQUNwRCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25DLElBQUksWUFBWSxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDNUM7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEI7QUFDQSxJQUFJLElBQUksRUFBRSxJQUFJLFlBQVksVUFBVSxDQUFDLEVBQUU7QUFDdkMsTUFBTSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUNwQyxRQUFRLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQztBQUN0QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUNEO0FBQ0EsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQ3pCLEVBQUUsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN0RyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGNBQWMsR0FBRztBQUMxQixFQUFFLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELEVBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFDRDtBQUNBLE1BQU0sb0JBQW9CLEdBQUc7QUFDN0IsRUFBRSxJQUFJLEtBQUssR0FBRztBQUNkLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELEdBQUc7QUFDSDtBQUNBLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRDtBQUNBLFNBQVMsZUFBZSxHQUFHO0FBQzNCLEVBQUUsSUFBSTtBQUNOLElBQUksSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDZCxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxNQUFNLHFCQUFxQixHQUFHO0FBQzlCLEVBQUUsSUFBSSxLQUFLLEdBQUc7QUFDZCxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUNwRCxHQUFHO0FBQ0g7QUFDQSxDQUFDLENBQUM7QUFDRixPQUFPLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7QUFDdEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRDtBQUNBLE1BQU0sSUFBSSxDQUFDO0FBQ1gsRUFBRSxPQUFPLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM3QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDM0IsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ROLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5QixJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNyQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUUsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRCxJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BLLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7QUFDN0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hILEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkksR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLDZCQUE2QixDQUFDLENBQUMsRUFBRTtBQUMxQyxJQUFJLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxRSxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ25DLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDbkMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUU7QUFDN0IsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMzQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDakMsSUFBSSxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzNCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUUsSUFBSSxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1RSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0SCxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEtBQUssTUFBTTtBQUNYLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDdEgsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixLQUFLLE1BQU07QUFDWCxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEIsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMs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QUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM1RCxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUNwQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzSztBQUNBLE1BQU0sR0FBRyxD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SSxFQUFFLElBQUksRUFBRSxFQUFFO0FBQ2xCLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUN4QixRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLElBQUksSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUN4QixRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLElBQUksSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUN4QixRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDN0IsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5QixJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQzFCLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDMUI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUNkO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDcEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFNBQVMsTUFBTSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDOUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFNBQVMsTUFBTTtBQUNmLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbkMsU0FBUztBQUNUO0FBQ0EsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEMsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEMsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEMsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUNkO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDcEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFNBQVMsTUFBTSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDOUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFNBQVMsTUFBTTtBQUNmLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbkMsU0FBUztBQUNUO0FBQ0EsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEMsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEMsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNaO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDbEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsT0FBTyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN6QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxPQUFPLE1BQU07QUFDYixRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLE9BQU87QUFDUDtBQUNBLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlCLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsU0FBUyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMxQixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0MsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0MsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0MsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekIsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQzdDLElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMzQixJQUFJLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsRUFBRSxF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LEtBQUssWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRixJQUFJLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RCxJQUFJLElBQUksV0FBVyxHQUFHLGFBQWEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzRCxJQUFJLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNuQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdEksSUFBSSxFQUFFLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdkQsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0UsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxH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Q0EsWUFBWSxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFO0FBQzNELGNBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEUsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRSxjQUFjLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRSxjQUFjLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEUsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRSxjQUFjLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxjQUFjLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDMUQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFF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LENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUQ7QUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoSztBQUNBLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRTtBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDckQsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEU7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRTtBQUNoRixRQUFRLEtBQUss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TUFBTSx1QkFBdUIsU0FBUyxpQkFBaUIsQ0FBQztBQUN4RCxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxHQUFHO0FBQ1gsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztBQUNsRCxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEQsSUFBSSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUMvQyxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzdELElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsV0FBVyxHQUFHLENB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LEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sMEJBQTBCLFNBQVMsaUJBQWlCLENBQUM7QUFDM0QsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0csSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUM7QUFDckQ7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM3QixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sc0JBQXNCLFNBQVMsaUJBQWlCLENBQUM7QUFDdkQsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0csSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFNB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UUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakQsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakQsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELE1BQU0sYUFBYSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDekUsTUFBTSxhQUFhLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4RSxNQUFNLGFBQWEsQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3pFLE1BQU0sYUFBYSxDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0U7QUFDQSxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzlDLElBQUksSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDN0MsTUFBTSxPQUFPO0FBQ2IsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUk7QUFDcEIsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUc7QUFDbkIsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLEtBQUs7QUFDckIsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU07QUFDdEIsUUFBUSxLQUFLLEVBQUUsQ0FBQztBQUNoQixRQUFRLEtBQUssRUFBRSxTQUFTO0FBQ3hCLFFBQVEsS0FBSyxFQUFFLFNBQVM7QUFDeEIsT0FBTyxDQUFDO0FBQ1IsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkMsSUFBSSxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0MsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN0QixNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRztBQUNwQixRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSztBQUNyQixRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7QUFDdEIsUUFBUSxNQUFNLEVBQUUsQ0FBQztBQUNqQixPQUFPLENBQUM7QUFDUixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDaEMsTUFBTSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNyQixNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDN0IsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDeEIsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzVCLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDbEIsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUMxQixNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQzFCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNoQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEIsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDaEMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDbkMsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUMxQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzlDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxJQUFJLFlBQVksR0FBRztBQUN2QixNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVE7QUFDbkIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRO0FBQ25CLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDWCxNQUFNLEVBQUUsRUFBRSxRQUFRO0FBQ2xCLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNmLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDZCxNQUFNLEtBQUssRUFBRSxDQUFDO0FBQ2QsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ25CLE1BQU0sS0FBSyxFQUFFLENBQUMsUUFBUTtBQUN0QixNQUFNLEdBQUcsRUFBRSxRQUFRO0FBQ25CLE1BQU0sUUFBUSxFQUFFLFlBQVk7QUFDNUIsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxRQUFRLEVBQUU7QUFDdkMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxNQUFNLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFO0FBQ2xFLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFO0FBQ3hELFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksV0FBVyxFQUFFLGdCQUFnQixDQUFDO0FBQ3hDLE1BQU0sSUFBSSxDQUFDO0FBQ1gsVUFBVSxDQUFDO0FBQ1gsVUFBVSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDOUI7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9CLFFBQVEsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFRLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7QUFDaEQsUUFBUSxJQUFJLElBQUksQ0FBQztBQUNqQjtBQUNBLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxVQUFVLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNoRyxTQUFTLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQ3pELFVBQVUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pELFNBQVMsTUFBTTtBQUNmLFVBQVUsSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztBQUN4QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLE9BQU8sRUFBRTtBQUM1QixVQUFVLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDekIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sUUFBUSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDL0I7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9CLFFBQVEsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFRLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7QUFDaEQ7QUFDQSxRQUFRLElBQUksZ0JBQWdCLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUNsRCxVQUFVLElBQUksZ0JBQWdCLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUU7QUFDakQsWUFBWSxJQUFJLGdCQUFnQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQ3pELGNBQWMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztBQUMzRCxhQUFhO0FBQ2IsV0FBVyxNQUFNO0FBQ2pCLFlBQVksZ0JBQWdCLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUM3QyxXQUFXO0FBQ1gsU0FBUyxNQUFNLElBQUksZ0JBQWdCLENBQUMsS0FBSyxHQUFHLE9BQU8sRUFBRTtBQUNyRCxVQUFVLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLGNBQWMsR0FBRyxFQUFFO0FBQzdCLFVBQVUsWUFBWSxHQUFHLElBQUksQ0FBQztBQUM5QjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsUUFBUSxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztBQUNoRCxRQUFRLElBQUksV0FBVyxHQUFHLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxHQUFHLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUMxRjtBQUNBLFFBQVEsSUFBSSxZQUFZLEtBQUssV0FBVyxFQUFFO0FBQzFDLFVBQVUsY0FBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7QUFDMUUsU0FBUyxNQUFNO0FBQ2YsVUFBVSxjQUFjLENBQUMsSUFBSSxDQUFDO0FBQzlCLFlBQVksS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLO0FBQ3BDLFlBQVksR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ2hDLFlBQVksUUFBUSxFQUFFLFdBQVc7QUFDakMsV0FBVyxDQUFDLENBQUM7QUFDYixVQUFVLFlBQVksR0FBRyxXQUFXLENBQUM7QUFDckMsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsUUFBUSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDOUMsUUFBUSxjQUFjLENBQUMsT0FBTyxDQUFDO0FBQy9CLFVBQVUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO0FBQ2pDLFVBQVUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFO0FBQzFCLFVBQVUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO0FBQ3ZDLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUN4QyxRQUFRLGNBQWMsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ3BFLFFBQVEsY0FBYyxDQUFDLElBQUksQ0FBQztBQUM1QixVQUFVLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtBQUM1QixVQUFVLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRztBQUM3QixVQUFVLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtBQUN2QyxTQUFTLENBQUMsQ0FBQztBQUNYLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsUUFBUSxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQ2xELFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN6QjtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pGLFVBQVUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUM7QUFDMUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25HLFVBQVUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUM7QUFDMUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0QsVUFBVSxJQUFJLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQztBQUNqRSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDbkIsVUFBVSxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQzNDLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUNuRixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFdBQVcsRUFBRTtBQUMzQyxNQUFNLElBQUksZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztBQUNsRDtBQUNBLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQ2hELFFBQVEsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLE9BQU87QUFDUCxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxtQkFBbUIsQ0FBQztBQUMvQixJQUFJLFdBQVc7QUFDZixJQUFJLGlCQUFpQjtBQUNyQixJQUFJLFNBQVM7QUFDYixJQUFJLFFBQVE7QUFDWixJQUFJLFFBQVE7QUFDWixJQUFJLG1CQUFtQjtBQUN2QixJQUFJLG9CQUFvQjtBQUN4QixHQUFHLEVBQUU7QUFDTCxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFHLGlCQUFpQixDQUFDO0FBQ2hELElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7QUFDMUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO0FBQ3hELElBQUksSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsYUFBYSxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEcsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDNUQsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTTtBQUMzQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUMvQixRQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDN0MsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDbkMsT0FBTztBQUNQLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLEdBQUc7QUFDSDtBQUNBLEVBQUUsbUJBQW1CLENBQUMsU0FBUyxHQUFHO0FBQ2xDLElBQUksSUFBSSxPQUFPLEdBQUc7QUFDbEIsTUFBTSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO0FBQ3RDLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFNBQVMsZ0JBQWdCLEdBQUc7QUFDeEMsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUM1QjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3hCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztBQUNuRjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFO0FBQ3RDLFFBQVEsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7QUFDckMsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQ7QUFDQSxRQUFRLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQy9DLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7QUFDekIsTUFBTSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckU7QUFDQSxNQUFNLElBQUksaUJBQWlCLENBQUMsWUFBWSxFQUFFO0FBQzFDLFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLGlCQUFpQixDQUFDLFdBQVcsS0FBSyxDQUFDLEVBQUU7QUFDL0MsUUFBUSxNQUFNO0FBQ2QsVUFBVSxRQUFRO0FBQ2xCLFVBQVUsVUFBVTtBQUNwQixTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUMxQjtBQUNBLFFBQVEsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLHVCQUF1QixJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMseUJBQXlCLEVBQUU7QUFDeEcsVUFBVSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFVBQVUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFFBQVEsQ0FBQztBQUNsRCxVQUFVLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxVQUFVLENBQUM7QUFDdEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNO0FBQ2QsVUFBVSxLQUFLO0FBQ2YsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqRTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFVBQVUsaUJBQWlCLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDMUUsVUFBVSxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksaUJBQWlCLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QyxRQUFRLFNBQVMsR0FBRyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDekUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7QUFDeEMsVUFBVSxpQkFBaUIsQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7QUFDMUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDNUMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sRUFBRSxTQUFTLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtBQUNoRCxNQUFNLE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDOUQsTUFBTSxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLE1BQU0sTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RCxNQUFNLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtBQUNwRCxRQUFRLEtBQUssRUFBRSxLQUFLO0FBQ3BCLE9BQU8sQ0FBQyxDQUFDO0FBQ1Q7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUM3QixRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO0FBQ2xELFFBQVEsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDcEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDN0IsT0FBTyxNQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO0FBQzFDLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTTtBQUMzQixVQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsWUFBWSxLQUFLO0FBQ2pCLFlBQVksSUFBSTtBQUNoQixXQUFXLEtBQUs7QUFDaEIsWUFBWSxJQUFJLElBQUksRUFBRTtBQUN0QixjQUFjLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuQyxjQUFjLE9BQU87QUFDckIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEQ7QUFDQSxZQUFZLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN4RDtBQUNBLFlBQVksSUFBSSxFQUFFLENBQUM7QUFDbkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoQyxTQUFTLENBQUM7QUFDVjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0QsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUNmLE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3BHLE9BQU87QUFDUDtBQUNBLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUNwQyxRQUFRLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDdEIsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsU0FBUyxNQUFNO0FBQ2YsVUFBVSxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNO0FBQy9DLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLFlBQVksSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDckMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RCLFNBQVM7QUFDVCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxLQUFLO0FBQ0wsSUFBSSxjQUFjLEVBQUUsU0FBUyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUU7QUFDbEUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUMvRCxRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDakMsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sWUFBWSxHQUFHLEVBQUU7QUFDN0IsWUFBWSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQzVCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvRCxRQUFRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEM7QUFDQSxRQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxRQUFRLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRTtBQUNuQyxVQUFVLFNBQVM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFVBQVUsRUFBRTtBQUN4QixVQUFVLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLFVBQVUsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDaEM7QUFDQSxVQUFVLElBQUksUUFBUSxDQUFDLGlCQUFpQixFQUFFO0FBQzFDLFlBQVksWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMxRCxXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksUUFBUSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7QUFDdkMsWUFBWSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEQsWUFBWSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLFdBQVcsTUFBTTtBQUNqQixZQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFO0FBQ3pDLFlBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0UsV0FBVyxNQUFNO0FBQ2pCLFlBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLEVBQUU7QUFDMUMsWUFBWSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsV0FBVyxNQUFNO0FBQ2pCLFlBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksUUFBUSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUU7QUFDeEMsWUFBWSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRSxZQUFZLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RixXQUFXLE1BQU07QUFDakIsWUFBWSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFdBQVc7QUFDWDtBQUNBLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuRDtBQUNBLFVBQVUsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO0FBQ25DLFlBQVksR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCxXQUFXO0FBQ1gsU0FBUyxNQUFNO0FBQ2YsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUM7QUFDM0QsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLFNBQVMsZUFBZSxDQUFDLGdCQUFnQixFQUFFO0FBQzdDLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztBQUN2QyxNQUFNLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXO0FBQy9DLE1BQU0saUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsaUJBQWlCO0FBQzNELE1BQU0sU0FBUyxFQUFFLGdCQUFnQixDQUFDLFNBQVM7QUFDM0MsTUFBTSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtBQUN6QyxNQUFNLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO0FBQ3pDLE1BQU0sbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsbUJBQW1CO0FBQy9ELE1BQU0sb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsb0JBQW9CO0FBQ2pFLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0M7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFDO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFHdEQ7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QztBQUNBLElBQUksUUFBUSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsSUFBSSxXQUFXLEdBQUcsWUFBWTtBQUM5QixFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUNsRCxDQUFDLENBQUM7QUFDRjtBQUNBLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xDO0FBQ0EsRUFBRSxNQUFNLFlBQVksR0FBRztBQUN2QixJQUFJLFNBQVMsRUFBRSxRQUFRO0FBQ3ZCLElBQUksVUFBVSxFQUFFLFFBQVE7QUFDeEIsSUFBSSxTQUFTLEVBQUUsU0FBUztBQUN4QixHQUFHLENBQUM7QUFDSixFQUFFLE1BQU0sTUFBTSxHQUFHLHNDQUFzQyxDQUFDO0FBQ3hELEVBQUUsTUFBTSxRQUFRLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsRUFBRSxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdEQsRUFBRSxNQUFNLGdCQUFnQixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RDtBQUNBLEVBQUUsTUFBTSxtQkFBbUIsR0FBRyxZQUFZO0FBQzFDLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4RixJQUFJLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkIsVUFBVSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQy9DLFNBQVMsTUFBTTtBQUNmLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ2xDLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN6QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFRLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3JELE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNiLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNiLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QixNQUFNLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BD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QUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxVQUFVLGNBQWMsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdDLFlBQVksUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQy9DLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsTUFBTSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqTyxNQUFNLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QyxNQUFNLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvRixNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkMsTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQztBQUNsQyxNQUFNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoRCxNQUFNLE1BQU0sSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2pELE1BQU0sYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELE1BQU0sTUFBTSxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDakQsTUFBTSxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3RCxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDNUUsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFNBQVMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUU7QUFDMUUsTUFBTSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQzlGLE1BQU0sT0FBTyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUQsS0FBSyxDQUFDO0FBQ04sR0FBRyxFQUFFLENBQUM7QUFDTjtBQUNBLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEIsSUFBSSxXQUFXLEdBQUc7QUFDbEIsTUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztBQUM3QixNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztBQUNoRCxNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQzlDLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsb0JBQW9CLENBQUM7QUFDbkQsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0FBQzVELE1BQU0sSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDL0IsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO0FBQzlDLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDbkMsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN6QixNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDN0IsTUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzVCLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLEdBQUc7QUFDWixNQUFNLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsWUFBWSxDQUFDLE1BQU0sRUFBRTtBQUNoQyxJQUFJLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwQixJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQjtBQUNBLElBQUksS0FBSyxNQUFNLGFBQWEsSUFBSSxNQUFNLEVBQUU7QUFDeEMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFO0FBQ3ZDLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNwQixVQUFVLElBQUksRUFBRSxFQUFFO0FBQ2xCLFVBQVUsRUFBRSxFQUFFLE9BQU87QUFDckIsVUFBVSxLQUFLLEVBQUUsRUFBRTtBQUNuQixTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QixRQUFRLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakQsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRTtBQUMxQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0IsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ25DLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFO0FBQ3JCLElBQUksSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDOUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDekI7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUN0QixNQUFNLE9BQU8sQ0FBQyxDQUFDO0FBQ2YsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHO0FBQ1AsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQzNCO0FBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNqQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2xDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN0QyxVQUFVLE9BQU8sRUFBRSxDQUFDO0FBQ3BCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2xELFFBQVEsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2hFLFFBQVEsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEcsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUN4RCxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLGVBQWUsR0FBRyxLQUFLLEVBQUU7QUFDM0QsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzNELE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ25ELE1BQU0sSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDL0IsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ25DLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUMzQixNQUFNLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQztBQUMvQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7QUFDbkM7QUFDQSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUNsQyxRQUFRLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BELE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRztBQUNYLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3JELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvQixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakMsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLEdBQUc7QUFDZCxNQUFNLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2RCxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMzQyxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLGdCQUFnQixDQUFDLFlBQVksRUFBRTtBQUNuQyxNQUFNLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7QUFDM0MsTUFBTSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO0FBQy9DO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7QUFDakQsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDeEMsVUFBVSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUM5RSxVQUFVLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSTtBQUNqRCxZQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDLFdBQVcsQ0FBQyxDQUFDO0FBQ2IsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEQsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDcEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDaEMsTUFBTSxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakQsTUFBTSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDekYsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFO0FBQ25DLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDL0I7QUFDQSxNQUFNLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEQ7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNO0FBQzVELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ3JELFFBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDN0QsUUFBUSxPQUFPLFVBQVUsQ0FBQztBQUMxQixPQUFPLENBQUMsQ0FBQztBQUNULEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxDQUFDLFlBQVksRUFBRTtBQUNoQyxNQUFNLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0FBQ3hELE1BQU0sTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztBQUMvQyxNQUFNLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7QUFDM0MsTUFBTSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEQsUUFBUSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3BCLFVBQVUsSUFBSTtBQUNkLFVBQVUsRUFBRSxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQztBQUNyQyxVQUFVLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBTSxLQUFLLE1BQU0sYUFBYSxJQUFJLE1BQU0sRUFBRTtBQUMxQyxRQUFRLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUM7QUFDcEMsUUFBUSxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztBQUN4QztBQUNBLFFBQVEsUUFBUSxJQUFJLEdBQUcsQ0FBQztBQUN4QixVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTO0FBQ2xDLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzdCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVU7QUFDbkMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVTtBQUNuQyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCO0FBQzNDLFlBQVksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPO0FBQ2hDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRO0FBQ2pDLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjO0FBQ3ZDLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPO0FBQ2hDLFlBQVksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVE7QUFDakMsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjO0FBQ3ZDLFlBQVksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjO0FBQ3ZDLFlBQVksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTO0FBQ2xDLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhO0FBQ3RDLFlBQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVc7QUFDcEMsWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQjtBQUM3QyxZQUFZLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZO0FBQ3JDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXO0FBQ3BDLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVO0FBQ25DLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhO0FBQ3RDLFlBQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlO0FBQ3hDLFlBQVksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQjtBQUMxQyxZQUFZLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWU7QUFDeEMsWUFBWSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWE7QUFDdEMsWUFBWSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVc7QUFDcEMsWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU87QUFDaEMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0I7QUFDM0MsWUFBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVztBQUNwQyxZQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUztBQUNsQyxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSTtBQUM3QixZQUFZLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4QixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0FBQy9CLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzFCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDL0IsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDMUIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVTtBQUNuQyxZQUFZLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5QixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZO0FBQ3JDLFlBQVksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ2hDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUk7QUFDN0IsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDL0IsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLHdCQUF3QjtBQUNqRCxZQUFZLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0FBQzVDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQjtBQUMxQyxZQUFZLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUI7QUFDaEQsWUFBWSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMscUJBQXFCO0FBQzlDLFlBQVksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLHFCQUFxQjtBQUM5QyxZQUFZLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsbUJBQW1CO0FBQzVDLFlBQVksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDdkMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUztBQUNsQyxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM3QixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXO0FBQ3BDLFlBQVksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQy9CLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWU7QUFDeEMsWUFBWSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDbkMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsaUJBQWlCO0FBQzFDLFlBQVksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDckMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUTtBQUNqQyxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM1QixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTO0FBQ2xDLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWE7QUFDdEMsWUFBWSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPO0FBQ2hDLFlBQVksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxFQUFFO0FBQ2pCLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVTtBQUNWLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELFlBQVksTUFBTTtBQUNsQixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksY0FBYyxDQUFDLFdBQVcsRUFBRTtBQUNoQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUM3QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLGNBQWMsQ0FBQyxXQUFXLEVBQUU7QUFDaEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDN0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEdBQUc7QUFDZixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsTUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ25DLE1BQU0sT0FBTyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRSxNQUFNLE9BQU8sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RCxNQUFNLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDcEMsTUFBTSxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxPQUFPLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakUsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1RSxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRixNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsTUFBTSxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BELEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxHQUFHO0FBQ2hCLE1BQU0sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNuQyxNQUFNLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDcEMsTUFBTSxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ2pELE1BQU0sT0FBTyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ2pELE1BQU0sT0FBTyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDbEMsTUFBTSxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyRSxNQUFNLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUQsTUFBTSxPQUFPLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLE9BQU8sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkIsTUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ25DLE1BQU0sT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNyQyxNQUFNLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDckMsTUFBTSxPQUFPLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLE9BQU8sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqRSxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVFLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25GLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFDckIsTUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ25DLE1BQU0sTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNoQyxNQUFNLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDeEM7QUFDQSxNQUFNLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtBQUMxQixRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDbEQsTUFBTSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQzlDLE1BQU0sTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUM5QyxNQUFNLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDbEQsTUFBTSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQztBQUM1RCxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDckMsTUFBTSxNQUFNLFVBQVUsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztBQUNuRCxNQUFNLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxNQUFNLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO0FBQ2xDLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO0FBQzVCLFVBQVUsQ0FBQyxJQUFJLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFDM0MsVUFBVSxTQUFTO0FBQ25CLFNBQVMsTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtBQUM1QyxVQUFVLENBQUMsSUFBSSxVQUFVLEdBQUcsS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEQsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDO0FBQ3hFLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUN6QyxRQUFRLElBQUksT0FBTyxFQUFFLE9BQU8sQ0FBQztBQUM3QixRQUFRLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxRQUFRLElBQUksUUFBUSxFQUFFO0FBQ3RCLFVBQVUsSUFBSSxFQUFFLENBQUM7QUFDakIsVUFBVSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQztBQUMzRCxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3hELFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLGlCQUFpQixDQUFDO0FBQ3ZDLFVBQVUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQ3BELFVBQVUsS0FBSyxHQUFHLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEQsVUFBVSxPQUFPLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQztBQUN2QyxVQUFVLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksYUFBYSxDQUFDO0FBQzdDLFNBQVMsTUFBTTtBQUNmLFVBQVUsT0FBTyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7QUFDdEMsVUFBVSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDaEQsVUFBVSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsVUFBVSxJQUFJLFFBQVEsRUFBRTtBQUN4QixZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUN2RCxXQUFXO0FBQ1g7QUFDQSxVQUFVLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQztBQUNqRCxTQUFpQjtBQUNqQjtBQUNBLFFBQVEsSUFBSSxTQUFTLENBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksUUFBUSxFQUFFO0FBQ3RCLFVBQVUsU0FBUyxHQUFHLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBQzFFLFNBQVMsTUFBTTtBQUNmLFVBQVUsU0FBUyxHQUFHLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBQzFFLFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUN2QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakY7QUFDQSxNQUFNLElBQUksUUFBUSxFQUFFO0FBQ3BCLFFBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRixPQUFPLE1BQU07QUFDYixRQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFFBQVEsRUFBRTtBQUNwQixRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLE9BQU8sTUFBTTtBQUNiLFFBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ3BDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUUsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkY7QUFDQSxNQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxZQUFZLENBQUMsU0FBUyxFQUFFO0FBQ3hELFFBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssWUFBWSxDQUFDLFVBQVUsRUFBRTtBQUMxRCxRQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlFLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztBQUNsRztBQUNBLE1BQU0sSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRTtBQUNySCxRQUFRLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxZQUFZLENBQUMsU0FBUyxFQUFFO0FBQzFELFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEUsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFO0FBQ25DLFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDaEYsU0FBUztBQUNULE9BQU8sTUFBTSxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFO0FBQ3BGLFFBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNsRSxPQUFPLE1BQU07QUFDYixRQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFO0FBQ3ZILFFBQVEsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEU7QUFDQSxRQUFRLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2pFLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUMxQztBQUNBLE1BQU0sSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtBQUNsQyxRQUFRLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEMsUUFBUSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUMxQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDN0csTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BELE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25FLEtBQUs7QUFDTDtBQUNBLElBQUksa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM3QixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTDtBQUNBLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3pCLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsR0FBRyw2REFBNkQsQ0FBQyxDQUFDO0FBQ2xJLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDMUIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ25FLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMvRCxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ25HLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQywyQkFBMkIsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuSCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDckIsTUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ25DLE1BQU0sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsTUFBTSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsTUFBTSxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUM3QjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQzlGLFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUN6RCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztBQUNoRyxNQUFNLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztBQUMxQjtBQUNBLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQ3pCLFFBQVEsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUNyQixPQUFPLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQy9CLFFBQVEsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUN0QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUMxRDtBQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQ3BCLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3JCLFFBQVEsT0FBTyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuQyxPQUFPLE1BQU07QUFDYixRQUFRLE9BQU8sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDOUIsTUFBTSxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDOUMsTUFBTSxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLE9BQU8sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLE1BQU0sT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqRSxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsTUFBTSxPQUFPLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLE9BQU8sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxHQUFHO0FBQ2QsTUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFO0FBQzVJLFFBQVEsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQzdDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN2QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFO0FBQ3hCLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUU7QUFDdEIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFO0FBQ3ZCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFO0FBQ3pCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3RDLEtBQUs7QUFDTDtBQUNBLElBQUksY0FBYyxDQUFDLFdBQVcsRUFBRTtBQUNoQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUM3QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxTQUFTLEVBQUU7QUFDNUIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDekMsS0FBSztBQUNMO0FBQ0EsSUFBSSxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0IsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdEUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDaEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFO0FBQzFCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hFLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxDQUFDLElBQUksRUFBRTtBQUN4QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFDdEIsTUFBTSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUN4QyxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNwRTtBQUNBLE1BQU0sTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEQ7QUFDQSxNQUFNLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdEO0FBQ0EsTUFBTSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1RDtBQUNBLE1BQU0sTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakU7QUFDQSxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQs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LFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDckI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzdDLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsRUFBRTtBQUMzQixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQztBQUNBLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDaEIsUUFBUSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDckIsVUFBVSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLGNBQWMsQ0FBQyxLQUFLLEVBQUU7QUFDakMsSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDL0IsTUFBTSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFL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QUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUUsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRCxJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BLLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7QUFDN0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hILEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkksR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLDZCQUE2QixDQUFDLENBQUMsRUFBRTtBQUMxQyxJQUFJLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxRSxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ25DLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDbkMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUU7QUFDN0IsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMzQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDakMsSUFBSSxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzNCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUUsSUFBSSxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1RSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0SCxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEtBQUssTUFBTTtBQUNYLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDdEgsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixLQUFLLE1BQU07QUFDWCxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEIsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0s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LEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEdBQUc7QUFDWCxJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3BCLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDL0MsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzdCLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNqRDtBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtBQUN6QyxRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDM0IsUUFBUSxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFF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QUFDN0ksR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO0FBQzNDLElBQUksSUFBSSxJQUFJLFlBQVksV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDN0UsTUFBTSxNQUFNLElBQUksR0FBRyxJQUFJLFlBQVksV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN2RSxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0QztBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6RCxRQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQ7QUFDQSxRQUFRLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3ZDLFVBQVUsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0QyxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDcEMsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JELFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNwQyxVQUFVLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsU0FBUztB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USxLQUFLLElBQUk7QUFDakIsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFL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LENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdHhCO0FBQ0EsU0FBUyxVQUFVLENBQUMsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDaEMsSUFBSSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDNUQsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUNEO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxHQUFHLElBQUksRUFBRTtBQUM1QyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3BCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BELEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDOUIsSUFBSSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDMUIsSUFBSSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQSxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUNyQixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0I7QUFDQSxNQUFNLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUN2QixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDN0IsT0FBTztBQUNQLEtBQUssTUFBTSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDNUIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDcEMsTUFBTSxHQUFHO0FBQ1QsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzdCLE9BQU8sUUFBUSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDM0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDckIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFO0FBQ2hDLE1BQU0sSUFBSSxRQUFRLEtBQUssRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzdGLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDREQUE0RCxDQUFDLENBQUM7QUFDdEYsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakcsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNyQixJQUFJLElBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDOUIsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdkIsSUFBSSxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUN4QyxNQUFNLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO0FBQ3BDLFFBQVEsTUFBTSxZQUFZLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxTQUFTLEVBQUU7QUFDdkIsVUFBVSxVQUFVLEdBQUcsVUFBVSxHQUFHLEVBQUUsR0FBRyxZQUFZLENBQUM7QUFDdEQsU0FBUyxNQUFNO0FBQ2YsVUFBVSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDOUIsWUFBWSxRQUFRLElBQUksRUFBRSxDQUFDO0FBQzNCLFdBQVc7QUFDWDtBQUNBLFVBQVUsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDO0FBQ3BELFNBQVM7QUFDVCxPQUFPLE1BQU0sSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQzlCLFFBQVEsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQzVCLFVBQVUsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN2QixTQUFTLE1BQU07QUFDZixVQUFVLE1BQU07QUFDaEIsU0FBUztBQUNULE9BQU8sTUFBTSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDOUIsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsa0RBQWtELENBQUMsQ0FBQztBQUM1RSxPQUFPLE1BQU0sSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDN0MsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUN4QyxVQUFVLGNBQWMsR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxVQUFVLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMxQixTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUU7QUFDM0MsVUFBVSxNQUFNO0FBQ2hCLFNBQVM7QUFDVDtBQUNBLFFBQVEsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN6QixPQUFPLE1BQU07QUFDYixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDeEIsTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDO0FBQzVCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxTQUFTLEVBQUU7QUFDbkIsTUFBTSxTQUFTLElBQUksRUFBRSxLQUFLLGNBQWMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUN2RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxPQUFPLElBQUksRUFBRTtBQUNqQixNQUFNLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztBQUMvQjtBQUNBLE1BQU0sUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNwQixRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQ2YsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUNqRCxVQUFVLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdEIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxFQUFFLFFBQVEsQ0FBQztBQUNyQixVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxJQUFJLEVBQUUsUUFBUSxLQUFLLENBQUMsRUFBRTtBQUNoQyxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM1QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUM7QUFDeEIsV0FBVyxNQUFNO0FBQ2pCLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDL0I7QUFDQSxVQUFVLFFBQVEsRUFBRTtBQUNwQixZQUFZLEtBQUssQ0FBQyxDQUFDO0FBQ25CLGNBQWMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDckQsY0FBYyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxJQUFJO0FBQ3JCLGNBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssSUFBSTtBQUNyQixjQUFjLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsWUFBWSxLQUFLLElBQUk7QUFDckIsY0FBYyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxJQUFJO0FBQ3JCLGNBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssSUFBSTtBQUNyQixjQUFjLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsWUFBWSxLQUFLLElBQUksQ0FBQztBQUN0QixZQUFZLEtBQUssSUFBSSxDQUFDO0FBQ3RCLFlBQVksS0FBSyxJQUFJO0FBQ3JCLGNBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkQsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsWUFBWSxLQUFLLElBQUksQ0FBQztBQUN0QixZQUFZLEtBQUssSUFBSSxDQUFDO0FBQ3RCLFlBQVksS0FBSyxJQUFJLENBQUM7QUFDdEIsWUFBWSxLQUFLLElBQUksQ0FBQztBQUN0QixZQUFZLEtBQUssSUFBSSxDQUFDO0FBQ3RCLFlBQVksS0FBSyxJQUFJLENBQUM7QUFDdEIsWUFBWSxLQUFLLElBQUksQ0FBQztBQUN0QixZQUFZLEtBQUssSUFBSTtBQUNyQixjQUFjLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ25DLGNBQWMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUNsQztBQUNBLGNBQWMsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDNUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3JDO0FBQ0EsZ0JBQWdCLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO0FBQzlDLGtCQUFrQixZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM3QyxpQkFBaUI7QUFDakIsZUFBZTtBQUNmO0FBQ0EsY0FBYyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssSUFBSTtBQUNyQixjQUFjLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRTtBQUM1QyxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hDLGVBQWU7QUFDZjtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxJQUFJO0FBQ3JCLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVk7QUFDWixjQUFjLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25ELGNBQWMsTUFBTTtBQUNwQixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRO0FBQ1IsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxVQUFVLE1BQU07QUFDaEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksRUFBRTtBQUNoQixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDekIsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzdCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDO0FBQ3ZCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0QsTUFBTSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDdkIsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5QixVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxpQkFBaUIsR0FBRyw2REFBNkQsQ0FBQyxDQUFDO0FBQzdHLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixVQUFVLE1BQU07QUFDaEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3RCLFVBQVUsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEM7QUFDQSxVQUFVLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3pCLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsOEJBQThCLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3JILFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsWUFBWSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxjQUFjLE1BQU07QUFDcEIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRCxZQUFZLFNBQVM7QUFDckIsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hELFNBQVMsTUFBTTtBQUNmLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BELFNBQVM7QUFDVCxPQUFPLE1BQU07QUFDYixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7QUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakQsR0FBRztBQUNIO0FBQ0EsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFO0FBQ3JCLElBQUksTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssdUJBQXVCLEVBQUU7QUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsd0RBQXdELENBQUMsQ0FBQztBQUNoRixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixHQUFHLHVCQUF1QixFQUFFO0FBQzFELE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxHQUFHO0FBQ2pCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUM5QixJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLElBQUksVUFBVSxFQUFFLFdBQVcsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQSxJQUFJLE9BQU8sSUFBSSxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ2xCLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDbkQsUUFBUSxNQUFNO0FBQ2QsT0FBTyxNQUFNLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUM5QixRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixRQUFRLE1BQU07QUFDZCxPQUFPLE1BQU0sSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3pDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM3QixRQUFRLFNBQVM7QUFDakIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLFVBQVUsRUFBRTtBQUN4QixVQUFVLFVBQVUsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEM7QUFDQSxVQUFVLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2pDLFlBQVksSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQztBQUNBLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNqQyxZQUFZLFNBQVM7QUFDckIsV0FBVztBQUNYLFNBQVMsTUFBTTtBQUNmLFVBQVUsV0FBVyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QztBQUNBLFVBQVUsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDbEMsWUFBWSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2pDLFlBQVksU0FBUztBQUNyQixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDMUUsU0FBUztBQUNUO0FBQ0EsUUFBUSxVQUFVLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDakMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzdCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUM5QjtBQUNBLElBQUksT0FBTyxJQUFJLEVBQUU7QUFDakIsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbEIsUUFBUSxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUM7QUFDL0IsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sRUFBRTtBQUNuQixRQUFRLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQ3hDLFVBQVUsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUMxQixTQUFTO0FBQ1QsT0FBTyxNQUFNLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUM5QixRQUFRLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkIsT0FBTyxNQUFNLElBQUksWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QyxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2xCLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDaEIsTUFBTSxLQUFLLElBQUksQ0FBQztBQUNoQixNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ2hCLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDaEIsTUFBTSxLQUFLLElBQUksQ0FBQztBQUNoQixNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ2hCLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDaEIsTUFBTSxLQUFLLElBQUksQ0FBQztBQUNoQixNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ2hCLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDaEIsTUFBTSxLQUFLLElBQUksQ0FBQztBQUNoQixNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ2hCLE1BQU0sS0FBSyxJQUFJO0FBQ2YsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNoQztBQUNBLE1BQU0sS0FBSyxJQUFJO0FBQ2YsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNoQztBQUNBLE1BQU0sS0FBSyxJQUFJO0FBQ2YsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QjtBQUNBLE1BQU0sS0FBSyxJQUFJO0FBQ2YsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEIsUUFBUSxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsTUFBTSxLQUFLLElBQUk7QUFDZixRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixRQUFRLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEM7QUFDQSxNQUFNLEtBQUssSUFBSTtBQUNmLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQ3pCLFVBQVUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzFCLFVBQVUsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxLQUFLLElBQUk7QUFDZixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDN0I7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUN6QixVQUFVLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMxQixVQUFVLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsTUFBTSxLQUFLLElBQUk7QUFDZixRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixRQUFRLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEM7QUFDQSxNQUFNLEtBQUssSUFBSTtBQUNmLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLFFBQVEsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QztBQUNBLE1BQU0sS0FBSyxJQUFJO0FBQ2YsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEMsSUFBSSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdDLElBQUksSUFBSSxpQkFBaUIsR0FBRyxhQUFhLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUM5RTtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzdELE1BQU0sTUFBTSxlQUFlLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUQ7QUFDQSxNQUFNLElBQUksaUJBQWlCLElBQUksYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUM3RSxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDOUIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsT0FBTztBQUNQO0FBQ0EsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDO0FBQzVCLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDNUUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7QUFDeEIsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRTtBQUN6QixNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7QUFDdEIsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDakQsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxHQUFHO0FBQ25CLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUM5QjtBQUNBLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3BCLE1BQU0sSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQ3pCLFVBQVUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzFCLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTTtBQUNkLE9BQU8sTUFBTSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDOUIsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEIsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QjtBQUNBLE1BQU0sYUFBYSxDQUFDO0FBQ3BCLEVBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ3hCLElBQUksU0FBUyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxjQUFjLEdBQUcsS0FBSyxFQUFFO0FBQzNELE1BQU0sTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQztBQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLGNBQWMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUMxRSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ2xHLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFO0FBQy9CLE1BQU0sTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxNQUFNLElBQUksV0FBVyxDQUFDO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sTUFBTSxDQUFDLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdGLFFBQVEsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUMxRCxVQUFVLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQztBQUNBLFVBQVUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3JELFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQyxDQUFDO0FBQzNGLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0FBQ2hGLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUM7QUFDOUIsTUFBTSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzlCLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEIsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNqQyxJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNqQyxJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNqQyxJQUFJLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDeE0sTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDbEUsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxHQUFHLG1DQUFtQyxDQUFDLENBQUM7QUFDbEgsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPO0FBQ1gsTUFBTSxNQUFNO0FBQ1osTUFBTSxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztBQUM5QixNQUFNLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO0FBQzdDLE1BQU0sUUFBUSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sUUFBUSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO0FBQ3BDLE1BQU0scUJBQXFCLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7QUFDakQsTUFBTSxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xFLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3RDO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFHdEQ7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2xTO0FBQ0EsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxNQUFNLEdBQUcsU0FBUyxhQUFhLEdBQUc7QUFDdEMsRUFBRSxTQUFTLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDcEQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsWUFBWSxVQUFVLEdBQUcsV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQy9GLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ25ELElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsU0FBUyxHQUFHO0FBQ3JCLElBQUksSUFBSSxNQUFNLEdBQUc7QUFDakIsTUFBTSxPQUFPLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksT0FBTyxHQUFHO0FBQ2xCLE1BQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUMvQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sRUFBRSxTQUFTLGNBQWMsR0FBRztBQUN2QyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2hDLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNwQyxLQUFLO0FBQ0wsSUFBSSxTQUFTLEVBQUUsU0FBUyxnQkFBZ0IsR0FBRztBQUMzQyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QjtBQUNBLE1BQU0sSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1QixLQUFLO0FBQ0wsSUFBSSxRQUFRLEVBQUUsU0FBUyxlQUFlLEdBQUc7QUFDekMsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsTUFBTSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN0RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxHQUFHLEtBQUssRUFBRTtBQUMzQyxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUM1QjtBQUNBLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixRQUFRLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELFFBQVEsT0FBTyxZQUFZLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDekUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQzdCO0FBQ0EsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNLEVBQUU7QUFDeEIsUUFBUSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDckIsTUFBTSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRCxNQUFNLE9BQU8sWUFBWSxHQUFHLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3ZFLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFNBQVMsZUFBZSxHQUFHO0FBQ3pDLE1BQU0sSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUM3QixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQ3hCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUFFO0FBQzVDLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDdEQsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDL0IsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQzdCLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3JCLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDMUIsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN2QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFNBQVMsV0FBVyxDQUFDLENBQUMsRUFBRTtBQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxJQUFJLEtBQUssRUFBRSxTQUFTLFlBQVksR0FBRztBQUNuQyxNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QixLQUFLO0FBQ0wsSUFBSSxTQUFTLEVBQUUsU0FBUyxnQkFBZ0IsR0FBRztBQUMzQyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUM1QixLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUUsU0FBUyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtBQUN0RSxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRSxLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0osRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEI7QUFDQSxJQUFJLFlBQVksR0FBRyxTQUFTLG1CQUFtQixHQUFHO0FBQ2xELEVBQUUsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQzdCLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDNUMsRUFBRSxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDcEM7QUFDQSxJQUFJLFlBQVksR0FBRyxTQUFTLG1CQUFtQixHQUFHO0FBQ2xELEVBQUUsSUFBSSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEM7QUFDQSxFQUFFLFNBQVMsWUFBWSxDQUFDLG9CQUFvQixFQUFFO0FBQzlDLElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLG9CQUFvQixJQUFJLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxJQUFJLElBQUksb0JBQW9CLEVBQUU7QUFDOUIsTUFBTSxPQUFPLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLEVBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQztBQUNsQyxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLFNBQVMsR0FBRztBQUMzQixJQUFJLElBQUksT0FBTyxHQUFHO0FBQ2xCLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUU7QUFDbkQsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLEtBQUs7QUFDTDtBQUNBLElBQUksWUFBWSxFQUFFLFNBQVMseUJBQXlCLENBQUMsU0FBUyxFQUFFO0FBQ2hFLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQjtBQUNBLE1BQU0sSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtBQUMxQyxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztBQUN0QztBQUNBLE1BQU0sT0FBTyxJQUFJLEdBQUcsU0FBUyxFQUFFO0FBQy9CLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNsQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQixNQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDbkMsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLFNBQVMsb0JBQW9CLEdBQUc7QUFDN0MsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxZQUFZLElBQUksR0FBRyxFQUFFO0FBQ3ZDLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3RCLFVBQVUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNwQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNyQyxLQUFLO0FBQ0wsSUFBSSxTQUFTLEVBQUUsU0FBUyxzQkFBc0IsR0FBRztBQUNqRCxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QjtBQUNBLE1BQU0sSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1QixLQUFLO0FBQ0wsSUFBSSxRQUFRLEVBQUUsU0FBUyxxQkFBcUIsR0FBRztBQUMvQyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3RELEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUFFO0FBQzNDLE1BQU0sSUFBSSxHQUFHO0FBQ2IsVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QjtBQUNBLE1BQU0sSUFBSSxNQUFNLEVBQUU7QUFDbEIsUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUN4QyxRQUFRLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRTtBQUNyRCxVQUFVLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMzQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDdkM7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLE1BQU0sRUFBRTtBQUMxQixVQUFVLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDMUIsVUFBVSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0IsU0FBUztBQUNUO0FBQ0EsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUNoQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLE1BQU0sTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sT0FBTyxZQUFZLElBQUksRUFBRSxRQUFRLFlBQVksaUJBQWlCLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNuSCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxTQUFTLHFCQUFxQixHQUFHO0FBQy9DLE1BQU0sSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUM3QixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQ3hCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUFFO0FBQzVDLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDdEQsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDL0IsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLGFBQWEsRUFBRSxTQUFTLDBCQUEwQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQzVFLE1BQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMvQjtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDcEQsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLDJDQUEyQyxDQUFDLENBQUM7QUFDMUUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7QUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwQixLQUFLO0FBQ0wsSUFBSSxLQUFLLEVBQUUsU0FBUyxrQkFBa0IsR0FBRztBQUN6QyxNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxJQUFJLGNBQWMsRUFBRSxTQUFTLDJCQUEyQixHQUFHO0FBQzNELE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFO0FBQy9DLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3pDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxFQUFFLENBQUM7QUFDaEIsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxxQkFBcUIsR0FBRyxTQUFTLDRCQUE0QixHQUFHO0FBQ3BFLEVBQUUsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUU7QUFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMzQixJQUFJLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0RCxNQUFNLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLE1BQU0sSUFBSSxNQUFNLFlBQVksWUFBWSxFQUFFO0FBQzFDLFFBQVEsV0FBVyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLE1BQU07QUFDYixRQUFRLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3JDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLEVBQUUscUJBQXFCLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFFO0FBQ0EsRUFBRSxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFNBQVMsNkJBQTZCLEdBQUc7QUFDdkYsSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQy9CO0FBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzlCLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDdEIsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ3pDLElBQUksSUFBSSxTQUFTLEdBQUcsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDaEQsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUNsQyxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUscUJBQXFCLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxTQUFTLG9DQUFvQyxHQUFHO0FBQ25HLElBQUksSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzRCxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUNqQyxRQUFRLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUNyRCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFdBQVcsQ0FBQztBQUN2QixHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsT0FBTyxxQkFBcUIsQ0FBQztBQUMvQixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3REO0FBQ0EsSUFBSSxXQUFXLEdBQUcsU0FBUyxrQkFBa0IsR0FBRztBQUNoRCxFQUFFLElBQUksY0FBYyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRyxFQUFFLElBQUksWUFBWSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM3VCxFQUFFLElBQUksVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2xULEVBQUUsSUFBSSxlQUFlLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlpSixFQUFFLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFP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bkMsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xLLFFBQVEsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ25DLE9BQU87QUFDUCxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxNQUFNLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7QUFDcEMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2YsVUFBVSxDQUFDLEdBQUcsWUFBWSxDQUFDO0FBQzNCLE1BQU0sSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNqQztBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEMsUUFBUSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzVDLFVBQVUsSUFBSSxNQUFNLEdBQUcsSUFBSSxFQUFFO0FBQzdCLFlBQVksS0FBSyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdB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QUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2QyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQyxVQUFVLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEUsVUFBVSxDQUFDLEVBQUUsQ0FBQztBQUNkLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkMsVUFBVSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLFVBQVUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEYsVUFBVSxDQUFDLEVBQUUsQ0FBQztBQUNkLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsVUFBVSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFVLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDN0MsVUFBVSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQzFDLFVBQVUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDckMsVUFBVSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVCO0FBQ0EsVUFBVSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDdEIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDckIsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsVUFBVSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDdEIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDckIsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlCO0FBQ0EsVUFBVSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDdEIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDckIsV0FBVztBQUNYO0FBQ0EsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsVUFBVSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNwQyxZQUFZLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbkMsV0FBVyxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUMvQixZQUFZLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakMsV0FBVyxNQUFNO0FBQ2pCLFlBQVksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNyQyxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNO0FBQ04sUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLHVCQUF1QixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDO0FBQ2xDLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUM7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLG9CQUFvQixHQUFHO0FBQ3BELEVBQUUsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDcEQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM3QixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLEVBQUUsYUFBYSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsRTtBQUNBLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyx1QkFBdUIsR0FBRztBQUN6RSxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ2Q7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzdCLEtBQUssTUFBTTtBQUNYLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDOUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDdEIsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMs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RUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3J5RSxFQUFFLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3WCxFQUFFLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcDRJLEVBQUUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3o0QyxFQUFFLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5d0QsRUFBRSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9oQjtBQUNBLEVBQUUsU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUU7QUFDakQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7QUFDdEQsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7QUFDdkUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUM7QUFDdkQsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNsQyxJQUFJLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDckM7QUFDQSxJQUFJLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO0FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUIsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNkO0FBQ0EsSUFBSSxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9DLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUNyQixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0M7QUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFNBQVMsR0FBRztBQUM5QixJQUFJLFlBQVksR0FBRztBQUNuQixNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNwQixRQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ25DLE1BQU0sTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN6QyxNQUFNLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDbkMsTUFBTSxJQUFJLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN2QztBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtBQUNqQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMzQixVQUFVLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3RCLFVBQVUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNwQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzdCLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEQsWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFdBQVc7QUFDWDtBQUNBLFVBQVUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ2pDLFVBQVUsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUMvQixVQUFVLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsVUFBVSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUM3QixVQUFVLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsVUFBVSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsVUFBVSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ3ZELFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUMxQztBQUNBLFlBQVksUUFBUSxLQUFLO0FBQ3pCLGNBQWMsS0FBSyxVQUFVO0FBQzdCLGdCQUFnQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEU7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNuRCxrQkFBa0IsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUM5QixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLGNBQWMsS0FBSyxXQUFXO0FBQzlCLGdCQUFnQixLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBLGdCQUFnQixJQUFJLFdBQVcsRUFBRTtBQUNqQyxrQkFBa0IsR0FBRztBQUNyQixvQkFBb0IsS0FBSyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDMUQsbUJBQW1CLFFBQVEsS0FBSyxJQUFJLEVBQUUsRUFBRTtBQUN4QztBQUNBLGtCQUFrQixHQUFHO0FBQ3JCLG9CQUFvQixLQUFLLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUMxRCxtQkFBbUIsUUFBUSxLQUFLLElBQUksRUFBRSxFQUFFO0FBQ3hDLGlCQUFpQixNQUFNO0FBQ3ZCLGtCQUFrQixHQUFHO0FBQ3JCLG9CQUFvQixLQUFLLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUMxRCxtQkFBbUIsUUFBUSxLQUFLLElBQUksRUFBRSxFQUFFO0FBQ3hDO0FBQ0Esa0JBQWtCLEdBQUc7QUFDckIsb0JBQW9CLEtBQUssSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzFELG1CQUFtQixRQUFRLEtBQUssSUFBSSxFQUFFLEVBQUU7QUFDeEMsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDakY7QUFDQSxnQkFBZ0IsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUMxRCxrQkFBa0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssRUFBRSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkYsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNuRyxrQkFBa0IsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUM5QixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLGNBQWMsS0FBSyxZQUFZO0FBQy9CLGdCQUFnQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEU7QUFDQSxnQkFBZ0IsV0FBVyxJQUFJLENBQUMsQ0FBQztBQUNqQztBQUNBLGdCQUFnQixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQzFELGtCQUFrQixFQUFFLE1BQU0sQ0FBQztBQUMzQjtBQUNBLGtCQUFrQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLEVBQUU7QUFDckcsb0JBQW9CLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDaEMsbUJBQW1CO0FBQ25CLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0EsY0FBYyxLQUFLLFlBQVk7QUFDL0IsZ0JBQWdCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNsRTtBQUNBLGdCQUFnQixXQUFXLElBQUksQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsZ0JBQWdCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLEVBQUU7QUFDMUQsa0JBQWtCLEVBQUUsTUFBTSxDQUFDO0FBQzNCO0FBQ0Esa0JBQWtCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNyRyxvQkFBb0IsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNoQyxtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQSxjQUFjLEtBQUssWUFBWTtBQUMvQixnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsZ0JBQWdCLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDakM7QUFDQSxnQkFBZ0IsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUMxRCxrQkFBa0IsRUFBRSxNQUFNLENBQUM7QUFDM0I7QUFDQSxrQkFBa0IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ3JHLG9CQUFvQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2hDLG1CQUFtQjtBQUNuQixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLGNBQWMsS0FBSyxXQUFXO0FBQzlCLGdCQUFnQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM5RDtBQUNBLGdCQUFnQixXQUFXLElBQUksQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsZ0JBQWdCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLEVBQUU7QUFDMUQsa0JBQWtCLEVBQUUsTUFBTSxDQUFDO0FBQzNCO0FBQ0Esa0JBQWtCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNyRyxvQkFBb0IsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNoQyxtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQSxjQUFjLEtBQUssWUFBWTtBQUMvQixnQkFBZ0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsZ0JBQWdCLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDakM7QUFDQSxnQkFBZ0IsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUMxRCxrQkFBa0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQztBQUM3QixtQkFBbUIsTUFBTTtBQUN6QixvQkFBb0IsRUFBRSxNQUFNLENBQUM7QUFDN0IsbUJBQW1CO0FBQ25CO0FBQ0Esa0JBQWtCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNyRyxvQkFBb0IsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNoQyxtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQSxjQUFjLEtBQUssWUFBWTtBQUMvQixnQkFBZ0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsZ0JBQWdCLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDakM7QUFDQSxnQkFBZ0IsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUMxRCxrQkFBa0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQztBQUM3QixtQkFBbUIsTUFBTTtBQUN6QixvQkFBb0IsRUFBRSxNQUFNLENBQUM7QUFDN0IsbUJBQW1CO0FBQ25CO0FBQ0Esa0JBQWtCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNyRyxvQkFBb0IsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNoQyxtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQSxjQUFjLEtBQUssWUFBWTtBQUMvQixnQkFBZ0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsZ0JBQWdCLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDakM7QUFDQSxnQkFBZ0IsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUMxRCxrQkFBa0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQztBQUM3QixtQkFBbUIsTUFBTTtBQUN6QixvQkFBb0IsRUFBRSxNQUFNLENBQUM7QUFDN0IsbUJBQW1CO0FBQ25CO0FBQ0Esa0JBQWtCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNyRyxvQkFBb0IsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNoQyxtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQSxjQUFjLEtBQUssUUFBUTtBQUMzQixnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUM7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDaEMsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQSxjQUFjO0FBQ2QsZ0JBQWdCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMvQztBQUNBLGdCQUFnQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QztBQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNoQyxhQUFhO0FBQ2IsV0FBVztBQUNYLFNBQVMsTUFBTTtBQUNmLFVBQVUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixVQUFVLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFVBQVUsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUMxQjtBQUNBLFVBQVUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUN2RCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdEI7QUFDQSxZQUFZLElBQUksV0FBVyxFQUFFO0FBQzdCLGNBQWMsR0FBRztBQUNqQixnQkFBZ0IsS0FBSyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDdEQsZUFBZSxRQUFRLEtBQUssSUFBSSxFQUFFLEVBQUU7QUFDcEMsYUFBYSxNQUFNO0FBQ25CLGNBQWMsR0FBRztBQUNqQixnQkFBZ0IsS0FBSyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDdEQsZUFBZSxRQUFRLEtBQUssSUFBSSxFQUFFLEVBQUU7QUFDcEMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzdFO0FBQ0EsWUFBWSxXQUFXLElBQUksQ0FBQyxDQUFDO0FBQzdCLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQzVCLFVBQVUsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDekQsVUFBVSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUMvQixTQUFTLE1BQU07QUFDZixVQUFVLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDM0IsWUFBWSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN0RCxjQUFjLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0I7QUFDQSxjQUFjLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLGFBQWE7QUFDYixXQUFXLE1BQU07QUFDakIsWUFBWSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDaEMsY0FBYyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsY0FBYyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QyxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDM0IsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFdBQVcsTUFBTSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDekMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUM1QixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDOUQsVUFBVSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQztBQUNBLFVBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUN0RCxVQUFVLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsVUFBVSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDM0IsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFO0FBQ25DLGNBQWMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLGNBQWMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEVBQUU7QUFDcEMsY0FBYyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN0QyxnQkFBZ0IsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0M7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ2pDLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUQsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEM7QUFDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRTtBQUN2QyxrQkFBa0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQztBQUNBLGtCQUFrQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLGlCQUFpQjtBQUNqQixlQUFlO0FBQ2YsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUM1QixXQUFXO0FBQ1gsU0FBUyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzVDLFVBQVUsT0FBTyxJQUFJLEVBQUU7QUFDdkIsWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QztBQUNBLFlBQVksSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQ3BDLGNBQWMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDOUIsY0FBYyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNsQyxjQUFjLE1BQU07QUFDcEIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QjtBQUNBLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRTtBQUNqQyxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7QUFDQSxZQUFZLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0MsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQy9CLFVBQVUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxTQUFTLE1BQU07QUFDZixVQUFVLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNaO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUMzRSxVQUFVLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMzQixVQUFVLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RixTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkO0FBQ0EsUUFBUSxHQUFHO0FBQ1gsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFO0FBQ3RDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztBQUN2QjtBQUNBLFlBQVksSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDdkMsY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztBQUNwQyxZQUFZLElBQUksR0FBRyxDQUFDLENBQUM7QUFDckIsV0FBVyxNQUFNO0FBQ2pCLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDbEM7QUFDQSxZQUFZLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3ZDLGNBQWMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMvQyxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDaEM7QUFDQSxZQUFZLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLEVBQUU7QUFDdEQsY0FBYyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDL0IsY0FBYyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUYsYUFBYSxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtBQUNqQyxjQUFjLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDekIsY0FBYyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLGFBQWE7QUFDYixXQUFXO0FBQ1gsU0FBUyxRQUFRLElBQUksRUFBRTtBQUN2QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN0QixRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDbEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsQ0FBQztBQUNmLEtBQUs7QUFDTDtBQUNBLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUU7QUFDaEMsTUFBTSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNyQztBQUNBLE1BQU0sSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQ3RDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMvQixVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2pELFVBQVUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUM1QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUU7QUFDekMsVUFBVSxFQUFFLFNBQVMsQ0FBQztBQUN0QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUNqQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLGFBQWEsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFO0FBQ25DLE1BQU0sTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN6QyxNQUFNLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDckM7QUFDQSxNQUFNLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUN0QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDL0IsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUNqRCxVQUFVLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDNUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFO0FBQ3pDLFVBQVUsRUFBRSxTQUFTLENBQUM7QUFDdEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25DLE9BQU8sTUFBTSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDN0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDcEIsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDMUMsVUFBVSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUMxQixVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDaEUsVUFBVSxFQUFFLFNBQVMsQ0FBQztBQUN0QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUNqQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDN0MsTUFBTSxNQUFNLFVBQVUsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3pDLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQy9CLFVBQVUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7QUFDckIsVUFBVSxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMzQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRTtBQUMvQyxVQUFVLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDN0M7QUFDQSxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7QUFDQSxZQUFZLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RDLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQixLQUFLO0FBQ0w7QUFDQSxJQUFJLGNBQWMsR0FBRztBQUNyQixNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ1o7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN4QixRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMzQixVQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQSxVQUFVLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFNBQVM7QUFDVCxPQUFPLE1BQU07QUFDYixRQUFRLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3BDLFVBQVUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDMUMsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLGFBQWEsR0FBRztBQUNwQixNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ1o7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN4QixRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDL0IsVUFBVSxPQUFPLENBQUMsQ0FBQztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDN0IsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLFNBQVMsTUFBTTtBQUNmLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdEIsVUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsVUFBVSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3ZCLFVBQVUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN2QixVQUFVLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsTUFBTSxPQUFPLENBQUMsQ0FBQztBQUNmLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxHQUFHO0FBQ3BCLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDeEIsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQy9CLFVBQVUsT0FBTyxDQUFDLENBQUM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxTQUFTLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN2RCxVQUFVLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLFNBQVMsTUFBTTtBQUNmLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdEIsVUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsVUFBVSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3ZCLFVBQVUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3RDtBQUNBLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDdkIsVUFBVSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3ZCLFVBQVUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDeEM7QUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxNQUFNLE9BQU8sQ0FBQyxDQUFDO0FBQ2YsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDWjtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtBQUNqQyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUM3QyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDcEMsWUFBWSxPQUFPLFFBQVEsQ0FBQztBQUM1QixXQUFXO0FBQ1g7QUFDQSxVQUFVLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4RSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFFBQVEsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDNUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2hCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyQyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxHQUFHLENBQUM7QUFDSixFQUFFLE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxQztBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO0FBR3REO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0MsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM3QjtBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQztBQUNBLElBQUksS0FBSyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxXQUFXLEdBQUcsU0FBUyxrQkFBa0IsR0FBRztBQUNsRCxFQUFFLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUMxRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDakQsR0FBRztBQUNIO0FBQ0EsRUFBRSxXQUFXLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4RSxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDeEQsSUFBSSxHQUFHLEdBQUc7QUFDVixNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDdEYsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLEVBQUUsSUFBSTtBQUN0QixHQUFHLENBQUMsQ0FBQztBQUNMO0FBQ0EsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxVQUFVLFNBQVMsRUFBRSxFQUFFLENBQUM7QUFDL0Q7QUFDQSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFlBQVk7QUFDaEQsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDbEIsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5QyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzlDLE1BQU0sTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUQ7QUFDQSxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUFFO0FBQ3BELFFBQVEsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2pELFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNwQixVQUFVLElBQUksRUFBRSxPQUFPO0FBQ3ZCLFVBQVUsS0FBSyxFQUFFLENBQUM7QUFDbEIsVUFBVSxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDN0IsU0FBUyxDQUFDLENBQUM7QUFDWCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ2hCLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO0FBQ3RCLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDZCxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDNUIsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7QUFDbkMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNwQixHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xDO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFHdEQ7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQ7QUFDQSxJQUFJLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQztBQUNBLE1BQU0sVUFBVSxTQUFTLEtBQUssQ0FBQyxhQUFhLENBQUM7QUFDN0MsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQ25CLElBQUksS0FBSyxDQUFDLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxJQUFJLFVBQVUsR0FBRyxTQUFTLGlCQUFpQixHQUFHO0FBQzlDLEVBQUUsU0FBUyxZQUFZLEdBQUcsRUFBRTtBQUM1QjtBQUNBLEVBQUUsWUFBWSxDQUFDLFNBQVMsR0FBRztBQUMzQixJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUU7QUFDcEIsTUFBTSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMvQyxLQUFLO0FBQ0w7QUFDQSxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDN0MsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsU0FBUyxHQUFHO0FBQzlCLElBQUksSUFBSSxPQUFPLEdBQUc7QUFDbEIsTUFBTSxJQUFJLE9BQU8sR0FBRyxJQUFJLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0YsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxZQUFZLEdBQUc7QUFDdkIsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ3JDLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1RCxLQUFLO0FBQ0w7QUFDQSxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsU0FBUyxhQUFhLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDM0QsSUFBSSxJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZELElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsSUFBSSxTQUFTLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFDOUIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsUUFBUSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRCxRQUFRLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM1RSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixJQUFJLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyTTtBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQ3BCLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSyxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUMxQixNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxP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RTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNQLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDUCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ1AsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOLEVBQUUsSUFBSSxtQkFBbUIsR0FBRyxDQUFDO0FBQzdCLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1gsS0FBSyxFQUFFO0FBQ1AsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNYLEtBQUssRUFBRTtBQUNQLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNYLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixLQUFLLENBQUM7QUFDTixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDWCxLQUFLLEVBQUU7QUFDUCxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1gsS0FBSyxFQUFFO0FBQ1AsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1gsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLEtBQUssRUFBRTtBQUNQLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsS0FBSyxFQUFFO0FBQ1AsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixLQUFLLEVBQUU7QUFDUCxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDWCxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsS0FBSyxFQUFFO0FBQ1AsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixLQUFLLEVBQUU7QUFDUCxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLEtBQUssQ0FBQztBQUNOLEdBQUcsRUFBRTtBQUNMLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDWCxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDWCxLQUFLLEVBQUU7QUFDUCxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1gsS0FBSyxFQUFFO0FBQ1AsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLE1BQU0sQ0FBQyxFQUFF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Q0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDZixNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUM7QUFDZDtBQUNBLElBQUksUUFBUSxNQUFNO0FBQ2xCLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUYsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqSSxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25MLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEgsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4SyxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hTLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdFQsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbFosUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZhLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLEVBQUU7QUFDYixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0WixRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxFQUFFO0FBQ2IsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDblAsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssRUFBRTtBQUNiLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25QLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLEVBQUU7QUFDYixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsUCxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxFQUFFO0FBQ2IsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkcsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssRUFBRTtBQUNiLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3UCxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU07QUFDTixRQUFRLE1BQU0sSUFBSSxVQUFVLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUMxRSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFF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QUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtB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QUFTLEdBQUcsU0FBUyxDQUFDO0FBQy9CLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sY0FBYyxTQUFTLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUNuRDtBQUNBLElBQUksU0FBUyxHQUFHLFNBQVMsZ0JBQWdCLEdBQUc7QUFDNUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDelIsRUFBRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDckIsRUFBRSxJQUFJLE9BQU8sR0FBRyxHQUFH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QUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNsRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRTtBQUN0QyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZC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QUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FB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QztBQUNuRTtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsUUFBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25FLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25FLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMxQyxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFB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QUMzQixNQUFNLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN4QjtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLHdCQUF3QixFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFELFFBQVEsSUFBSSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQUN0RCxRQUFRLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzVELFFBQVEsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUQsUUFBUSxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM1RCxRQUFRLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzVELFFBQVEsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDaEMsUUFBUSxjQUFjLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzlELFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyQyxRQUFRLElBQUksT0FBTyxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDckIsVUFBVSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFVBQVUsT0FBTyxDQUFDLElBQUks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Q0FBQztBQUNOLElBQUksT0FBTyxhQUFhLENBQUM7QUFDekIsR0FBRyxFQUFFLENBQUM7QUFDTjtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUcsU0FBUyxlQUFlLEdBQUc7QUFDNUMsSUFBSSxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDN0IsSUFBSSxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUMvQixJQUFJLElBQUksb0JBQW9CLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDalIsSUFBSSxJQUFJLGNBQWMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzUSxJQUFJLElBQUksY0FBYyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNRO0FBQ0EsSUFBSSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFO0FBQ2pFLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FB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QyxTQUFTLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0FBQzlFLEVBQUUsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3RDO0FBQ0EsSUFBSSxZQUFZLEdBQUcsU0FBUyxtQkFBbUIsR0FBRztBQUNsRCxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2USxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDbnhC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LENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ3BCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQixTQUFTLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQzNCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3QixTQUFTLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQzNCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3QixTQUFTLE1BQU07QUFDZixVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ25CLFlBQVksU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQy9DLFlBQVksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxJQUFJLE1BQU0sR0FBRyxTQUFTLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcFIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENB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QUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLGdCQUFnQixDQUFDLENBQUMsRUFBRTtBQUMvQixJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzN3QjtBQUNBLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDdEMsSUFBSSxJQUFJLEVBQUUsR0FBRyxVQUFVO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLFVBQVU7QUFDdkIsUUFBUSxFQUFFLEdBQUcsVUFBVTtBQUN2QixRQUFRLEVBQUUsR0FBRyxVQUFVO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLFVBQVU7QUFDdkIsUUFBUSxFQUFFLEdBQUcsVUFBVTtBQUN2QixRQUFRLEVBQUUsR0FBRyxVQUFVO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztBQUN4QixJQUFJLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6RCxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoQjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDakMsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDakMsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsSUFBSSxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN6QjtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2xCLE1BQU0sTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdkMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksR0FBRztBQUNuQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDZixPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUYsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDaEIsVUFBVSxFQUFFO0FBQ1osVUFBVSxFQUFFLENBQUM7QUFDYjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDL0IsUUFBUSxFQUFFLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixPQUFPO0FBQ1A7QUFDQSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BnQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxlQUFlLEdBQUcsU0FBUyxzQkFBc0IsR0FBRztBQUN4RCxFQUFFLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDcEMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ3JDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDakMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ3RDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN2QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUM1QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDMzBGO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDL0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN4QixJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUQsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDMUI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQixNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJLElBQUksRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IsUUFBUSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQixRQUFRLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDO0FBQ2I7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxHQUFHO0FBQ25DLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDL0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFD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QUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxlQUFlLEdBQUcsU0FBUyxzQkFBc0IsR0FBRztBQUN4RCxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQ3RDLElBQUksT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkQsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxQztBQUNBLElBQUksVUFBVSxHQUFHLFNBQVMsaUJBQWlCLEdBQUc7QUFDOUMsRUFBRSxTQUFTLFVBQVUsR0FBRyxFQUFFO0FBQzFCO0FBQ0EsRUFBRSxVQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3pCLElBQUksWUFBWSxFQUFFLFNBQVMsdUJBQXVCLENBQUMsSUFBSSxFQUFFO0FBQ3pELE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE1BQU0sYUFBYSxDQUFDO0FBQ3BCLEVBQUUsV0FBVyxHQUFHO0FBQ2hCLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLGFBQWEsRUFBRTtBQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO0FBQ2pFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL2hELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbmlELElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDbGlHLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QztBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtBQUNuQixRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRTtBQUN4QixJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ3pFLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDdkIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hCLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3pELE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzVELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ25DLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0QyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xGLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ25DLFFBQVEsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxRQUFRLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsUUFBUSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUN2QixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hCLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ25DLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixPQUFPO0FBQ1A7QUFDQSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxLQUFLLENBQUMsRUFB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Q0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbGlELElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRTtBQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdEIsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEMsTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3QixNQUFNLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0IsTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6QyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ1osUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNaLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNwQztBQUNBLE1BQU0sWUFBWSxTQUFTLGFBQWEsQ0FBQztBQUN6QyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDbkIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRTtBQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdEIsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEMsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ3pCLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixPQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMvQixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDOUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNoQyxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6QyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ1osUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNaLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNwQztBQUNBLElBQUksS0FBSyxHQUFHLFNBQVMsWUFBWSxHQUFHO0FBQ3BDLEVBQUUsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzdDLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDekMsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ25DLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLEtBQUssR0FBRyxFQUFFO0FBQ3JCO0FBQ0EsRUFBRSxLQUFLLENBQUMsU0FBUyxHQUFHO0FBQ3BCLElBQUksa0JBQWtCLEVBQUUsU0FBUyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRTtBQUNuSCxNQUFNLElBQUksUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDMUQsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pELE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RSxNQUFNLElBQUksTUFBTSxHQUFHLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRSxNQUFNLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLFNBQVMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRTtBQUNwRyxNQUFNLElBQUksUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELE1BQU0sSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDckQsS0FBSztBQUNMLElBQUksV0FBVyxFQUFFLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO0FBQ2hHLE1BQU0sSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMxRCxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckUsTUFBTSxJQUFJLEdBQUcsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUQsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0UsS0FBSztBQUNMLElBQUksVUFBVSxFQUFFLFNBQVMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUU7QUFDakYsTUFBTSxJQUFJLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakQsTUFBTSxJQUFJLEdBQUcsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUQsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUUsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQSxJQUFJLEtBQUssR0FBRyxTQUFTLFlBQVksR0FBRztBQUNwQyxFQUFFLFNBQVMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDeEMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7QUFDMUQsSUFBSSxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZDtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDL0MsTUFBTSxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUN0RSxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoRCxNQUFNLElBQUksS0FBSyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3QztBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxXQUFXLEVBQUU7QUFDaEUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRCxNQUFNLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxRQUFRLFNBQVMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFFBQVEsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUN2QixRQUFRLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUN2QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUMzQixRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsT0FBTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUNsQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsT0FBTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUNsQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsT0FBTztBQUNQO0FBQ0EsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsS0FBSyxHQUFHLEVBQUU7QUFDckI7QUFDQSxFQUFFLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUM3QyxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ3pDLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNuQyxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLFNBQVMsR0FBRztBQUNwQixJQUFJLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRTtBQUNoRSxNQUFNLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0wsSUFBSSxrQkFBa0IsRUFBRSxTQUFTLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFO0FBQ25ILE1BQU0sSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMxRCxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFLE1BQU0sSUFBSSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyRSxNQUFNLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLFNBQVMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRTtBQUNwRyxNQUFNLElBQUksUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELE1BQU0sSUFBSSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5RCxNQUFNLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3JELEtBQUs7QUFDTCxJQUFJLFdBQVcsRUFBRSxTQUFTLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtBQUNoRyxNQUFNLElBQUksUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDMUQsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sSUFBSSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RSxLQUFLO0FBQ0wsSUFBSSxVQUFVLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRTtBQUNqRixNQUFNLElBQUksUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRCxNQUFNLElBQUksR0FBRyxHQUFHLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0QsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUUsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQSxJQUFJLGVBQWUsR0FBRyxTQUFTLHNCQUFzQixHQUFHO0FBQ3hELEVBQUUsU0FBUyxlQUFlLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUU7QUFDN0UsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7QUFDM0QsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsU0FBUyxHQUFHO0FBQzlCLElBQUksWUFBWSxFQUFFLFNBQVMsNEJBQTRCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUN4RSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDdEQsTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUM3RyxRQUFRLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkQsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUUsU0FBUyw2QkFBNkIsQ0FBQyxDQUFDLEVBQUU7QUFDN0QsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQ3RELE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLElBQUksc0JBQXNCLEdBQUcsU0FBUyw2QkFBNkIsR0FBRztBQUN0RSxFQUFFLElBQUksb0JBQW9CLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5TztBQUNBLEVBQUUsU0FBUyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUU7QUFDdE0sSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNsQixNQUFNLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN0RCxLQUFLLE1BQU07QUFDWCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFlBQVksQ0FBQztBQUNyQjtBQUNBLElBQUksSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ3hCLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDakMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxZQUFZLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNqQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksWUFBWSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLENBQUMsRUFBRTtBQUNwRixNQUFNLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzVFLEtBQUssTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLEVBQUU7QUFDekgsTUFBTSxPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDdkYsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7QUFDdEgsSUFBSSxJQUFJLFlBQVksR0FBRyxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pFLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDO0FBQy9DLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDYixRQUFRLENBQUM7QUFDVCxRQUFRLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNsQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEM7QUFDQSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN6QixRQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDbkIsTUFBTSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdEQsTUFBTSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN2QyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hDO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUMvQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtBQUMzQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQixNQUFNLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQixNQUFNLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQixNQUFNLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxnQkFBZ0IsR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7QUFDdkIsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUMvQixRQUFRLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3ZELE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDM0QsSUFBSSxJQUFJLE1BQU0sRUFBRSxTQUFTLENBQUM7QUFDMUI7QUFDQSxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUN2QixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDakQsUUFBUSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDaEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7QUFDL0IsTUFBTSxJQUFJLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDeEMsVUFBVSxDQUFDLENBQUM7QUFDWjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoQyxVQUFVLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9DLFFBQVEsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkQsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCxRQUFRLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM5QyxVQUFVLE9BQU8sSUFBSSxDQUFDO0FBQ3RCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDaEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCxRQUFRLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM5QyxVQUFVLE9BQU8sSUFBSSxDQUFDO0FBQ3RCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLGFBQWEsQ0FBQztBQUN6QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0FBQzVFLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ3JDLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDYixRQUFRLENBQUM7QUFDVCxRQUFRLENBQUMsQ0FBQztBQUNWLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZCLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDVjtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ25CLE1BQU0sUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxnQkFBZ0IsR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7QUFDdkIsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUMvQixRQUFRLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsWUFBWSxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7QUFDdkIsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDO0FBQ25DLE1BQU0sSUFBSSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUM7QUFDdkQsVUFBVSxDQUFDLENBQUM7QUFDWjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9DLFVBQVUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDL0MsUUFBUSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6RCxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDeEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFlBQVksQ0FBQztBQUN4QixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsRUFBRSxTQUFTLHNCQUFzQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQzFELElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwQztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDdEQsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQy9ELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO0FBQ2xILE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUN0RSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQy9CLElBQUksSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNwQixNQUFNLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRTtBQUMxQixRQUFRLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDdkIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtBQUMxRixVQUFVLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDM0MsVUFBVSxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlELFVBQVUsU0FBUyxHQUFHLFdBQVcsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUN0RTtBQUNBLFVBQVUsSUFBSSxTQUFTLEdBQUcsRUFBRSxFQUFFO0FBQzlCLFlBQVksU0FBUyxLQUFLLENBQUMsQ0FBQztBQUM1QixXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxFQUFFLElBQUksU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDL0UsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9FLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsSUFBSSxJQUFJLGVBQWUsR0FBRyxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEtBQUssS0FBSyxDQUFDO0FBQ3hHLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDM0MsSUFBSSxJQUFJLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkQsSUFBSSxJQUFJLGFBQWEsQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxRQUFRLEVBQUU7QUFDbEIsTUFBTSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDMUIsUUFBUSxJQUFJO0FBQ1osVUFBVSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzdELFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUNyQixVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSwwQkFBMEIsR0FBRywwQ0FBMEMsQ0FBQyxDQUFDO0FBQ25HLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLGFBQWEsQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDM0ksS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLG1CQUFtQixHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RixNQUFNLElBQUksWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRixNQUFNLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRSxNQUFNLElBQUksa0JBQWtCLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3hGLE1BQU0sSUFBSSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pGLE1BQU0sSUFBSSxlQUFlLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRSxNQUFNLElBQUksY0FBYyxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEUsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzlELE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsY0FBcUIsQ0FBQyxDQUFDO0FBQ3ROLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNyQyxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BHLEtBQUssTUFBTSxJQUFJLENBQUMsYUFBYSxJQUFJLFFBQVEsRUFBRTtBQUMzQyxNQUFNLElBQUksZUFBZSxHQUFHLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xHLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDN0ksS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ3hCLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUMxRyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3ZDO0FBQ0EsSUFBSSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2QyxRQUFRLEVBQUUsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDckMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxZQUFZLENBQUM7QUFDbkQsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDO0FBQ25ELE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDOUMsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFO0FBQzFELElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxDQUFDO0FBQ1QsUUFBUSxDQUFDLENBQUM7QUFDVjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdEQsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDL0I7QUFDQSxJQUFJLElBQUksS0FBSyxFQUFFO0FBQ2YsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQzNELElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtBQUN4QyxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDaEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksR0FBRyxDQUFDO0FBQ1o7QUFDQSxJQUFJLElBQUksV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO0FBQzNELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQ3JDLE1BQU0sT0FBTyxTQUFTLGdEQUFnRCxHQUFHO0FBQ3pFLFFBQVEsT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2hDLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUMzQixNQUFNLE9BQU8sU0FBUyw4Q0FBOEMsR0FBRztBQUN2RSxRQUFRLE9BQU8sSUFBSSxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkUsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQzlCLE1BQU0sT0FBTyxTQUFTLGlEQUFpRCxHQUFHO0FBQzFFLFFBQVEsT0FBTyxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRSxPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDOUIsTUFBTSxPQUFPLFNBQVMsaURBQWlELEdBQUc7QUFDMUUsUUFBUSxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLHNCQUFzQixDQUFDLFNBQVMsR0FBRztBQUNyQyxJQUFJLHFCQUFxQixFQUFFLFNBQVMsNENBQTRDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUMzRixNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDeEQsUUFBUSxPQUFPLElBQUksZUFBZSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN2TCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEU7QUFDQSxNQUFNLElBQUksaUJBQWlCLEdBQUcsU0FBUyw0QkFBNEIsR0FBRztBQUN0RSxRQUFRLE9BQU8sSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsT0FBTyxDQUFDO0FBQ1I7QUFDQSxNQUFNLE9BQU8sSUFBSSxlQUFlLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUN2RSxLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0osRUFBRSxPQUFPLHNCQUFzQixDQUFDO0FBQ2hDLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7QUFDeEQ7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUd0RDtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUI7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFO0FBQzVELEVBQUUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUN4QyxFQUFFLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLEVBQUUsSUFBSSxRQUFRLEdBQUcsQ0FBQztBQUNsQixNQUFNLFFBQVEsQ0FBQztBQUNmLEVBQUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEMsRUFBRSxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBQ3JDO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9CLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNyRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDbkQ7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN6QyxNQUFNLFFBQVEsSUFBSSxPQUFPLENBQUM7QUFDMUIsS0FBSztBQUNMLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxNQUFNLFVBQVUsQ0FBQztBQUNqQixFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQzlCLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtBQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0FBQzlELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFO0FBQ3pCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUMvQyxJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ3BFLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN2RSxJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSx5Q0FBeUMsQ0FBQyxDQUFDO0FBQ3RFLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDeEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsNENBQTRDLENBQUMsQ0FBQztBQUN6RSxHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUU7QUFDdEIsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0FBQ2xDLElBQUksT0FBTyxVQUFVLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEUsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDakcsSUFBSSxNQUFNLEtBQUssR0FBRyxhQUFhLEdBQUcsY0FBYyxDQUFDO0FBQ2pELElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLElBQUksTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3hDLElBQUksTUFBTSxhQUFhLEdBQUcsY0FBYyxLQUFLLE1BQU0sSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDO0FBQy9FO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDakMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUM3SCxNQUFNLE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVHO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkQsUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvRTtBQUNBLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUMxQixRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN4QyxVQUFVLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxVQUFVLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFDN0IsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQyxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN4QyxVQUFVLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsVUFBVSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0MsVUFBVSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQyxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUMxQixRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pGLE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxHQUFHLElBQUksaUJBQWlCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRTtBQUNoQixNQUFNLElBQUksYUFBYSxFQUFFO0FBQ3pCLFFBQVEsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVGLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUN2QixZQUFZLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEUsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM3QyxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDN0MsVUFBVSxPQUFPLElBQUksT0FBTyxDQUFDO0FBQzdCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxrQkFBa0IsR0FBRztBQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFO0FBQ2xELElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2pFLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsRUFBRSxFQUFFO0FBQ3BCLElBQUksTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hELElBQUksSUFBSSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQztBQUN0QztBQUNBLElBQUksUUFBUSxJQUFJO0FBQ2hCLE1BQU0sS0FBSyxjQUFjO0FBQ3pCLFFBQVEsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUNwQztBQUNBLE1BQU0sS0FBSyxhQUFhO0FBQ3hCLFFBQVEsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUNuQztBQUNBLE1BQU0sS0FBSyxjQUFjO0FBQ3pCLFFBQVEsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUNwQztBQUNBLE1BQU0sS0FBSyxXQUFXO0FBQ3RCLFFBQVEsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBUSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsT0FBTyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsTUFBTSxLQUFLLFVBQVU7QUFDckIsUUFBUSxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBUSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25FO0FBQ0EsTUFBTSxLQUFLLFdBQVc7QUFDdEIsUUFBUSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksYUFBYSxFQUFFO0FBQzNCLFVBQVUsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDckQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLElBQUksU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsTUFBTSxLQUFLLFdBQVc7QUFDdEIsUUFBUSxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsUUFBUSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFO0FBQ0EsTUFBTSxLQUFLLGFBQWE7QUFDeEIsUUFBUSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBUSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25FO0FBQ0EsTUFBTSxLQUFLLE9BQU87QUFDbEIsUUFBUSxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4RDtBQUNBLE1BQU07QUFDTixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxrQkFBa0IsRUFBRTtBQUM3RCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyQyxNQUFNLFFBQVEsRUFBRSxDQUFDLElBQUk7QUFDckIsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUMxQixRQUFRLEtBQUssR0FBRztBQUNoQixVQUFVLE9BQU8sY0FBYyxDQUFDO0FBQ2hDO0FBQ0EsUUFBUSxLQUFLLFdBQVcsQ0FBQztBQUN6QixRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLE9BQU8sYUFBYSxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUMxQixRQUFRLEtBQUssTUFBTTtBQUNuQixVQUFVLE9BQU8sY0FBYyxDQUFDO0FBQ2hDO0FBQ0EsUUFBUSxLQUFLLFNBQVM7QUFDdEIsVUFBVSxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsUUFBUTtBQUNSLFVBQVUsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDNUMsWUFBWSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsWUFBWSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRTtBQUN0RCxjQUFjLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsY0FBYyxJQUFJLEtBQUssRUFBRTtBQUN6QixnQkFBZ0IsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDcEQsa0JBQWtCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzlFLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQzNCLGdCQUFnQixNQUFNO0FBQ3RCLGVBQWU7QUFDZixhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzNCLE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDL0MsTUFBTSxJQUFJLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDO0FBQy9EO0FBQ0EsTUFBTSxRQUFRLElBQUk7QUFDbEIsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUMxQixRQUFRLEtBQUssR0FBRztBQUNoQixVQUFVLE9BQU8sY0FBYyxDQUFDO0FBQ2hDO0FBQ0EsUUFBUSxLQUFLLFdBQVcsQ0FBQztBQUN6QixRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLE9BQU8sYUFBYSxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUMxQixRQUFRLEtBQUssTUFBTTtBQUNuQixVQUFVLE9BQU8sY0FBYyxDQUFDO0FBQ2hDO0FBQ0EsUUFBUSxLQUFLLFNBQVM7QUFDdEIsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxVQUFVLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3JELFVBQVUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDckQsVUFBVSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxVQUFVLE9BQU8sQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsS0FBSyxRQUFRO0FBQ3JCLFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsVUFBVSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNyRCxVQUFVLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3JELFVBQVUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsVUFBVSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25ELFVBQVUsT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRTtBQUNBLFFBQVEsS0FBSyxVQUFVO0FBQ3ZCLFVBQVUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxVQUFVLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDbkMsVUFBVSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsVUFBVSxJQUFJLEdBQUcsRUFBRTtBQUNuQixZQUFZLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUM3RSxZQUFZLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDakU7QUFDQSxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7QUFDN0MsY0FBYyxPQUFPLEtBQUssQ0FBQztBQUMzQixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSw0REFBNEQsQ0FBQyxDQUFDO0FBQzFGLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksT0FBTyxjQUFjLENBQUM7QUFDbEMsV0FBVyxNQUFNLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtBQUNyQyxZQUFZLE9BQU8sYUFBYSxDQUFDO0FBQ2pDLFdBQVcsTUFBTSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDckMsWUFBWSxPQUFPLGNBQWMsQ0FBQztBQUNsQyxXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssU0FBUztBQUN0QixVQUFVLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDNUM7QUFDQSxVQUFVLElBQUksYUFBYSxFQUFFO0FBQzdCLFlBQVksYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUN6RixXQUFXO0FBQ1g7QUFDQSxVQUFVLE9BQU8sQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDOUM7QUFDQSxRQUFRLEtBQUssU0FBUyxDQUFDO0FBQ3ZCLFFBQVEsS0FBSyxHQUFHO0FBQ2hCLFVBQVUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3JGLFVBQVUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkQsVUFBVSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsVUFBVSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUNqRCxZQUFZLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdkMsV0FBVztBQUNYO0FBQ0EsVUFBVSxPQUFPLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0Q7QUFDQSxRQUFRLEtBQUssWUFBWSxDQUFDO0FBQzFCLFFBQVEsS0FBSyxTQUFTO0FBQ3RCLFVBQVUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxVQUFVLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzNELFVBQVUsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUNyRSxVQUFVLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0UsVUFBVSxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEQ7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFVBQVUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDckQsVUFBVSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNyRCxVQUFVLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakQsVUFBVSxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxRQUFRO0FBQ1IsVUFBVSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsa0NBQWtDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQzNDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDaEMsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDBDQUEwQyxDQUFDLENBQUM7QUFDbEUsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN4RCxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNsRCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxVQUFVLEdBQUc7QUFDMUIsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO0FBQ2pELE1BQU0sSUFBSSxJQUFJLEdBQUc7QUFDakIsUUFBUSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNuRSxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHO0FBQ2hCLFFBQVEsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDakUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksR0FBRztBQUNqQixRQUFRLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLE9BQU87QUFDUDtBQUNBLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDaEM7QUFDQSxNQUFNLFdBQVcsU0FBUyxVQUFVLENBQUM7QUFDckMsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDdEMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUMvQyxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN2QyxJQUFJLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0FBQ3ZELElBQUksTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEtBQUssT0FBTyxLQUFLLENBQUMsQ0FBQztBQUMxRixJQUFJLElBQUksR0FBRyxHQUFHLGFBQWEsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLElBQUksTUFBTSxPQUFPLEdBQUcsYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJLGlCQUFpQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN2RixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDbkMsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QyxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xELElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckMsUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzdDLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxJQUFJLGtCQUFrQixFQUFFO0FBQzlCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsVUFBVSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLFNBQVM7QUFDVCxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakQsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDO0FBQzVCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDeEIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pFLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQ3hDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRyxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLFNBQVMsU0FBUyxVQUFVLENBQUM7QUFDbkMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ3RCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7QUFDbEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztBQUN4RSxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLFNBQVMsU0FBUyxVQUFVLENBQUM7QUFDbkMsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDckMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMzQixJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDdkMsSUFBSSxNQUFNLE1BQU0sR0FBRyxZQUFZLEdBQUcsT0FBTyxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUMzQyxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0MsTUFBTSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQzVDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQztBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2QyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxPQUFPO0FBQ1AsS0FBSyxNQUFNLElBQUksTUFBTSxZQUFZLFVBQVUsRUFBRTtBQUM3QyxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzNCLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQywyQkFBMkIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUMvQyxJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3hDLElBQUksTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkUsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNuQyxJQUFJLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQyxNQUFNLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNwRCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUUsTUFBTSxVQUFVLElBQUksV0FBVyxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQ3hDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEYsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtBQUNsQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQ25DLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDMUQsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztBQUMzRCxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pFLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sWUFBWSxTQUFTLFVBQVUsQ0FBQztBQUN0QyxFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQy9DLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZFLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN2RSxJQUFJLE1BQU0sS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsR0FBRyxTQUFTO0FBQ3JCLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUN2QjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLENBQUMsSUFBSSxPQUFPLENBQUM7QUFDbkIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDeEMsSUFBSSxPQUFPLFdBQVcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxXQUFXLFNBQVMsVUFBVSxDQUFDO0FBQ3JDLEVBQUUsV0FBVyxHQUFHO0FBQ2hCLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDL0MsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEQsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BELEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN2RSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQ3JDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxHQUFHLFNBQVM7QUFDckIsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ3ZCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQztBQUNuQixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUN4QyxJQUFJLE9BQU8sV0FBVyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRTtBQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQztBQUN0QixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLFlBQVksR0FBRyxTQUFTLG1CQUFtQixHQUFHO0FBQ3BELEVBQUUsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUNwRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEMsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUM1QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzVDLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUM7QUFDOVgsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsZUFBZSxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzlYLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixH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QUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDckQsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7QUFDOUgsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUNqRCxNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELEtBQUs7QUFDTDtBQUNBLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN6RSxNQUFNLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUM7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdEMsUUFBUSxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRSxRQUFRLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDdkIsUUFBUSxVQUFVLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNsQyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMxQyxNQUFNLE9BQU8sV0FBVyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE1BQU0sS0FBSyxHQUFHLFNBQVMsWUFBWSxHQUFHO0FBQ3RDLEVBQUUsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ25CLElBQUksSUFBSSxNQUFNLENBQUM7QUFDZjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUNyQixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDeEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUM3QyxJQUFJLE9BQU8sSUFBSSxHQUFHLEtBQUssSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pELEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxZQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDdEUsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUIsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO0FBQzFCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUU7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUNuQixLQUFLLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtBQUM3QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ25CLEtBQUssTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFO0FBQzdCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0FBQzlCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDM0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxLQUFLLE1BQU07QUFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDakQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzlDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEtBQUssU0FBUyxVQUFVLENBQUM7QUFDakMsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7QUFDL0MsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3ZCLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsbURBQW1ELENBQUMsQ0FBQztBQUN6RixPQUFPO0FBQ1A7QUFDQSxNQUFNLFVBQVUsR0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sS0FBSyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5QyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ3ZELFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsc0RBQXNELENBQUMsQ0FBQztBQUM1RixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDckQsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztBQUN2RSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENB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LFVBQVUsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xELFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0UsUUFBUSxVQUFVLElBQUksT0FBTyxDQUFDO0FBQzlCLFFBQVEsTUFBTSxJQUFJLFVBQVUsQ0FBQztBQUM3QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsTUFBTSxPQUFPLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDMUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE9B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QUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0c7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO0FBQ3ZJLFVBQVUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsVUFBVSxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUU7QUFDL0IsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkc7QUFDQSxRQUFRLGVBQWUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM1QixVQUFVLGVBQWUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLFVBQVUsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMs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SUFBSSxhQUFhLEVBQUUsU0FBUyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RSxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsS0FBSztBQUNMLElBQUksaUJBQWlCLEVBQUUsU0FBUyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxRSxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7QUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsS0FBSztBQUNMLElBQUksbUJBQW1CLEVBQUUsU0FBUyw2QkFBNkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxF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YSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FB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RUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEs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QUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxNQUFNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sSUFBSSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1RSxNQUFNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QyxNQUFNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QyxNQUFNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUM7QUFDL0I7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RDLFFBQVEsU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFELFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FB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QyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ3hDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQixNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUM7QUFDclIsSUFBSSxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDMUI7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFD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LEtBQUs7QUFDTCxJQUFJLGNBQWMsRUFBRSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3pFLE1BQU0sTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUk7QUFDQSxNQUFNLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDM0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBUSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBUSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLFVBQVUsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFD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QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6akI7QUFDQSxNQUFNLFNBQVMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRTtBQUNuRCxRQUFRLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pCLFlBQVksQ0FBQztBQUNiLFlBQVksQ0FBQztBQUNiLFlBQVksQ0FBQztBQUNiLFlBQVksTUFBTTtBQUNsQixZQUFZLEVBQUU7QUFDZCxZQUFZLFFBQVEsR0FBRyxDQUFDO0FBQ3hCLFlBQVksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN6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SUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3BFLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxlQUFlLEdBQUc7QUFDNUIsUUFBUSxVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvRCxRQUFRLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckUsUUFBUSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFFBQVEsT0FBTyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxP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QUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUs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QUUsRUFBRTtBQUNsQixNQUFNLEtBQUssRUFBRSxFQUFFO0FBQ2YsTUFBTSxPQUFPLEVBQUUsRUFBRTtBQUNqQixNQUFNLEtBQUssRUFBRSxFQUFFO0FBQ2YsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckQsTUFBTSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsSUFBSSxVQUFVLEdBQUcsU0FBUyxpQkFBaUIsR0FBRztBQUM5QyxFQUFFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3QwQyxFQUFFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNwQjtBQUNBLEVBQUUsU0FB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LElBQUksR0FBRyxDQUFDLENBQUM7QUFDbkI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkQsUUFBUSxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLFVBQVUsQ0FBQztBQUM1QyxRQUFRLElBQUksT0FBTyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDbEMsUUFBUSxJQUFJLE9BQU8sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksT0FBTyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2hJLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsd0NBQXdDLENBQUMsQ0FBQztBQUNoRixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFD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QUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcndFLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFDLE1BQU0sYUFBYSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFB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QUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFB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QUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4dEYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMzBFLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM1QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNueEQsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzVDLE1BQU0sZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvMEUsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3A4RSxPQUFPLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDOUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFF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TUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxH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TUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNwQixDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FB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QyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxD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QU0sQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDZixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDZixDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ2YsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDZixDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ2YsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FB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QUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQywyQkFBMkIsR0FBRywyQkFBMkIsQ0FBQztBQUNsRSxNQUFNLG9DQUFvQyxHQUFHLElBQUksV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ2pHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLG9DQUFvQyxHQUFHLG9DQUFvQyxDQUFDO0FBQ3BGLE1BQU0saUNBQWlDLEdBQUcsSUFBSSxXQUFXLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDOUYsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ1osRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxD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QUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsR0FBRyxFQUFFLE9BQU87QUFDZCxFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxPQUFPO0FBQ2QsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsR0FBRyxFQUFFLE9BQU87QUFDZCxFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxHQUFHLEVB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QUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyw0Q0FBNEMsQ0FBQztBQUM1RCxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxzQ0FBc0MsQ0FBQztBQUN0RCxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FB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T0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekcsSUFBSSxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNqRCxJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckI7QUFDQSxJQUFJLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN0QixNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsTUFBTSxDQUFDLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDOUIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2xCO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzdDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQ3BCLFVBQVUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLFNBQVMsQ0FBQztBQUNWLE9BQU87QUFDUDtBQUNBLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNiO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzdDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM3QyxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDN0MsUUFBUSxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsUUFBUSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDNUIsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDM0I7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0UsVUFBVSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQzNELFVBQVUsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUN4QixTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLLE1BQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO0FBQzlCLE1BQU0sT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsTUFBTSxHQUFHLENBQUMs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QUssR0FBRyxJQUFJLEVBQUU7QUFDMUIsVUFBVSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFDN0UsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLFNBQVMsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUU7QUFDakMsVUFBVSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQztBQUNwRSxVQUFVLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQztBQUN4RSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakIsU0FBUyxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksRUFBRTtBQUNqQyxVQUFVLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ3BFLFVBQVUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ3pFLFVBQVUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FB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QUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkMsZ0JBQWdCLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2QyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4QyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZDLGdCQUFnQixhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRCxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0EsY0FBYyxLQUFLLEVBQUU7QUFDckIsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2QyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMs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O0FBQ0EsWUFBWSxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyQixjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxFQUFFO0FBQ2pCLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNsQyxjQUFjLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsQ0FBQyxH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QUFLLENBQUMsRUFBRTtBQUN6QixRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixLQUFLLENBQUM7QUFDTixHQUFHLEVBQUUsQ0FBQztBQUNOO0FBQ0EsRUFBRSxTQUFTLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDN0MsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLDhCQUE4QixDQUFDLENBQUM7QUFDL0UsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTTtBQUM1QixRQUFRLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdCLElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMzQixJQUFJLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDM0IsSUFBSSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RyxJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEcsSUFBSSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLElBQUksZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUMxRyxJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0csSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDMUcsSUFBSSxJQUFJLGNBQWMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0FBQ3ZFLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0FBQ3ZFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBUSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsSUFBSSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QjtBQUNBLElBQUksS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUM5QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0RSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxD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QUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCLE9BQU87QUFDUDtBQUNBLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsWSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbFksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM1QixNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BZLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDN0IsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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QUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0IsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0IsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssQ0FBQztBQUNkLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0IsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0IsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsUUFBUSxJQUFJLEVBQUUsT0FBTztBQUNyQixRQUFRLE1BQU0sRUFBRSxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7QUFDbEMsUUFBUSxNQUFNLEVBQUUsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ2xDLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQzlCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxJQUFJLEdBQUcsSUFBSTtBQUNuQixRQUFRLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFELE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUU7QUFDMUIsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDN0IsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdB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LEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuNUMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVB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SyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3JELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNuQixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNwQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3RDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQzdFLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNoSCxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FB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Q0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMs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QUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxH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QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFH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QUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENB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QUFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIs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LENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFD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R0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxH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QUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFDM0IsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFDMUIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFDMUIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFDMUIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFDMUIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN2RSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNoQztBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO0FBR3REO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0MsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0Y7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekM7QUFDQSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pCLEVBQUUsV0FBVyxDQUFDO0FBQ2QsSUFBSSxJQUFJO0FBQ1IsSUFBSSxlQUFlLEdBQUcsSUFBSTtBQUMxQixHQUFHLEVBQUU7QUFDTCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLEtBQUssS0FBSyxDQUFDO0FBQ3JELEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ3JCLE1BQU0sZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO0FBQzNDLE1BQU0sRUFBRTtBQUNSLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksT0FBTyxXQUFXLENBQUMsVUFBVSxDQUFDO0FBQ2xDLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ3JCLE1BQU0sZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO0FBQzNDLE1BQU0sS0FBSztBQUNYLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ2hEO0FBQ0EsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFO0FBQzVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDM0IsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDNUI7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsSUFBSSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNwQyxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQSxJQUFJLFdBQVcsR0FBRyxTQUFTLGtCQUFrQixHQUFHO0FBQ2hELEVBQUUsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsRUFBRSxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDakMsRUFBRSxPQUFPO0FBQ1QsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQ2xELE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hCLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRCxRQUFRLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDO0FBQzNCLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEMsTUFBTSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxJQUFJLFNBQVMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3RCxNQUFNLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNyQjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsUUFBUSxPQUFPLFFBQVEsR0FBRyxHQUFHLEVBQUU7QUFDL0IsVUFBVSxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsT0FBTyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLFVBQVUsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUN4QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLFFBQVEsSUFBSSxHQUFHLENBQUM7QUFDeEIsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksUUFBUSxJQUFJLFNBQVMsQ0FBQztBQUNyRCxRQUFRLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUM7QUFDVixNQUFNLElBQUk7QUFDVixNQUFNLGVBQWU7QUFDckIsTUFBTSxFQUFFO0FBQ1IsS0FBSyxFQUFFO0FBQ1AsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2pCLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNsQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzdILE1BQU0sSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM3QyxNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsQztBQUNBLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDaEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQy9CLFFBQVEsSUFBSTtBQUNaLFFBQVEsZUFBZTtBQUN2QixRQUFRLEVBQUU7QUFDVixRQUFRLElBQUk7QUFDWixPQUFPLENBQUMsQ0FBQztBQUNULEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDO0FBQ1gsTUFBTSxJQUFJO0FBQ1YsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sRUFBRTtBQUNSLEtBQUssRUFBRTtBQUNQLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsTUFBTSxRQUFRLElBQUk7QUFDbEIsUUFBUSxLQUFLLGlCQUFpQjtBQUM5QixVQUFVLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO0FBQzdDLFlBQVksSUFBSTtBQUNoQixZQUFZLGVBQWU7QUFDM0IsWUFBWSxFQUFFO0FBQ2QsV0FBVyxDQUFDLENBQUM7QUFDYjtBQUNBLFFBQVEsS0FBSyxzQkFBc0I7QUFDbkMsVUFBVSxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQztBQUNsRCxZQUFZLElBQUk7QUFDaEIsWUFBWSxlQUFlO0FBQzNCLFlBQVksRUFBRTtBQUNkLFdBQVcsQ0FBQyxDQUFDO0FBQ2I7QUFDQSxRQUFRLEtBQUssaUJBQWlCO0FBQzlCLFVBQVUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7QUFDN0MsWUFBWSxJQUFJO0FBQ2hCLFlBQVksZUFBZTtBQUMzQixZQUFZLEVBQUU7QUFDZCxXQUFXLENBQUMsQ0FBQztBQUNiO0FBQ0EsUUFBUTtBQUNSLFVBQVUsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUM7QUFDaEQsWUFBWSxJQUFJO0FBQ2hCLFlBQVksZUFBZTtBQUMzQixZQUFZLEVBQUU7QUFDZCxXQUFXLENBQUMsQ0FBQztBQUNiLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQztBQUNWLE1BQU0sSUFBSTtBQUNWLE1BQU0sZUFBZTtBQUNyQixNQUFNLEVBQUU7QUFDUixLQUFLLEVBQUU7QUFDUCxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJO0FBQ1osUUFBUSxlQUFlO0FBQ3ZCLFFBQVEsRUFBRTtBQUNWLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekIsUUFBUSxJQUFJO0FBQ1osUUFBUSxlQUFlO0FBQ3ZCLFFBQVEsRUFBRTtBQUNWLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMO0FBQ0EsSUFBSSxVQUFVLENBQUM7QUFDZixNQUFNLElBQUk7QUFDVixNQUFNLGVBQWU7QUFDckIsTUFBTSxLQUFLO0FBQ1gsS0FBSyxFQUFFO0FBQ1AsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQixVQUFVLElBQUk7QUFDZCxVQUFVLGVBQWU7QUFDekIsVUFBVSxFQUFFLEVBQUUsS0FBSztBQUNuQixTQUFTLENBQUMsQ0FBQztBQUNYLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RELFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDLFVBQVUsSUFBSTtBQUNkLFVBQVUsZUFBZTtBQUN6QixVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLFVBQVUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3pELFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRCxVQUFVLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsU0FBUztBQUNULE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTDtBQUNBLElBQUksZ0JBQWdCLENBQUM7QUFDckIsTUFBTSxJQUFJO0FBQ1YsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sRUFBRTtBQUNSLE1BQU0sSUFBSTtBQUNWLEtBQUssRUFBRTtBQUNQLE1BQU0sU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQ2pDLFFBQVEsSUFBSSxXQUFXLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUNyQyxRQUFRLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyQixRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pELFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxVQUFVLEVBQUUsS0FBSyxDQUFDO0FBQ2xCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzFELE1BQU0sSUFBSSxLQUFLLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN4RDtBQUNBLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRTtBQUM3QixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDMUQsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QyxNQUFNLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEMsTUFBTSxJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsTUFBTSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsNkNBQTZDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0UsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CLFFBQVEsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUM1QyxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDbkIsUUFBUSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkUsTUFBTSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BILEtBQUs7QUFDTDtBQUNBLElBQUksc0JBQXNCLENBQUM7QUFDM0IsTUFBTSxJQUFJO0FBQ1YsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sRUFBRTtBQUNSLEtBQUssRUFBRTtBQUNQLE1BQU0sU0FBUyxXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUN0RCxRQUFRLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkUsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLFNBQVMsNEJBQTRCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3JGLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQVEsSUFBSSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ25ELFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakI7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakIsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoQyxVQUFVLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxVQUFVLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxVQUFVLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2xGLFVBQVUsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixVQUFVLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRCxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxRCxVQUFVLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFVBQVUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLElBQUksT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0IsVUFBVSxJQUFJLE9BQU8sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsVUFBVSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtBQUN6QixjQUFjLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0IsY0FBYyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO0FBQ3ZDLGFBQWEsTUFBTTtBQUNuQixjQUFjLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0IsY0FBYyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO0FBQ3ZDLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDdEIsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3BCLFNBQVM7QUFDVDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEMsVUFBVSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckI7QUFDQSxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdDLFlBQVksRUFBRSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELFdBQVc7QUFDWDtBQUNBLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsVUFBVSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsU0FBUztBQUNULE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTDtBQUNBLElBQUkscUJBQXFCLENBQUM7QUFDMUIsTUFBTSxJQUFJO0FBQ1YsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sRUFBRTtBQUNSLE1BQU0sSUFBSTtBQUNWLEtBQUssRUFBRTtBQUNQLE1BQU0sSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDN0IsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDcEI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25ELEtBQUs7QUFDTDtBQUNBLElBQUksMkJBQTJCLENBQUM7QUFDaEMsTUFBTSxJQUFJO0FBQ1YsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sRUFBRTtBQUNSLEtBQUssRUFBRTtBQUNQLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixNQUFNLE9BQU8sU0FBUyxpQ0FBaUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDMUYsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3pDLFVBQVUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRCxTQUFTO0FBQ1QsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0EsSUFBSSxnQkFBZ0IsQ0FBQztBQUNyQixNQUFNLElBQUk7QUFDVixNQUFNLGVBQWU7QUFDckIsTUFBTSxFQUFFO0FBQ1IsTUFBTSxJQUFJO0FBQ1YsS0FBSyxFQUFFO0FBQ1AsTUFBTSxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakQsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QztBQUNBLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO0FBQzNCLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUN2RSxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDekMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkQsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsVUFBVSxJQUFJO0FBQ2QsVUFBVSxlQUFlO0FBQ3pCLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDMUQsTUFBTSxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzFELE1BQU0sT0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlELEtBQUs7QUFDTDtBQUNBLElBQUksc0JBQXNCLENBQUM7QUFDM0IsTUFBTSxJQUFJO0FBQ1YsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sRUFBRTtBQUNSLEtBQUssRUFBRTtBQUNQLE1BQU0sSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsTUFBTSxPQUFPLFNBQVMsNEJBQTRCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3JGLFFBQVEsSUFBSSxJQUFJLEdBQUcsU0FBUywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNwRSxVQUFVLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtBQUN2QixZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEIsV0FBVyxNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtBQUM5QixZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEIsV0FBVztBQUNYO0FBQ0EsVUFBVSxPQUFPLENBQUMsQ0FBQztBQUNuQixTQUFTLENBQUM7QUFDVjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Q7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDekQsVUFBVSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN0IsWUFBWSxNQUFNO0FBQ2xCLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ25CLFVBQVUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDL0IsVUFBVSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFRLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM3RixRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1QyxPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0w7QUFDQSxJQUFJLG1CQUFtQixDQUFDO0FBQ3hCLE1BQU0sSUFBSTtBQUNWLE1BQU0sZUFBZTtBQUNyQixNQUFNLEVBQUU7QUFDUixNQUFNLElBQUk7QUFDVixLQUFLLEVBQUU7QUFDUCxNQUFNLElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDMUQsTUFBTSxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEQsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2xCLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakQsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckQsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRCxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoQyxNQUFNLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTDtBQUNBLElBQUkseUJBQXlCLENBQUM7QUFDOUIsTUFBTSxJQUFJO0FBQ1YsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sRUFBRTtBQUNSLEtBQUssRUFBRTtBQUNQLE1BQU0sSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsTUFBTSxJQUFJLGVBQWUsSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFO0FBQ2hFLFFBQVEsTUFBTSxRQUFRLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsRUFBRTtBQUN0QixVQUFVLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xGLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDekMsTUFBTSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN6QyxNQUFNLElBQUksU0FBUyxHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQsTUFBTSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNwQyxNQUFNLElBQUksZUFBZSxHQUFHLGNBQWMsQ0FBQztBQUMzQyxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sT0FBTyxTQUFTLCtCQUErQixDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUN4RixRQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUNyQixRQUFRLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyQixRQUFRLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMzQjtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsVUFBVSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDM0IsVUFBVSxHQUFHLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUM3QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO0FBQ3ZDLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDNUMsVUFBVSxPQUFPO0FBQ2pCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdDLFFBQVEsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDbkQ7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLFVBQVUsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEMsVUFBVSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsVUFBVSxJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUU7QUFDN0IsWUFBWSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzFCLFdBQVcsTUFBTTtBQUNqQixZQUFZLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxFQUFFO0FBQy9CLGNBQWMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUM1QixhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxlQUFlLEdBQUcsQ0FBQyxFQUFFO0FBQ2pDLFVBQVUsZUFBZSxFQUFFLENBQUM7QUFDNUIsVUFBVSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDckMsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0EsR0FBRyxDQUFDO0FBQ0osQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLFNBQVMsYUFBYSxDQUFDLENBQUMsRUFBRTtBQUMxQixFQUFFLElBQUksTUFBTSxDQUFDO0FBQ2I7QUFDQSxFQUFFLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQzdCLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRyxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ3pDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNmLEdBQUcsTUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUMzQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3BCLEdBQUcsTUFBTTtBQUNULElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUNEO0FBQ0EsSUFBSSxlQUFlLEdBQUcsU0FBUyxzQkFBc0IsR0FBRztBQUN4RCxFQUFFLElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUMzQjtBQUNBLEVBQUUsU0FBUyxlQUFlLENBQUMsWUFBWSxFQUFFO0FBQ3pDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRixHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxTQUFTLEdBQUc7QUFDOUIsSUFBSSxJQUFJLEVBQUUsU0FBUyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7QUFDL0MsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLGNBQWMsRUFBRTtBQUMvQyxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUMvRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTCxJQUFJLEdBQUcsRUFBRSxTQUFTLG1CQUFtQixHQUFHO0FBQ3hDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDbEMsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7QUFDaEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsS0FBSztBQUNMLElBQUksSUFBSSxFQUFFLFNBQVMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFO0FBQzNDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksY0FBYyxFQUFFO0FBQ25ELFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0FBQy9ELE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QjtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xFLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksS0FBSyxFQUFFLFNBQVMscUJBQXFCLENBQUMsQ0FBQyxFQUFFO0FBQzdDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELEtBQUs7QUFDTCxJQUFJLElBQUksRUFBRSxTQUFTLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDOUMsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDL0IsTUFBTSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDOUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsVUFBVSxDQUFDO0FBQ1gsVUFBVSxDQUFDO0FBQ1gsVUFBVSxDQUFDLENBQUM7QUFDWjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzlDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLElBQUksbUJBQW1CLEdBQUcsU0FBUywwQkFBMEIsR0FBRztBQUNoRSxFQUFFLFNBQVMsbUJBQW1CLENBQUMsU0FBUyxFQUFFO0FBQzFDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxtQkFBbUIsQ0FBQyxTQUFTLEdBQUc7QUFDbEMsSUFBSSxPQUFPLEVBQUUsU0FBUywyQkFBMkIsQ0FBQyxZQUFZLEVBQUU7QUFDaEUsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwRCxNQUFNLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDckMsTUFBTSxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ3BDLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QjtBQUNBLE1BQU0sT0FBTyxPQUFPLEdBQUcsTUFBTSxFQUFFO0FBQy9CLFFBQVEsUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtBQUMxQyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0IsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsUUFBUSxRQUFRO0FBQ3hCLFVBQVUsS0FBSyxJQUFJO0FBQ25CLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUI7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDcEIsY0FBYyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxHQUFHO0FBQ2xCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDeEIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLO0FBQ3BCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUI7QUFDQSxZQUFZLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM5RCxjQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLGFBQWEsTUFBTTtBQUNuQixjQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxNQUFNO0FBQ3JCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxVQUFVO0FBQ3pCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixjQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLGFBQWEsTUFBTTtBQUNuQixjQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxTQUFTO0FBQ3hCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxNQUFNO0FBQ3JCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQyxZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLO0FBQ3BCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssSUFBSTtBQUNuQixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLE1BQU07QUFDckIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSztBQUNwQixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLE9BQU87QUFDdEIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxPQUFPO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxJQUFJO0FBQ25CLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssSUFBSTtBQUNuQixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLE1BQU07QUFDckIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsQyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssT0FBTztBQUN0QixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxJQUFJO0FBQ25CLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssSUFBSTtBQUNuQixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSztBQUNwQixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxJQUFJO0FBQ25CLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSztBQUNwQixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxJQUFJO0FBQ25CLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSztBQUNwQixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRTtBQUN0QyxjQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixhQUFhLE1BQU07QUFDbkIsY0FBYyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLElBQUk7QUFDbkIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFlBQVksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzlELGNBQWMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakMsYUFBYSxNQUFNO0FBQ25CLGNBQWMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLE1BQU07QUFDckIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxPQUFPO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLO0FBQ3BCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxNQUFNO0FBQ3JCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLO0FBQ3BCLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssTUFBTTtBQUNyQixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLFVBQVU7QUFDekIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSztBQUNwQixZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDOUQsY0FBYyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxhQUFhLE1BQU07QUFDbkIsY0FBYyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQyxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVO0FBQ1YsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDekIsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxtQkFBbUIsQ0FBQztBQUM3QixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxrQkFBa0IsR0FBRyxTQUFTLHlCQUF5QixHQUFHO0FBQzlELEVBQUUsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxVQUFVLE9BQU8sRUFBRTtBQUMvQyxJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzlDLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN4QyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25CLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRDtBQUNBLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxPQUFPLEVBQUU7QUFDbkQsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDOUIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN0QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFVBQVUsT0FBTyxFQUFFO0FBQ2xELElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsU0FBUyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3hELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25CLEdBQUc7QUFDSDtBQUNBLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFVBQVUsT0FBTyxFQUFFO0FBQzFELElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQzVCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25CLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RDtBQUNBLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxPQUFPLEVBQUU7QUFDOUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN4QyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25CLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRDtBQUNBLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxPQUFPLEVBQUU7QUFDbkQsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxTQUFTLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7QUFDaEQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzdCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxxQkFBcUIsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckU7QUFDQSxFQUFFLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxPQUFPLEVBQUU7QUFDN0QsSUFBSSxPQUFPLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLFNBQVMsd0JBQXdCLEdBQUc7QUFDdEMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLHdCQUF3QixDQUFDLFNBQVMsR0FBRztBQUN2QyxJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUU7QUFDdkIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVHLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRTtBQUM1QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQzFCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLEtBQUs7QUFDTDtBQUNBLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixLQUFLO0FBQ0w7QUFDQSxJQUFJLHVCQUF1QixDQUFDLFVBQVUsRUFBRTtBQUN4QyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLE1BQU0sVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixNQUFNLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFO0FBQ2xCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbkMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxHQUFHO0FBQ2YsTUFBTSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTDtBQUNBLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDekMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3RELE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3RELE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQzVELE1BQU0sT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0YsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDekMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQ2pDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUM3QixRQUFRLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsT0FBTyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDcEMsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUMxQyxRQUFRLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUNqQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDN0IsUUFBUSxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRyxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0csSUFBSSxPQUFPLElBQUksa0JBQWtCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdELEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUNqQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDN0IsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUMxQyxRQUFRLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzdKLE1BQU0sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3RixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUN4QyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFDekIsTUFBTSxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFO0FBQ2hDLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsa0JBQWtCLEdBQUcsRUFBRTtBQUNsQztBQUNBLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxHQUFHO0FBQ2pDLElBQUksT0FBTyxFQUFFLFNBQVMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDdEUsTUFBTSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDNUIsTUFBTSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7QUFDeEMsVUFBVSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDekMsTUFBTSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZixNQUFNLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDL0M7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckQsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUN0QyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQyxVQUFVLFNBQVM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLGNBQWMsT0FBTyxJQUFJLENBQUM7QUFDMUIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLGNBQWMsT0FBTyxJQUFJLENBQUM7QUFDMUIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLGNBQWMsT0FBTyxJQUFJLENBQUM7QUFDMUIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLGNBQWMsT0FBTyxJQUFJLENBQUM7QUFDMUIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLE1BQU07QUFDckIsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLGNBQWMsT0FBTyxJQUFJLENBQUM7QUFDMUIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25DLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLO0FBQ3BCLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNsQyxjQUFjLE9BQU8sSUFBSSxDQUFDO0FBQzFCLGFBQWE7QUFDYjtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxPQUFPO0FBQ3RCLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNsQyxjQUFjLE9BQU8sSUFBSSxDQUFDO0FBQzFCLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQjtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUN6QyxjQUFjLE9BQU8sSUFBSSxDQUFDO0FBQzFCLGFBQWE7QUFDYjtBQUNBLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDNUI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbkUsY0FBYyxPQUFPLElBQUksQ0FBQztBQUMxQixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0M7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDaEUsY0FBYyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLGNBQWMsTUFBTTtBQUNwQixhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RSxZQUFZLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLFlBQVksWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLO0FBQ3BCLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNsQyxjQUFjLE9BQU8sSUFBSSxDQUFDO0FBQzFCLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDbEwsY0FBYyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLGNBQWMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JCLGNBQWMsTUFBTTtBQUNwQixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQztBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtBQUNoRSxjQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLFlBQVksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQixZQUFZLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RSxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssTUFBTTtBQUNyQixZQUFZLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbEMsY0FBYyxPQUFPLElBQUksQ0FBQztBQUMxQixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9CO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQ3BFLGNBQWMsT0FBTyxJQUFJLENBQUM7QUFDMUIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUM1RixjQUFjLE9BQU8sSUFBSSxDQUFDO0FBQzFCLGFBQWE7QUFDYjtBQUNBLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDekIsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYjtBQUNBLFlBQVksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVU7QUFDVixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDdkMsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxXQUFXLEVBQUU7QUFDbEQsUUFBUSxJQUFJLGdCQUFnQixHQUFHLElBQUksd0JBQXdCLEVBQUUsQ0FBQztBQUM5RCxRQUFRLFdBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM1QyxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNqRCxPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUU7QUFDdkMsUUFBUSxJQUFJLGdCQUFnQixHQUFHLElBQUksd0JBQXdCLEVBQUUsQ0FBQztBQUM5RCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNyQyxRQUFRLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFlBQVksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQzVCLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDNUIsVUFBVSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckQsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0osRUFBRSxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDaEQ7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUd0RDtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QixFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUU7QUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTtBQUNmLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDbEMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdkIsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTtBQUNmLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzNCLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRyxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0MsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDMUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLEdBQUc7QUFDZixJQUFJLE9BQU8sSUFBSSxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QyxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzdELFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QyxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzNELFFBQVEsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQzlCLE9BQU8sTUFBTTtBQUNiLFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxjQUFjLEdBQUc7QUFDbkIsSUFBSSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ3BELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QztBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ2hFLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkQsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN6RCxNQUFNLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ2pELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDOUMsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDeEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDM0QsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0MsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ3BELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkQsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBQzdFLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDNUMsTUFBTSxvQkFBb0IsR0FBRztBQUM3QixFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ1gsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDWCxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNQLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDWCxDQUFDLENBQUM7QUFDRjtBQUNBLE1BQU0sZUFBZSxHQUFHLFNBQVMsc0JBQXNCLEdBQUc7QUFDMUQsRUFBRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QixJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQzdCLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN6QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsRUFBRTtBQUMzQixNQUFNLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQztBQUNBLE1BQU0sSUFBSSxPQUFPLEVBQUU7QUFDbkIsUUFBUSxPQUFPLE9BQU8sQ0FBQztBQUN2QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksZUFBZSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRixLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsTUFBTSxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RyxLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsTUFBTSxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RyxLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsRUFBRSxHQUFHO0FBQ3BCLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvRixLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsTUFBTSxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUMzRyxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxNQUFNLGVBQWUsQ0FBQztBQUN0QixFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNwQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNwRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsR0FBRztBQUNiLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUM5QjtBQUNBLElBQUksT0FBTyxJQUFJLEVBQUU7QUFDakIsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbEIsUUFBUSxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUM7QUFDL0IsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sRUFBRTtBQUNuQixRQUFRLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQ3hDLFVBQVUsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUMxQixTQUFTO0FBQ1QsT0FBTyxNQUFNLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUM5QixRQUFRLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkIsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckQsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNsQixNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ2hCLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDaEIsTUFBTSxLQUFLLElBQUksQ0FBQztBQUNoQixNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ2hCLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDaEIsTUFBTSxLQUFLLElBQUksQ0FBQztBQUNoQixNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ2hCLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDaEIsTUFBTSxLQUFLLElBQUksQ0FBQztBQUNoQixNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ2hCLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDaEIsTUFBTSxLQUFLLElBQUksQ0FBQztBQUNoQixNQUFNLEtBQUssSUFBSTtBQUNmLFFBQVEsT0FBTyxJQUFJLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDbEY7QUFDQSxNQUFNLEtBQUssSUFBSTtBQUNmLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLFFBQVEsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDO0FBQ3RDO0FBQ0EsTUFBTSxLQUFLLElBQUk7QUFDZixRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixRQUFRLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQztBQUN0QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFO0FBQ2xHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxRQUFRLEdBQUcsQ0FBQyxXQUFXLEVBQUU7QUFDN0IsTUFBTSxLQUFLLElBQUk7QUFDZixRQUFRLE9BQU8sZUFBZSxDQUFDLEVBQUUsQ0FBQztBQUNsQztBQUNBLE1BQU0sS0FBSyxRQUFRO0FBQ25CLFFBQVEsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDO0FBQ3RDO0FBQ0EsTUFBTTtBQUNOLFFBQVEsT0FBTyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUM5QixJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDeEMsTUFBTSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDbEUsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxPQUFPLE1BQU07QUFDYixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN0QixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUM7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUd0RDtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEM7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQztBQUN4QixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3hCO0FBQ0EsTUFBTSxjQUFjLENBQUM7QUFDckIsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQ3BCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM5QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDaEIsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLENBQUM7QUFDckI7QUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RELFFBQVEsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQzFCLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFNBQVMsTUFBTTtBQUNmLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUN0QyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkMsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDaEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDL0IsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxHQUFHLGtDQUFrQyxDQUFDLENBQUM7QUFDM0csS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3BDLElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDaEQsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNwRSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUM7QUFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQ3BCLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDckIsSUFBSSxNQUFNLEVBQUUsR0FBRyxVQUFVO0FBQ3pCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztBQUMxQixJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxRQUFRO0FBQ2hDLFVBQVUsTUFBTSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUM7QUFDakM7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDakIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQzFELFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNsQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMxRCxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDakIsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ2xDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ2pDLE9BQU8sTUFBTTtBQUNiLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMxRCxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDbEMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDMUQsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2pCLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUs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Q0FBQyxDQUFDO0FBQy9CLE1BQU0sSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sSUFBSSxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEM7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMxQyxRQUFRLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QixVQUFVLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUIsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5QixVQUFVLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlCLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEQsUUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5RCxRQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlELE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJ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